
A Python script that checks if a web server is vulnerable to MadeYouReset (CVE-2025-8671) — an HTTP/2 DoS attack that bypasses Rapid Reset mitigations by tricking the server into resetting its own streams. It probes the target by sending a malformed WINDOW_UPDATE frame and inspects whether the server responds.
ウェブサーバーが MadeYouReset HTTP/2 サービス拒否脆弱性(CVE-2025-8671、CVSS 7.5 High)に対して潜在的に脆弱かどうかを検出する軽量な Python スクリプトです。
MadeYouReset は、2025年8月にテルアビブ大学と Imperva の研究者によって公開された HTTP/2 DoS 脆弱性です。これは、多くの一般的なサーバー実装における HTTP/2 ストリームアカウンティングと内部バックエンド処理の不一致を悪用します。
この攻撃は、故意に不正な HTTP/2 制御フレーム(例:increment=0 の WINDOW_UPDATE。これは RFC 9113 §6.9.1 で不正とされています)を送信し、サーバー自身に RST_STREAM フレームを発行させます。サーバーはプロトコルレベルではストリームを閉じたものとして扱いながら、バックエンドでリクエストの処理を続行するため、攻撃者は MAX_CONCURRENT_STREAMS 制限を回避し、クライアント側の RST_STREAM を1つも送信することなくサーバーリソースを枯渇させることができます。
これにより、以前の Rapid Reset 攻撃(CVE-2023-44487)に対して導入された緩和策をバイパスします。
既知の影響を受けるソフトウェア:
| 製品 | CVE |
|---|
| Apache Tomcat 9.x / 10.x / 11.x | CVE-2025-48989 |
| Netty < 4.1.124.Final / 4.2.4.Final | CVE-2025-55163 |
| F5 BIG-IP | CVE-2025-54500 |
| IBM WebSphere Application Server Liberty | CVE-2025-36047 |
| Varnish、Fastly、Jetty、SUSE、Wind River | CVE-2025-8671 |
h2 をネゴシエートする TLS ハンドシェイクを実行します。SETTINGS フレームを送信します。HEADERS フレームでリクエストストリームを開きます。WINDOW_UPDATE フレーム(increment=0)を送信します。RST_STREAM(GOAWAY なし) → 脆弱である可能性が高い。GOAWAY → 正しい RFC 動作。修正されている可能性が高い。このスクリプトは読み取り専用の受動的プローブを実行します。サーバーを悪用したり負荷テストを試みたりすることはありません。
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# pip install は不要 — 依存関係なし
python3 main.py <url> [OPTIONS]
| フラグ | デフォルト | 説明 |
|---|---|---|
--timeout SECONDS | 8 | ソケット読み取りタイムアウト |
--no-color | オフ | ANSI カラー出力を無効化 |
# 基本的なチェック
python3 main.py https://example.com
# カスタムポートと長めのタイムアウト
python3 main.py https://example.com:8443 --timeout 15
# CI 向け(カラーなし)
python3 main.py https://example.com --no-color
| コード | 意味 |
|---|---|
0 | 脆弱ではない — サーバーが GOAWAY で応答(正しい RFC 動作) |
1 | 脆弱である可能性が高い — サーバーがストリーム上で RST_STREAM を送信したが GOAWAY なし |
2 | 不明瞭 — HTTP/2 なし、接続エラー、またはあいまいな応答 |
終了コードにより、CI パイプラインや自動化スクリプトへの統合が容易になります。
========================================================
MadeYouReset (CVE-2025-8671) チェッカー
========================================================
ターゲット : https://vulnerable-server.example.com
ホスト : vulnerable-server.example.com:443
パス : /
タイムアウト : 8.0s
────────────────────────────────────────────────────────
[*] vulnerable-server.example.com:443 に接続中...
✓ TCP 接続確立
[*] TLS ハンドシェイクを実行中 (ALPN: h2, http/1.1) ...
→ ネゴシエートされたプロトコル : h2
✓ ALPN 経由で HTTP/2 (h2) をネゴシエート
[*] HTTP/2 クライアントプリアンブルを送信中 ...
✓ プリアンブル + SETTINGS 送信
[*] サーバーの SETTINGS を待機中 ...
← Frame type=0x04 stream=0 length=18
✓ サーバー SETTINGS 受信
✓ SETTINGS ACK 送信
[*] HTTP/2 ストリーム 1 を開く (HEADERS フレーム) ...
✓ ストリーム 1 で HEADERS 送信
[*] ストリーム 1 で不正な WINDOW_UPDATE (increment=0) を送信中 ...
RFC 9113 §6.9.1: increment=0 はストリームレベルの FLOW_CONTROL_ERROR
✓ 不正な WINDOW_UPDATE 送信
[*] サーバー応答を分析中 (タイムアウト=8.0s) ...
← RST_STREAM stream=1 error_code=0x00000003
────────────────────────────────────────────────────────
結果
────────────────────────────────────────────────────────
[脆弱である可能性が高い]
サーバーはストリーム 1 で RST_STREAM で応答
(error_code=0x00000003) しましたが、GOAWAY は送信しませんでした。
推奨する対応:
• パッチ: Apache Tomcat ≥10.1.44/11.0.10/9.0.108、
Netty ≥4.1.124.Final / 4.2.4.Final、
および CVE-2025-8671 に関連する他のベンダー勧告。
• 暫定措置: HTTP/2 を無効化するか、HTTP/2 フレームを
転送前に検証する WAF/プロキシを導入。
========================================================
| アクション | 詳細 |
|---|---|
| パッチ適用 | HTTP/2 スタック用の最新ベンダーアップデートを適用(上の表を参照) |
| HTTP/2 の無効化 | 暫定的な緩和策として HTTP/1.1 にフォールバック |
| WAF / プロキシ | エッジで HTTP/2 フレームを検証するリバースプロキシまたは WAF を導入 |
| レート制限 | クライアントごとの接続上限と RST_STREAM レート制限を適用 |
このツールは許可されたセキュリティテストおよび調査のみを目的としています。
所有していない、または明示的な書面によるテスト許可を得ていないシステムに対してこのスクリプトを実行しないでください。
著者は誤用に対する一切の責任を負いません。