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)を悪用。攻撃者は以下の手順でメモリ増幅を発生させる:

  1. HPACK動的テーブルに単一ヘッダーをシード
  2. 1バイトのインデックス参照を数千回送信
  3. サーバー側で各参照が 70〜4,000バイト のメモリ割り出しをトリガー
ワイヤ上: 1バイト → サーバー上: 70〜4,000バイトの割り当て

従来のHPACK爆発(CVE-2016-6581)は「大きな値をテーブルに詰め込み繰り返し参照」する手法だったが、サーバーがデコード済みヘッダー合計サイズに上限を設けたため無効化された。HTTP/2 Bombの革新点は、「ほぼ空のヘッダー」を使用し、サーバーが各ヘッダーエントリに割り当てる**ブックキーピングオーバーヘッド(per-entry bookkeeping)**を増幅源とする点にある。デコードサイズ上限は発動しない(デコードするものがほぼ存在しないため)。

2. HTTP/2 Flow-Control Window Stall(フロー制御ストール)

  1. クライアントが ゼロバイトのINITIAL_WINDOW_SIZE を広告
  2. サーバーがレスポンスを完了できず、メモリが解放されない
  3. 1バイトのWINDOW_UPDATEフレーム を断続的に送信し、送信タイムアウトをリセットし続ける
  4. 結果:すべての割り当てが**無期限にメモリに固定(pinning)**される

RFC 9113 §8.2.3はCookieを複数フィールドに分割することを明示的に許可している。脆弱なサーバーは、分割された「Cookieのパンくず(crumbs)」をフィールド数制限にカウントしない。

増幅率比較

サーバー 増幅率 デモ結果 変種
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 → クラッシュ   │
└─────────────────────────────────────────────────────┘

トリガー条件

⚠️ 重要: この脆弱性は各サーバーのデフォルト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監視が可能。

実被害・インシデント

現在のところ、野外での悪用は確認されていない。 ただし、以下の理由から悪用リスクは極めて高い:

  1. 修正コミットが公開されている — diffからAIモデルが即座に動作するexploitを生成可能
  2. 実際のexploit生成が確認済み — 研究者らがAIモデルを使用してIIS、Envoy、Pingoraへの影響を確認
  3. 低い参入障壁 — 100Mbpsの家庭回線で実行可能
  4. 大規模な攻撃対象 — 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. 接続制限

4. パッチ未適用サーバー(IIS, Envoy, Pingora)

再現環境

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を監視

各ディレクトリ構成:

⚠️ 警告: 本リポジトリの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) 同じフロー制御悪用の概念

参考資料

公式情報源

技術分析

PoC/Exploit

ディスクロージャータイムライン

変更履歴

日付 変更内容
2026-06-05 初版作成 — 複数ソースからの情報収集・統合