
Apache Tomcat CVE-2025-24813 のローカル再現ラボ。脆弱性の悪用条件と AI 支援による検証を文書化したもの。
ローカルで認可された実験、パッチ理解、防御検証にのみ使用してください。未認可のターゲットにリクエストを送信しないでください。
本プロジェクトは、Apache Tomcat 9.0.98 のローカルインスタンス上で CVE-2025-24813 を再現する過程を記録する:partial PUT を使用して一時ファイルを書き込み、ファイル型 Session 永続化が有効かつデシリアライズフィルタ条件が緩い構成の下で、Session ファイルのロードおよび Payload 実行チェーンを検証する。
.inject.session の書き込み成功を確認し、次にアクセスによって Session のロードと Payload の実行がトリガーされることを確認する。HTTP ステータスコードのみで成功を判断してはならない。409 または 500 を返すが、ファイルの書き込みと後続のトリガーは、ファイル内容、サーバーログ、および制御された副作用を組み合わせて段階的に判断する必要がある。Apache 公式のセキュリティ公告では、CVE-2025-24813 の発生条件、影響範囲(Tomcat 9.0.0-M1 から 9.0.98 まで)、および 9.0.99 での修正情報が記載されています: https://tomcat.apache.org/security-9
java -version による)requests127.0.0.1:8080 のみをリッスンscripts/reproduce_local.py # ローカル検証スクリプト、ターゲットはデフォルトで localhost:8080
evidence/ # 実験スクリーンショット(手順ごとにリネーム済み)
python3 -m venv .venv
. .venv/bin/activate
python -m pip install requests
python scripts/reproduce_local.py
スクリプト内のターゲットはローカル実験アドレスに固定されており、リモートスキャンロジックは含まれていない。実行前にローカルの Tomcat インスタンスで以下を確認すること:
work/Catalina/localhost/ROOT が観察可能であること。PUT /inject/session に Content-Range を付与して送信し、一時ファイルが生成されるか観察する;work/Catalina/localhost/ROOT/.inject.session のサイズと内容を確認する;JSESSIONID=.inject を使用して制御されたローカルページにアクセスし、Session ファイルのロードを観察する;409/500 を直接脆弱性再現の失敗または成功と見なさないこと。HTTP ヘッダーは必ず実際の CRLF(バイト 0d 0a)を使用し、0x0d0x0a を可視テキストとして送信しないこと。Python では b"\\r\\n" を使用するか、requests にリクエストヘッダーの構築を任せること。
修正を含む Tomcat バージョンへ優先的にアップグレードし、Default Servlet の書き込み権限、partial PUT の使用シナリオ、Session 永続化フィルターの設定を再確認してください。修正後、同じローカル検証手順を繰り返すと、一時ファイル書き込み経路または Session 読み込み経路がもはや成立しないことが期待されます。
本リポジトリは、インターネット上のターゲットに対するスキャン、永続化、または一括悪用機能を提供しない。すべての内容は、本人が管理するローカル実験環境および明確に認可されたターゲット環境に限定される。