Tomcat の脆弱性の再現

1. Tomcat の任意のファイルの読み取りおよび書き込みの脆弱性 (CVE-2017-12615)

1. 脆弱性の説明

2017 年 9 月 19 日、Apache Tomcat は、リモート コード実行の脆弱性 (CVE-2017-12615) を含む 2 つの高リスクの脆弱性を正式に確認し、修正しました。脆弱な Tomcat が Windows ホスト上で実行されており、HTTP PUT リクエスト メソッドが有効になっている場合 (たとえば、読み取り専用初期化パラメータがデフォルト値から false に設定されている場合)、攻撃者は慎重に構築された攻撃リクエストパケット 任意のコードを含む JSP WebShell ファイルが存在すると、JSP ファイル内の悪意のあるコードがサーバーによって実行され、サーバー上でデータが漏洩したり、サーバーの権限が取得されたりします。

2. 影響範囲

Apache Tomcat 7.0.0 – 7.0.79

3. 脆弱性分析

最初のステートメントは、CVE-2017-12615 脆弱性を悪用する条件は、Windows+Tomcat 7.0.x+配置文件readonly=false設定ファイルの内容が次のとおりであるということです。

init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

Tomcat が readonly を false に設定すると、PUT リクエスト メソッドのサポートも有効になります。この時点ではファイルをアップロードできるということなので、どんなファイルでもアップロードできるのでしょうか?いいえ、まず Tomcat の次の 2 つの概要を理解する必要があります。

org.apache.jasper.servlet.JspServlet: デフォルトで jsp および jspx ファイル リクエストを処理します。PUT アップロード ロジックがなく、PUT リクエストを処理できません。
org.apache.catalina.servlets.DefaultServlet: デフォルトで静的ファイルを処理します (jsp、 jspx ファイル)には、PUT リクエストを処理できる PUT アップロード処理ロジックがあります。
したがって、ファイルをサーバーに PUT できたとしても、jsp、jspx で終わるファイルを直接 PUT することはできません。これらの接尾辞を持つこれらのファイルはすべて JspServlet によって処理され、JspServlet は PUT リクエストを処理できないためです。
しかし、Windows 機能を使用して次の 2 つの方法でファイルをアップロードすると、Tomcat はそれが JSP ファイルであるとは考えず、それを DefaultServlet に渡して処理するため、いわゆる CVE-2017 である JSP ファイルが正常に作成されます。 12615 の脆弱性。

evil.jsp%20
evil.jsp::$DATA
さらに、 evil.jsp/ タイプ (つまり、バックスラッシュで終わるファイル) のファイルをアップロードすると、jsp ファイルも正常に作成され、このメソッドにより、 PUT の脆弱性 この脆弱性は、Linux プラットフォームのすべてのバージョンと Tomcat 5.x ~ 9.x に広がります。

4. 環境構築

脆弱性環境には、vulhub の展開、展開方法、Baidu を使用します。

5. 脆弱性の再発

ブラウザが脆弱な環境にアクセスし、BP がパケットをキャプチャしてここに画像の説明を挿入
ここに画像の説明を挿入
攻撃リクエストを作成し、
ここに画像の説明を挿入
Ice Scorpion 接続を使用して送信します。
ここに画像の説明を挿入

2. Tomcat ファイル読み取り/ファイルインクルードの脆弱性 (CVE-2020-1938)

1. 脆弱性の説明

2020 年 2 月 20 日、National Information Security Vulnerability Sharing Platform (CNVD) は Apache Tomcat に関するセキュリティ情報をリリースし、Apache Tomcat ファイルには脆弱性 (CNVD-2020-10487、CVE-2020-1938 に対応) が含まれていました。Tomcat AJP プロトコルの実装上の欠陥により、関連するパラメータは制御可能であり、攻撃者はこの脆弱性を利用して、特定のパラメータを構築することにより、サーバー Web アプリの下にある任意のファイルを読み取ることができます。ファイルアップロード機能が同時にサーバー側に存在すると、攻撃者はさらにリモートでコードを実行することができます。

2. 影響範囲

Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31

3. 脆弱性の簡単な分析

Tomcat サーバーは、Connector コネクタ コンポーネントを介してクライアント プログラムとの接続を確立します。「コネクタ」とは、要求を受信して​​応答を返すエンドポイントを指します。つまり、コネクタ コンポーネントは、クライアントの要求を受信し、Tomcat サーバーの応答結果をクライアントに送信する役割を果たします。

Tomcat は、デフォルトで構成ファイル server.xml に 2 つのコネクタを構成します。

HTTP connector
AJP connector

HTTP コネクタは次のように構成されており、ポート 8080 でリッスンし、HTTP 接続の確立を担当します。これは、ブラウザ経由で Tomcat サーバーの Web アプリケーションにアクセスするときに使用されます。

AJP コネクタは、AJP プロトコルを通じて別の Web コンテナと対話できます。ポート 8009 をリッスンし、他の HTTP サーバーとの接続を確立します。このコネクタは、Tomcat を他の HTTP サーバーと統合するときに必要です。AJP コネクタは、AJP プロトコルを通じて Web コンテナと対話できます。デフォルトでは、Tomcat 構成が完了すると、conf/server.xml ファイル内の AJP コネクタ サービスはポート 8009 で待機します。

Gh0stcat の脆弱性により、攻撃者は Tomcat の下に展開されたすべての Web アプリケーション ディレクトリ内の任意のファイルを読み取ることができます。同時に、アプリケーションが Web サイト サービスにアップロード機能を備えている場合、攻撃者はまず、JSP コードを含む悪意のあるファイルをサーバーにアップロードすることもできます (アップロードされるファイルの種類は、画像、プレーン テキスト ファイルなど、任意のタイプにすることができます)。 )、Gh0stcat を使用してファイル Contains をアップロードすると、コード実行の危険が生じます。

4. 搾取

脆弱性環境はvulhubを利用して構築されています。構築後、アクセスして
ここに画像の説明を挿入
POC ファイルをダウンロードしhttps://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi/
、WEB-INF/web.xml ファイルを読み取ります。
ここに画像の説明を挿入

5. 修理のご提案

1. 修復のために Tomcat を直ちにバージョン 9.0.31、8.5.51、または 7.0.100 にアップグレードします。

2. AJP プロトコルを無効にします。
/conf/server.xml を編集し、次の行を見つけます。

<コネクタポート=”8009”プロトコル=”AJP/1.3” redirectPort=”8443” />

この行をコメントアウトします (削除することもできます)。

シークレットを構成して、AJP プロトコルの認証資格情報を設定します。

次に例を示します (YOUR_TOMCAT_AJP_SECRET は、安全性が高く、簡単に推測できない値に変更する必要があることに注意してください)。

<コネクタポート=”8009”プロトコル=”AJP/1.3” redirectPort=”8443”アドレス=”YOUR_TOMCAT_IP_ADDRESS” Secret=”YOUR_TOMCAT_AJP_SECRET”/>

3. Tomcat デシリアライゼーションの脆弱性 (CVE-2020-9484)

1. 脆弱性の説明

北京時間の 2020 年 5 月 20 日に、Apache は Apache Tomcat のリモート コード実行に関するリスク通知を正式にリリースしました。脆弱性番号は CVE-2020-9484 です。

Apache Tomcat は、サーブレットおよび JSP Web アプリケーション ソフトウェアを実行する、オープン ソースの Java ベースの Web アプリケーション ソフトウェア コンテナです。Tomcat が組み込みのセッション同期機能を使用する場合、安全でない構成 (EncryptInterceptor を使用しない) が使用されると、デシリアライゼーションの脆弱性が発生します。攻撃者は、慎重に構築されたデータ パケットを通じて、組み込みのセッション同期機能を使用する Tomcat サーバーを攻撃する可能性があります。 . 攻撃する。

この脆弱性の悪用に成功するには、次の 4 つの条件を満たす必要があります。

1. 攻撃者はサーバー上のファイルの内容とファイル名を制御できる

2. FileStore はサーバー PersistenceManager 構成で使用されます

3. PersistenceManager の sessionAttributeValueClassNameFilter が「null」に構成されているか、フィルタが十分に厳密ではないため、攻撃者がデータを逆シリアル化するためのオブジェクトを提供できるようになります。

4. 攻撃者は、攻撃者が制御するファイルに使用される FileStore の保存場所からの相対パスを知っています。

2. 影響範囲

Apache Tomcat 10.0.0-M1—10.0.0-M4

Apache Tomcat 9.0.0.M1—9.0.34

Apache Tomcat 8.5.0—8.5.54

Apache Tomcat 7.0.0—7.0.103

3. 環境構築

docker を使用してビルドする

git clone https://github.com/masahiro331/CVE-2020-9484.git //下载环境
cd CVE-2020-9484
docker build -t tomcat:groovy .   //创建镜像
docker run -d -p 8080:8080 tomcat:groovy  //开启服务

建築後は訪問してください
ここに画像の説明を挿入

4. 搾取

POCを直接実行して、JSESSION経由で悪意のあるセッション永続ファイルをロードします。

curl 'http://192.168.10.171:8080/index.jsp' -H 'Cookie: JSESSIONID=../../../../../usr/local/tomcat/groovy'

コンテナ検証を入力してください

docker exec -it $CONTAINER /bin/bash
ls /tmp/rce

ここに画像の説明を挿入

5. バグ修正

1. バージョンアップ
Apache Tomcat 10.0.0-M5 以降へのアップグレード
Apache Tomcat 9.0.35 以降への
アップグレード Apache Tomcat 8.5.55 以降へのアップグレード
Apache Tomcat 7.0.104 以降へのアップグレード
2. セッション永続化機能の使用禁止ファイルストア

おすすめ

転載: blog.csdn.net/guo15890025019/article/details/122199941