Skip to main content

HTTP/2 CONTINUATIONフレームを悪用したDoS攻撃

blog feature pypi spoof

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で脆弱性を検出

  1. amphp/http(CVE-2024-2653)- 制限やスロットリングのないリソース割り当て

  2. Apache HTTP Server(CVE-2024-27316)- 制御されないリソース消費(「リソース枯渇」)

  3. Apache Tomcat(CVE-2024-24549)- 不適切な入力検証

  4. Apache Traffic Server(CVE-2024-31309)- 制御されないリソース消費(「リソース枯渇」)

  5. Envoy proxy(CVE-2024-27919およびCVE-2024-30255)- エラー状態を検出しても対処しない問題、および制御されないリソース消費(「リソース枯渇」) 

  6. Golang(CVE-2023-45288)- リソース枯渇

  7. h2 Rust crate

  8. nghttp2(CVE-2024-28182)- リソース枯渇

  9. Node.js(CVE-2024-27983)- リソース枯渇

  10. Tempesta FW(CVE-2024-2758)- 制限やスロットリングのないリソース割り当て 

参考資料

  1. https://nowotarski.info/

  2. https://nowotarski.info/http2-continuation-flood-technical-details/#reachable-assertion-crash-nodejs-special-case 

  3. https://datatracker.ietf.org/doc/html/rfc7540 

  4. https://www.securityweek.com/new-http-2-dos-attack-potentially-more-severe-than-record-breaking-rapid-reset/

オープンソースの依存関係を安全に保つ

Snykは、脆弱なオープンソースの依存関係とその推移的依存関係を、ワンクリックで修正するPRを提供します。