HTTP/2 CONTINUATIONフレームを悪用したDoS攻撃
2024年4月8日
0 分で読めます脆弱性について
この脆弱性は、最大フレームサイズを超えるヘッダーブロックの送信に使われるCONTINUATIONフレームを、HTTP/2の実装が処理する方法にあります。攻撃者は、1つのHTTP/2ストリーム内で過剰な数のCONTINUATIONフレームを送信し、この弱点を悪用します。大量のフレームによって、サーバーが効率よく処理できる限界を超えてしまいます。
Bartek Nowotarskiは、この脆弱性が「HTTP/2 Rapid Reset」攻撃など過去の事例と比べて、より大きな脅威となる点を指摘し、深刻さを強調しました。さらに、この脆弱性は2023年8月以降、実際に悪用されています。
この攻撃が特に懸念されるのは、1つのTCP接続、あるいはごく少数のフレームだけでWebサーバーをクラッシュさせる可能性があることです。その結果、影響を受けたサーバーでは、パフォーマンスが大幅に低下したり、完全に利用できなくなったりするおそれがあります。
この脆弱性は、Red Hat、SUSE Linux、Arista Networks、Apache HTTP Server Project、nghttp2、Node.js、AMPHP、Go Programming Languageなど、幅広いベンダーやHTTP/2ライブラリに影響します(これらに限りません)。
影響を受けるバージョン
プロジェクト | 影響を受けるバージョン | CVE ID |
|---|---|---|
amphp/http | >= 2.0.0 && <= 2.1.0, <= 1.7.2 | CVE-2024-2653 |
Apache HTTP Server (httpd) | 2.4.17-2.4.58 | CVE-2024-27316 |
Apache Tomcat | <=11.0.0-M16, <=10.1.18, <=9.0.85, 8.5.0-8.5.98 | CVE-2024-24549 |
Apache Traffic Server | 8.0.0-8.1.9, 9.0.0-9.2.3 | CVE-2024-31309 |
Envoy proxy (oghttp) | 1.29.0, 1.29.1 | CVE-2024-27919 |
Envoy proxy (nghttp2) | <=1.29.2 | CVE-2024-30255 |
Golang | <=1.20, <=1.21.8, <=1.22.1 | CVE-2023-45288** |
nghttp2 | <=1.60.0 | CVE-2024-28182 |
Node.js | <=18.20.0, <=20.12.0, <=21.7.1 | CVE-2024-27983 |
Tempesta FW | 0.7.0 | CVE-2024-2758 |
影響
HTTP/2が広く利用され、インターネットトラフィックの大部分を占めていること(Cloudflare Radarの推定では70%超)を踏まえると、この脆弱性の影響は甚大です。悪用のリスクを軽減し、Webサーバーを壊滅的なサービス拒否(DoS)攻撃やセキュリティ制限の回避攻撃から守るには、迅速なパッチ適用と堅牢なセキュリティ対策が不可欠です。
緩和策
影響を受けるプログラムを、脆弱性が修正された最新バージョンに更新してください。パッチが提供されていない場合は、一時的にサーバー上でHTTP/2を無効にすることを検討してください。
対策
パッチ適用と更新:サーバーソフトウェア、関連ライブラリ、HTTP/2実装に最新のセキュリティ更新を適用してください。ソフトウェアベンダーの更新情報をこまめに確認し、更新が提供されたらすぐにインストールして、既知の脆弱性を修正しましょう。
レート制限の導入:一定時間内に処理できるリクエスト数やフレーム数を制限するレート制限を設定しましょう。大量のトラフィックやフラッド攻撃による影響を軽減できます。
トラフィックの分析と監視:攻撃の可能性を示す異常なパターンや受信トラフィックの急増がないか、常に監視しましょう。HTTPトラフィックを分析して、HTTP/2実装の脆弱性を悪用する悪意のあるリクエストを検出し、対処してください。
Webアプリケーションファイアウォール(WAF)の使用:WAFを設定して受信トラフィックをフィルタリングし、悪意のあるリクエストがサーバーに到達するのを防ぎましょう。HTTP/2を狙う既知のDoS攻撃パターンを特定し、阻止するWAFルールを設定してください。
ネットワークレベルの防御策の導入:侵入検知システム(IDS)や侵入防止システム(IPS)などのネットワークレベルの防御策を導入し、HTTP/2実装を狙うDoS攻撃を示唆する不審なトラフィックパターンを検出して阻止しましょう。
サーバー実装の分散:複数のプロジェクトやプロバイダーにサーバー実装を分散させましょう。攻撃への耐性を高め、特定の実装に固有の脆弱性による影響を軽減できます。
Snykで脆弱性を検出
amphp/http(CVE-2024-2653)- 制限やスロットリングのないリソース割り当て
Apache HTTP Server(CVE-2024-27316)- 制御されないリソース消費(「リソース枯渇」)
Apache Tomcat(CVE-2024-24549)- 不適切な入力検証
Apache Traffic Server(CVE-2024-31309)- 制御されないリソース消費(「リソース枯渇」)
Envoy proxy(CVE-2024-27919およびCVE-2024-30255)- エラー状態を検出しても対処しない問題、および制御されないリソース消費(「リソース枯渇」)
Golang(CVE-2023-45288)- リソース枯渇
h2 Rust crate
nghttp2(CVE-2024-28182)- リソース枯渇
Node.js(CVE-2024-27983)- リソース枯渇
Tempesta FW(CVE-2024-2758)- 制限やスロットリングのないリソース割り当て
参考資料
オープンソースの依存関係を安全に保つ
Snykは、脆弱なオープンソースの依存関係とその推移的依存関係を、ワンクリックで修正するPRを提供します。
