CVE-2026-49975
CVE-2026-49975 Vulnerability Report — HTTP/2 Bomb
概要
| 項目 | 内容 |
|---|---|
| CVE番号 | CVE-2026-49975 |
| 公開日 | 2026-06-02 |
| 最終更新 | 2026-06-03 |
| CVSS v3.1 | 7.5 (重要度: High) — DoS専用脆弱性として正確なベクトル(C:N/I:N/A:H)。Tenableは9.8(C:H/I:H/A:H)を掲載しているが、これは純粋DoSとしては過大評価の可能性 |
| CVSS Vector | AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| CWE | CWE-400 (Uncontrolled Resource Consumption) |
| EPSS | 【情報不足】(NVD未登録のためEPSSスコアなし) |
| CISA KEV | なし (2026-06-05時点) |
| 別名 | HTTP/2 Bomb |
| 発見者 | Quang Luong (Calif) — OpenAI CodexによるAI支援発見 |
| 確認者 | Jun Rong, Duc Phan |
| 発表会議 | Real World AI Security Conference, Stanford (2026年6月) |
影響を受けるソフトウェアおよびバージョン
| ソフトウェア | バージョン | パッチ状況 | 修正バージョン |
|---|---|---|---|
| nginx | 1.29.7以下 (全HTTP/2有効化設定) | ✅ 修正済み | 1.29.8+ (max_headers ディレクティブ追加) |
| Apache httpd (mod_http2) | 2.0.40以下 | ✅ 修正済み | mod_http2 2.0.41 |
| Microsoft IIS | Windows Server 2025 (HTTP/2有効) | ❌ 未修正 | ベンダー通知済み、パッチなし |
| Envoy | 1.37.2以下 | ❌ 未修正 | ベンダー通知済み、パッチなし |
| Cloudflare Pingora | 0.8.0以下 | ❌ 未修正 | ベンダー通知済み、パッチなし |
影響規模: Shodan検索によると 880,000+ のHTTP/2有効化サイトが影響を受ける可能性。
技術詳細
脆弱性の概要
CVE-2026-49975は、HTTP/2のデフォルト設定におけるリソース枯渇型リモートDoS脆弱性である。攻撃者は単一のクライアント(100Mbpsの家庭回線レベル)から、HPACK圧縮爆発(Indexed Reference Bomb)とフロー制御ウィンドウのゼロバイトストール(Slowlorisスタイル)を組み合わせることで、サーバーメモリを秒単位で枯渇させることができる。
Apache httpdおよびEnvoyに対しては、単一クライアントで約20秒以内に32GBのサーバーメモリを消費・保持可能。nginxおよびIISでは約45秒で同様の効果がある。
根本原因
攻撃は2つの既知の技術を新規に組み合わせたもの:
1. HPACK Indexed Reference Bomb(圧縮爆発)
HTTP/2のHPACK圧縮アルゴリズム(RFC 7541)を悪用。攻撃者は以下の手順でメモリ増幅を発生させる:
- HPACK動的テーブルに単一ヘッダーをシード
- 1バイトのインデックス参照を数千回送信
- サーバー側で各参照が 70〜4,000バイト のメモリ割り出しをトリガー
ワイヤ上: 1バイト → サーバー上: 70〜4,000バイトの割り当て
従来のHPACK爆発(CVE-2016-6581)は「大きな値をテーブルに詰め込み繰り返し参照」する手法だったが、サーバーがデコード済みヘッダー合計サイズに上限を設けたため無効化された。HTTP/2 Bombの革新点は、「ほぼ空のヘッダー」を使用し、サーバーが各ヘッダーエントリに割り当てる**ブックキーピングオーバーヘッド(per-entry bookkeeping)**を増幅源とする点にある。デコードサイズ上限は発動しない(デコードするものがほぼ存在しないため)。
2. HTTP/2 Flow-Control Window Stall(フロー制御ストール)
- クライアントが ゼロバイトのINITIAL_WINDOW_SIZE を広告
- サーバーがレスポンスを完了できず、メモリが解放されない
- 1バイトのWINDOW_UPDATEフレーム を断続的に送信し、送信タイムアウトをリセットし続ける
- 結果:すべての割り当てが**無期限にメモリに固定(pinning)**される
3. Cookie Crumb Bypass(ヘッダー数制限回避)
RFC 9113 §8.2.3はCookieを複数フィールドに分割することを明示的に許可している。脆弱なサーバーは、分割された「Cookieのパンくず(crumbs)」をフィールド数制限にカウントしない。
- Apache: Cookieをマージする際、古いコピーを保持したまま再構築(増幅率は~4,000:1)
- nginx/IIS: 小さな
a:ヘッダーで~70:1の増幅
増幅率比較
| サーバー | 増幅率 | デモ結果 | 変種 |
|---|---|---|---|
| Envoy 1.37.2 | ~5,700:1 | ~32GB in ~10秒 | fat cookie crumbs |
| Apache httpd 2.4.67 | ~4,000:1 | ~32GB in ~18秒 | empty cookie crumbs |
| nginx 1.29.7 | ~70:1 | ~32GB in ~45秒 | tiny a: header |
| Microsoft IIS (Win Server 2025) | ~68:1 | ~64GB in ~45秒 | tiny header, 900 refs |
| Cloudflare Pingora 0.8.0 | ~62:1 | 検証済み | tiny a: header |
RFC 7541 §7.3の仕様欠陥
RFC 7541の「Memory Consumption」セクションは、SETTINGS_HEADER_TABLE_SIZEによる動的テーブルのバウンディングのみを防御策として提示し、リスクを「増幅比(amplification ratio)」としてのみ捉えている。しかし、HTTP/2のフロー制御によりクライアントがほぼゼロコストで接続を保持できるため、増幅比だけでは不十分である。
「70:1の増幅器は、リクエスト完了時にメモリが解放されれば無害である。HTTP/2はクライアントがほぼ無料で接続を開放し続け、割り当てられたすべてのバイトを好きなだけ固定できるため、攻撃になる」 — Calif研究者
攻撃フロー
┌─────────────────────────────────────────────────────┐
│ 1. 攻撃者がHTTP/2接続を確立 │
│ ↓ │
│ 2. HPACK動的テーブルにヘッダーをシード │
│ ↓ │
│ 3. 数千回の1バイトインデックス参照を送信 │
│ → サーバー: 各参照で70〜5,700バイトのメモリ割り当て │
│ ↓ │
│ 4. INITIAL_WINDOW_SIZE=0を広告 │
│ → サーバー: レスポンス完了不可、メモリ解放不可 │
│ ↓ │
│ 5. 1バイトWINDOW_UPDATEを断続的に送信 │
│ → サーバー: タイムアウトリセット、接続維持 │
│ ↓ │
│ 6. 複数ストリーム/接続で並列実行 │
│ → サーバー: 32-64GBメモリ枯渇 → OOM → クラッシュ │
└─────────────────────────────────────────────────────┘
トリガー条件
- 条件1: HTTP/2プロトコルが有効(デフォルト設定)
- 条件2: ヘッダー数制限が未設定、またはCookie分割が制限対象外
⚠️ 重要: この脆弱性は各サーバーのデフォルトHTTP/2設定に存在する。特別な設定変更なしで影響を受ける。
PoC/Exploitの状況
| 項目 | 状況 |
|---|---|
| 公開PoC | あり — CalifがGitHubで公開 |
| PoCリポジトリ | califio/publications/MADBugs/http2-bomb |
| Exploit成熟度 | PoC → weaponized (AIモデルが修正コミットdiffから即座にexploit生成可能) |
| メタスパloitモジュール | なし(確認時点) |
| ExploitDB | なし(確認時点) |
| Nessus検出 | プラグインID: 318375(2026-06-03追加) |
PoCリポジトリにはEnvoy、Apache httpd、nginx、Microsoft IIS、Cloudflare Pingoraそれぞれの自己完結型PoCディレクトリが含まれている。各ディレクトリで対象サーバーをビルド→メモリ制限下で起動→bomb実行→RSS監視が可能。
実被害・インシデント
現在のところ、野外での悪用は確認されていない。 ただし、以下の理由から悪用リスクは極めて高い:
- 修正コミットが公開されている — diffからAIモデルが即座に動作するexploitを生成可能
- 実際のexploit生成が確認済み — 研究者らがAIモデルを使用してIIS、Envoy、Pingoraへの影響を確認
- 低い参入障壁 — 100Mbpsの家庭回線で実行可能
- 大規模な攻撃対象 — 880,000+のHTTP/2有効化サイト
研究者らは「修正コミットが公開された時点で攻撃は公開状態とみなした」として、2026年6月2日に公開披露を行った。
検出方法
ブラックボックステスト
サーバーバージョン確認
# nginx
curl -sI https://target.com | grep -i server
# Apache
curl -sI https://target.com | grep -i server
⚠️ 注意: 本番環境の多くはserver_tokens off(nginx)またはServerTokens Prod(Apache)でバージョン情報を非表示にしているため、Server:ヘッダーからのバージョン特定は信頼できない。HTTP/2有効化確認(ALPN)を併用すること。
HTTP/2有効化確認
# HTTP/2レスポンスを確認
curl -sI --http2 https://target.com | head -5
# または OpenSSLでALPN確認
echo | openssl s_client -alpn h2 -connect target.com:443 2>/dev/null | grep "ALPN protocol"
脆弱性テスト(⚠️ 破壊的 — メモリ枯渇を引き起こす。本番環境では絶対に実行しないこと)
# PoCスクリプトを実行(califio/publicationsリポジトリより)
# 各サーバー向けディレクトリ内のスクリプトを使用
cd publications/MADBugs/http2-bomb/nginx
# サーバーをビルド・起動後、bombスクリプトを実行
⚠️ 警告: PoC実行はメモリ枯渇を引き起こす。必ず分離環境(Docker/VM)でのみ実行すること。
ホワイトボックステスト
nginx — HTTP/2有効化確認
# nginx設定でhttp2ディレクティブを検索
grep -rn "http2" /etc/nginx/
grep -rn "listen.*http2" /etc/nginx/
# または http2 on; の存在確認
grep -rn "http2 on" /etc/nginx/
Apache — mod_http2有効化確認
# mod_http2の有効化確認
apache2ctl -M 2>/dev/null | grep http2
# または
httpd -M 2>/dev/null | grep http2
# Protocolsディレクティブ確認
grep -rn "Protocols" /etc/apache2/ /etc/httpd/
影響判定マトリックス
| HTTP/2有効 | ヘッダー数制限設定 | 結論 |
|---|---|---|
| ❌ 無効 | — | 影響なし (HTTP/1.1のみ) |
| ✅ 有効 | ✅ nginx: max_headers 設定済 / Apache: mod_http2 >= 2.0.41 |
影響なし (修正済み) |
| ✅ 有効 | ❌ 制限なし / 旧バージョン | 高リスク (PoC実行可能) |
修正コミット詳細
nginx 修正コミット (3656941)
| 項目 | 内容 |
|---|---|
| コミット | 365694160a85229a7cb006738de9260d49ff5fa2 |
| タイトル | "Added max_headers directive." |
| 変更ファイル数 | 6ファイル |
| 新規ディレクティブ | max_headers <number> (デフォルト: 1000) |
| コンテキスト | http, server |
| 対応プロトコル | HTTP/1, HTTP/2, HTTP/3 統一 |
修正の仕組み: r->headers_in.count カウンターを追加し、ヘッダーパージングループで各プロトコル(HTTP/1/2/3)統一してカウント。上限超過時に 431 Request Header Fields Too Large を返却。
// src/http/ngx_http_request.c (HTTP/1)
if (r->headers_in.count++ >= cscf->max_headers) {
r->lingering_close = 1;
ngx_log_error(NGX_LOG_INFO, c->log, 0,
"client sent too many header lines");
ngx_http_finalize_request(r, NGX_HTTP_REQUEST_HEADER_TOO_LARGE);
break;
}
Apache httpd 修正コミット (47d3100)
| 項目 | 内容 |
|---|---|
| コミット | 47d3100b252dc6668a9e46ae885242be9eeca9cd |
| 作者 | Stefan Eissing (icing) |
| モジュール | mod_http2 2.0.40 → 2.0.41 |
| 変更ファイル数 | 3ファイル |
| 修正内容 | CookieヘッダーのLimitRequestFieldsカウント修正 |
修正の仕組み: req_add_header()関数内で、Cookieマージ時に*pwas_added = 1を設定し、マージされたCookieがLimitRequestFields制限に正しくカウントされるように修正。空のCookie値も早期リターンで処理。
// modules/http2/h2_util.c — 修正前: CookieマージがLimitRequestFieldsを回避
apr_table_setn(headers, "Cookie",
apr_psprintf(pool, "%s; %.*s", existing,
(int)nv->valuelen, nv->value));
// 修正後:
+ /* Treat the merge as an "add" to not escape LimitRequestFields */
+ *pwas_added = 1;
対策
恒久的対策
| サーバー | アクション |
|---|---|
| nginx | 1.29.8以降にアップグレード。max_headers ディレクティブがデフォルト1000で有効化される |
| Apache httpd | mod_http2 2.0.41以降にアップグレード |
⚠️ 重要: Apache 2.4.xユーザーへの注意
mod_http2 2.0.41は現在Apache 2.4.xにバックポートされていない。大半のApache管理者は2.4.x系を使用しており、mod_http2単体アップグレードでは修正できない。2.4.x環境ではProtocols http/1.1によるHTTP/2無効化が唯一の実用的な暫定対策である。Apacheプロジェクトによる2.4.xバックポートを監視すること。
# nginx — 明示的な設定(1.29.8+)
http {
max_headers 1000; # デフォルト値、必要に応じて調整
}
暫定対策・軽減策
1. HTTP/2の無効化(即時効果)
# nginx — HTTP/2を無効化
server {
listen 443 ssl;
# http2 on; をコメントアウトまたは削除
# または明示的に無効化
http2 off;
}
# Apache — HTTP/1.1のみにフォールバック
Protocols http/1.1
2. メモリ制限(cgroups/ulimit)
# ワーカープロセスのメモリ制限
ulimit -v 2097152 # 2GB制限
# または cgroups v2
systemctl set-property nginx.service MemoryMax=2G
「ワーカープロセスがギガバイト単位を必要とするのは稀である。1つを早期にOOMキルして再起動させる方が、攻撃者にマシン全体を95%メモリ使用率で抑えられるより良い障害モードである」 — Calif研究者
3. 接続制限
- HTTP/2接続のタイムアウトを厳格化
- クライアントあたりの同時ストリーム数を制限
- リバースプロキシでヘッダー数上限を強制
4. パッチ未適用サーバー(IIS, Envoy, Pingora)
- HTTP/2を無効化(可能な場合)
- ハードなヘッダー数制限を強制するリバースプロキシの前に配置
- ベンダーアドバイザリを監視
再現環境
PoCリポジトリ(califio/publications/MADBugs/http2-bomb)に各サーバー向けの自己完結型再現環境が含まれている。
# リポジトリのクローン
git clone https://github.com/califio/publications.git
cd publications/MADBugs/http2-bomb
# 各ディレクトリで:
# 1. 対象サーバーをビルド
# 2. メモリ制限下で起動
# 3. bombスクリプトを実行
# 4. RSSを監視
各ディレクトリ構成:
envoy/— Envoy 1.37.2向けPoChttpd/— Apache httpd 2.4.67向けPoCnginx/— nginx 1.29.7向けPoCmicrosoft-iis/— Windows Server 2025 IIS向けPoCpingora/— Cloudflare Pingora 0.8.0向けPoC
⚠️ 警告: 本リポジトリのPoCは所有していないインフラに対して実行しないこと。
関連脆弱性
| CVE | 概要 | 関係性 |
|---|---|---|
| CVE-2016-6581 | HPACK Bomb — 元のヘッダー圧縮爆発 | 同じHPACK増幅メカニズム、異なるアプローチ |
| CVE-2025-53020 | Apache Memory Exhaustion | HTTP/2メモリ枯渇の前身 |
| CVE-2016-8740 | CONTINUATION Frame DoS | HTTP/2フレームレベルDoS |
| CVE-2016-1546 | Slow Read攻撃 (Worker-Thread Starvation) | 同じフロー制御悪用の概念 |
参考資料
公式情報源
- oss-sec メーリングリスト — 公式公開アナウンス
- nginx 1.29.8 リリース — 修正バージョン
- Apache httpd コミット 47d3100 — mod_http2 2.0.41修正
- nginx コミット 3656941 — max_headersディレクティブ追加
技術分析
- Calif — Codex Discovered a Hidden HTTP/2 Bomb — 詳細技術分析
- SecurityWeek — 'HTTP/2 Bomb' Exploit Knocks Web Servers Offline in Seconds
- The Hacker News — New HTTP/2 Bomb Vulnerability
- Feedly CVE Tracker
- Tenable CVE Page
- Innovation Network Design — HTTP/2 Bomb Intel
PoC/Exploit
- califio/publications/MADBugs/http2-bomb — 公式PoCリポジトリ
ディスクロージャータイムライン
- 2026年4月: nginxに披露 → 翌日パッチ適用
- 2026年5月27日: Apacheに披露 → 同日Stefan Eissingが修正
- 2026年6月2日: 公開披露(修正コミットdiffからのAI exploit生成を確認したため)
- 2026年6月3日: TenableがNessusプラグイン318375を追加
- 2026年6月: Real World AI Security Conference, Stanfordで発表予定
変更履歴
| 日付 | 変更内容 |
|---|---|
| 2026-06-05 | 初版作成 — 複数ソースからの情報収集・統合 |