
このリポジトリには、CVE-2026-29145 をテストするために設計された概念実証(PoC)環境が含まれています。
この脆弱性は、Apache Tomcat の相互TLS(CLIENT_CERT)実装における認証バイパスです。OCSP(オンライン証明書状態プロトコル)がソフトフェイル無効で構成されている場合、Tomcat は OCSP チェックの失敗をハード拒否として扱わない可能性があります。これにより、OCSP レスポンダが到達不能またはエラーを返す場合、失効済みまたは未検証の証明書を持つクライアントが認証をバイパスできる可能性があります。
| プロパティ | 値 |
|---|---|
| CVE ID | CVE-2026-29145 |
| CVSS スコア | 9.1(Critical)- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| 攻撃ベクトル | ネットワーク |
| 必要な権限 | なし |
| 影響 | 認証バイパス |
.ps1 スクリプトを使用する場合run_test.sh スクリプトは、クリーンアップ、証明書生成、およびすべてのテストシナリオ(脆弱、成功、パッチ適用済み)の実行を含むプロセス全体を自動化します。
# プロジェクトディレクトリに移動
cd CVE-2026-29145-Tester
# スクリプトを実行可能にする
chmod +x cleanup.sh setup_certs.sh run_test.sh
# Python 依存関係をインストール(poc_exploit.py が必要とする場合)
pip install -r requirements.txt
# フルテストスイートを実行
./run_test.sh
Linux/macOS の場合:
./setup_certs.sh
Windows(PowerShell)の場合:
.\setup_certs.ps1
この操作の内容:
http://localhost:8888 を指す OCSP 拡張子を持つクライアント証明書を生成期待される出力:
[INFO] CVE-2026-29145 テスト環境の証明書生成を開始します
[INFO] OpenSSL が見つかりました: OpenSSL 3.0.x (...)
[INFO] certs ディレクトリを作成しました
[INFO] ルート CA を生成中...
[INFO] サーバー証明書を生成中...
[INFO] OCSP 拡張子付きクライアント証明書を生成中...
[INFO] 証明書のセットアップが正常に完了しました!
docker-compose up -d
この操作の内容:
コンテナが実行中であることを確認:
docker-compose ps
python poc_exploit.py
期待される出力:
脆弱なシステム:
[INFO] https://localhost:8443/protected-resource への接続を試行中...
[WARNING] 脆弱: OCSP チェックの失敗にもかかわらずアクセスが許可されました。
[WARNING] レスポンスプレビュー: <html>...
パッチ適用済みシステム:
[INFO] https://localhost:8443/protected-resource への接続を試行中...
[INFO] 脆弱ではない: アクセスが拒否されました(認証が機能しています)。
| シナリオ | OCSP ステータス | 期待される結果(パッチ適用済み) | 結果(脆弱) | 備考 |
|---|---|---|---|---|
| 通常動作 | オンライン & 有効 | 200 OK ✓ | 200 OK ✓ | OCSP チェックが成功し、アクセスが許可される |
| ソフトフェイル | オフライン/タイムアウト | 403 Forbidden ✓ | 200 OK ✗ | バイパス - OCSP レスポンダが到達不能 |
| ハード失効 | オンライン & 失効済み | 403 Forbidden ✓ | 403 Forbidden ✓ | 証明書が明示的に失効している |
| 無効な証明書 | 無効なチェーン | 403 Forbidden ✓ | 403 Forbidden ✓ | チェーン検証が失敗する |
テスト 1: デフォルト(OCSP レスポンダの障害)
# コンテナを実行したままにする
python poc_exploit.py
テスト 2: OCSP レスポンダの停止(タイムアウトのシミュレート)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
テスト 3: curl を使用した手動テスト
curl -v \
--cert certs/client-cert.pem \
--key certs/client-key.pem \
--cacert certs/ca-chain.pem \
https://localhost:8443/protected-resource
CVE-2026-29145-Tester/
├── README.md # このファイル
├── setup_certs.sh # 証明書生成スクリプト - Bash(Linux/macOS)
├── setup_certs.ps1 # 証明書生成スクリプト - PowerShell(Windows)
├── cleanup.sh # クリーンアップおよびリセットスクリプト - Bash(Linux/macOS)
├── cleanup.ps1 # クリーンアップおよびリセットスクリプト - PowerShell(Windows)
├── run_test.sh # 自動フルテストサイクルスクリプト
├── docker-compose.yml # Docker サービスオーケストレーション
├── requirements.txt # Python 依存関係
├── poc_exploit.py # メインテストスクリプト(ログ記録とエラーハンドリング付き)
├── simple_proxy_fail.py # モック OCSP レスポンダ(詳細なログ記録付き)
├── .gitignore # 証明書とログの Git 無視ルール
├── certs/ # 生成された証明書(setup_certs スクリプトによって作成)
│ ├── ca-chain.pem # ルート CA 証明書
│ ├── ca-key.pem # ルート CA 秘密鍵
│ ├── server-cert.pem # Tomcat サーバー証明書
│ ├── server-key.pem # Tomcat サーバー秘密鍵
│ ├── client-cert.pem # テストクライアント証明書
│ └── client-key.pem # テストクライアント秘密鍵
├── tomcat/
│ └── server.xml # 脆弱な Tomcat 構成
└── logs/ # Tomcat ログ(実行時に作成)
tomcat/server.xml ファイルは以下を構成します:
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
主要な設定:
certificateVerification="required" - CLIENT_CERT 認証を強制OCSP on - OCSP 失効チェックを有効化モック OCSP レスポンダ(simple_proxy_fail.py):
localhost:8888 で待ち受け# macOS
brew install openssl
# Ubuntu/Debian
sudo apt-get install openssl
# CentOS/RHEL
sudo yum install openssl
原因: 証明書の生成に失敗したか、実行されていません。
# クリーンアップして再生成
rm -rf certs
./setup_certs.sh
原因: Tomcat コンテナが実行されていないか、準備ができていません。
# コンテナのステータスを確認
docker-compose ps
# ログを確認
docker-compose logs vulnerable-tomcat
# 両方のサービスが実行中で正常であることを確認
docker-compose up -d
sleep 10 # サービスが起動するのを待つ
原因: Tomcat の起動に時間がかかりすぎているか、ネットワークの問題です。
# Tomcat の起動ログを確認
docker-compose logs vulnerable-tomcat
# タイムアウトを増やして再試行
timeout 30 docker-compose logs -f vulnerable-tomcat # 起動を監視
原因: Docker Compose がインストールされていないか、PATH にありません。
# Docker Compose をインストール(スタンドアロンの場合)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.x.x/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# または docker compose を使用(Docker Desktop に統合された V2)
docker compose up -d
原因: 証明書の検証に失敗しています。
# 証明書ファイルが存在することを確認
ls -la certs/
# 証明書の有効性を確認
openssl x509 -in certs/client-cert.pem -noout -text
原因: SSL ハンドシェイクの失敗 - ハードフェイルが正しく機能していることを示している可能性があります。
解決策: これは実際には良い兆候です! ハードフェイルは OCSP が失敗したときにアクセスを防いでいます。
# OCSP レスポンダが実行されているか確認
docker-compose ps ocsp-responder
# 詳細なエラーを表示
python poc_exploit.py # すでに詳細なログを提供します
原因: ポート 8443 または 8888 が既に使用されています。
# ポートを使用しているプロセスを検索
lsof -i :8443
lsof -i :8888
# プロセスを強制終了するか、docker-compose.yml で別のポートを使用
# Tomcat ログ
docker-compose logs -f vulnerable-tomcat
# OCSP レスポンダのログ
docker-compose logs -f ocsp-responder
# Python スクリプトのデバッグ
python poc_exploit.py # すでに詳細なログが含まれています
# ターミナルを開いて実行
docker-compose logs -f
# 別のターミナルでテストを実行
python poc_exploit.py
# OCSP レスポンダへの接続をテスト
curl http://localhost:8888/
# Tomcat コンテナ内から OCSP レスポンダをテスト
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# SSL ハンドシェイクをテスト
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
すべてのコンテナ、ボリューム、証明書、およびログを削除するには:
Linux/macOS の場合:
./cleanup.sh
Windows(PowerShell)の場合:
.\cleanup.ps1
この操作の内容:
certs/ ディレクトリを削除logs/ ディレクトリを削除クリーンアップの確認:
docker-compose ps # 何も表示されないはず
ls -la certs/ # 存在しないはず
このプロジェクトは、教育および許可されたセキュリティテストの目的のみを対象としています。
この脆弱性を軽減するには、Apache Tomcat を以下のバージョンにアップグレードしてください:
| バージョンシリーズ | 最低修正バージョン |
|---|---|
| 11.0.x | 11.0.20 以降 |
| 10.1.x | 10.1.53 以降 |
| 9.0.x | 9.0.116 以降 |
アップグレード手順:
# 例: docker-compose.yml をパッチ適用済みバージョンに更新
# 変更: image: tomcat:10.1.52-jdk17
# 宛先: image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
問題、質問、または貢献については、issue を開くか、プルリクエストを送信してください。
最終更新: 2026年4月
ステータス: テストとドキュメント完了