
HTTP/2 リモートサービス拒否脆弱性再現ツール
CVE-2026-49975 は、主要な Web サーバーに影響する HTTP/2 サービス拒否(DoS)脆弱性です。この脆弱性は、セキュリティ企業 Calif(OpenAI Codex を使用)によって 2026 年 6 月上旬に発見されました。
HPACK 圧縮爆弾:極めて小さなヘッダー(例: "x: a")をサーバーの HPACK 動的テーブルに挿入し、その後 1 バイトのインデックス参照を何千何万と送信します。各参照はサーバーに大量の管理用メモリを割り当てさせますが、クライアントはごくわずかな帯域幅しか消費しません。メモリ増幅率は ~5700:1(Envoy)および ~4000:1(Apache httpd)に達します。
Slowloris フロー制御維持:ゼロバイトのフロー制御ウィンドウによりサーバーがレスポンスを送信できないようにし、WINDOW_UPDATE フレームを drip-feed して接続を維持させ、メモリ割り当てを「固定」します。
Cookie 分割バイパス:大きな Cookie を多数の小さな断片に分割し、サーバーのヘッダー数制限を回避します。
本ツールはセキュリティ研究および許可を得たテストを目的とし、CVE-2026-49975 脆弱性の攻撃メカニズムを実演します。
pip install -r requirements.txt
# 基础攻击
python http2_bomb.py example.com
# 针对本地 HTTP/2 测试服务器(无 TLS)
python http2_bomb.py localhost -p 8080 --no-tls
# 高强度攻击(50 个 stream,每 stream 50000 个引用)
python http2_bomb.py example.com -s 50 -n 50000
# 启用 Cookie 分割绕过
python http2_bomb.py example.com --cookie-fragments 1000
# 快速模式(发送后不保持连接)
python http2_bomb.py example.com --no-hold
test_server.py を使用して、ローカル検証用の簡易 HTTP/2 サーバーを起動します:
# 生成自签名证书
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
# 启动测试服务器
python test_server.py --port 8443
# 运行攻击
python http2_bomb.py localhost -p 8443
即時緩和:直ちにパッチを適用できない場合は、一時的に HTTP/2 を無効化します
Protocols http/1.1http2 off;パッチの適用:
設定の堅牢化:
max_headers 制限を設定(nginx 1.29.8+ ではデフォルト 1000)監視とアラート:
⚠️ 本ツールはセキュリティ研究および許可を得たペネトレーションテスト専用です。
許可なく他人のシステムに対して本ツールを使用することは違法行為です。利用者は現地の法令を遵守し、正当な許可を得た対象に対してのみテストを行ってください。
MIT License - セキュリティ研究および教育目的で使用されます。
| ソフトウェア | 影響を受けるバージョン | 修正バージョン |
|---|
| Apache httpd (mod_http2) | < 2.0.41 | 2.0.41+ |
| nginx | < 1.29.8 | 1.29.8+ |
| OpenResty | nginx < 1.29.8 ベース | 1.29.8+ |
| Envoy (CVE-2026-47774) | ≤ 1.37.2 | 1.35.11, 1.36.7, 1.37.3, 1.38.1+ |
| Microsoft IIS | Windows Server 2025 | パッチなし |
| Cloudflare Pingora | デフォルト設定 | パッチなし |
| パラメータ | 説明 | デフォルト値 |
|---|
target | 対象ホストのアドレス | 必須 |
-p, --port | 対象ポート | 443 |
--no-tls | TLS を無効化 | false |
-s, --streams | 同時 Stream 数 | 10 |
-n, --headers-per-stream | Stream あたりの Header 参照数 | 10000 |
--cookie-fragments | Cookie 分割フラグメント数 | 0 |
--stream-delay | Stream 間の送信遅延(秒) | 0.01 |
--window-update-interval | WINDOW_UPDATE 送信間隔 | 5.0s |
--no-hold | 送信後に接続を保持しない | false |
--timeout | Socket タイムアウト時間 | 30 |