JETTY の紹介:
Jetty は Eclipse Foundation の一部であり、最新の Java Servlet API をサポートし、WebSocket、SPDY、および HTTP/2 プロトコルをサポートする純粋な Java ベースの Web サーバーおよび Java Servlet コンテナーです。
1. CVE-2021-28164 [34429] 機密情報の開示
1. 脆弱性の導入:
Jetty9.4.37 では、 RFC3986の仕様に準拠するために、あいまいな解釈を持つ可能性のある URI が選択的にサポートされています。デフォルト モードでは URL エンコードが可能です。単に RFC3986 ( RFC2396を置き換える)の規定を参照してください。
その一般的な意味は次のとおりです:.
および..
ドット セグメントと呼ばれ、パス名階層内の相対参照用に定義されており、一部のオペレーティング システムのファイル ディレクトリ構造における現在のディレクトリと親ディレクトリを表します。ただし、ファイル システムとは異なり、これらのドット セグメントは URI パス内で階層的にのみ解釈され、解決プロセスの一部として削除されます。つまり、URI パスを解析するときに、最初に.
とを処理..
する必要があります。この処理方法に準拠するために、Jetty は一連の脆弱性を引き起こしました。まず、CVE-2021-28164 はバージョン 9.4.39 で修正されました。その後、バージョン 9.4.43 で CVE-2021-34429 を再度修正する新しいバイパスが登場しました。
2. 搾取
1) CVE-2021-28164 脆弱性の悪用
-
Docker によって構築された脆弱性環境 (ポート 8080) へのアクセスは、簡単な初期化ページです。/WEB-INF/web.xml に直接アクセスすると、404d ページが返されます。
-
攻撃ペイロードを実行して web.xml を読み取ります。ペイロード:
/%2e/WEB-INF/web.xml
2) CVE-2021-34429 修復バイパス
基本的なバイパス原理:
エンコードされた文字を使用して URI を作成すると、WEB-INF ディレクトリのコンテンツにアクセスしたり、セキュリティ制限を回避したりできます。デフォルトの準拠モードでは、%u002e セグメントを含む URI を持つリクエストが WEB-INF ディレクトリ内の保護されたリソースにアクセスできます。
たとえば、/%u002e/WEB-INF/web.xml は、web.xml ファイルに対するリクエストを取得できます。これにより、Web アプリケーションの実装に関する機密情報が漏洩する可能性があります。また、エンコードされた null 文字は適切な正規化を妨げる可能性があるため、/.%00/WEB-INF/web.xml は web.xml ファイルも取得します。
複製プロセス:
-
いつものように /WEB-INF/web.xml にアクセスし、404 で応答します。
-
%u002e を使用して次をバイパスします。
-
NULL 文字を使用してバイパスします。
2. CVE-2021-28169
1.脆弱性の導入:
バージョン 9.4.40、10.0.2、および 11.0.2 より前のバージョンでは、Jetty サーブレットのクラスには複数のデコードの問題ConcatServlet
がありましたWelcomeFilter
。開発者がこれら 2 つのクラスを積極的に使用すると、攻撃者はそれらを使用して WEB-INF ディレクトリ内の機密ファイルにアクセスする可能性があります。その結果、設定ファイルとコードが漏洩します。
影響を受けるバージョン:
- 桟橋 9.4.40
- 桟橋 10.0.2
- 桟橋 11.0.2
2. 脆弱性の再発
-
ConcatServlet
ポート 8080 へのアクセスは、静的ファイルの読み込みを最適化するために使用される最初のサンプル ページです。<link rel="stylesheet" href="/static?/css/base.css&/css/app.css">
-
通常のパスでは
/static?/WEB-INF/web.xml
機密ファイル web.xml にアクセスできません。 -
制限を回避するには、文字「W」を二重 URL エンコードします。