JSP コードを置き換えて Web アプリケーション ファイルを取得できる Apache Tomcat の脆弱性

中国企業Chaitin Techの研究者が発見した 脆弱性 (CVE-2020-1938)で Apache Tomcat、Java Servlet、JavaServer Pages、Java Expression Language、および Java WebSocket テクノロジのオープン実装。 この脆弱性にはコード名 Ghostcat が割り当てられており、重大度レベルはクリティカル (9.8 CVSS) です。 この問題により、デフォルト構成では、ネットワーク ポート 8009 でリクエストを送信することにより、設定ファイルやアプリケーション ソース コードを含むファイルの内容を Web アプリケーション ディレクトリから読み取ることができます。

この脆弱性により、アプリケーション コードに他のファイルをインポートすることも可能になります。これにより、アプリケーションがサーバーへのファイルのアップロードを許可している場合、サーバー上でコードが実行される可能性があります (たとえば、攻撃者は、次の方法で画像を装った JSP スクリプトをアップロードできます)。画像アップロードフォーム)。 AJP ハンドラーを使用してネットワーク ポートにリクエストを送信できる場合、攻撃が実行される可能性があります。 予備データによると、オンライン 見つかった 1.2 万以上のホストが AJP プロトコル経由でリクエストを受け入れます。

この脆弱性は AJP プロトコルに存在し、 呼ばれていない 実装上のエラー。 Apache Tomcat は、HTTP (ポート 8080) 経由の接続を受け入れることに加えて、デフォルトで AJP プロトコル (Apache Jserv プロトコル、ポート 8009)、これはパフォーマンス向上のために最適化された HTTP のバイナリ類似物で、通常、Tomcat サーバーのクラスターを作成する場合、またはリバース プロキシまたはロード バランサー上で Tomcat との対話を高速化するために使用されます。

AJPではサーバー上のファイルにアクセスするための機能を標準で提供しており、非公開ファイルの取得などを利用することができます。 AJP は信頼できるサーバーのみにアクセスできることになっていますが、実際には Tomcat のデフォルト設定ではすべてのネットワーク インターフェイスでハンドラーが実行され、認証なしで要求が受け入れられました。 WEB-INF、META-INF、および ServletContext.getResourceAsStream() の呼び出しを通じて提供されるその他のディレクトリの内容を含む、あらゆる Web アプリケーション ファイルにアクセスできます。 AJP を使用すると、Web アプリケーションにアクセスできるディレクトリ内の任意のファイルを JSP スクリプトとして使用することもできます。

この問題は、13 年前にリリースされた Tomcat 6.x ブランチ以来発生しています。 Tomcat の問題自体に加えて、 影響を与える およびそれを使用する製品 (Red Hat JBoss Web Server (JWS)、JBoss Enterprise Application Platform (EAP)、およびそれを使用する自己完結型 Web アプリケーションなど) 春のブーツ。 同様の脆弱性 (CVE-2020-1745) 現在 ウェブサーバー内で 引き波、Wildfly アプリケーション サーバーで使用されます。 JBoss および Wildfly では、AJP は、domain.xml のstandalone-full-ha.xml、standalone-ha.xml、および ha/full-ha プロファイルでのみデフォルトで有効になります。 Spring Boot では、AJP サポートはデフォルトで無効になっています。 現在、さまざまなグループが XNUMX を超えるエクスプロイトの実例を準備しています (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11).

Tomcat リリースで修正された脆弱性 9.0.31, 8.5.51 и 7.0.100 (6.x ブランチのメンテナンス 廃止)。 次のページで、配布キットのアップデートの入手可能性を追跡できます。 Debianの, Ubuntu, RHEL, フェドーラ, SUSE, FreeBSDの。 回避策として、Tomcat AJP コネクタ サービスが必要ない場合は、Tomcat AJP コネクタ サービスを無効にする (リスニング ソケットをローカルホストにバインドするか、コネクタ ポート = "8009" の行をコメント アウトする) ことができます。 セットアップ サービスが mod_jk および mod_proxy_ajp に基づいて他のサーバーおよびプロキシと対話するために使用される場合、「secret」および「address」属性を使用して認証されたアクセス (mod_cluster は認証をサポートしません)。

出所: オープンネット.ru

コメントを追加します