CERT Coordination Center (CERT/CC, Carnegie Mellon University)は4月3日(米国時間)、「VU#421644 - HTTP/2 CONTINUATION frames can be utilized for DoS attacks」において、HTTP/2プロトコルのCONTINUATIONフレームに脆弱性が存在するとして、注意を喚起した。この脆弱性を悪用されると、攻撃者によってサービス運用妨害(DoS: Denial of Service)攻撃を実行される危険性がある。

  • VU#421644 - HTTP/2 CONTINUATION frames can be utilized for DoS attacks

    VU#421644 - HTTP/2 CONTINUATION frames can be utilized for DoS attacks

HTTP/2プロトコルの脆弱性

HTTP/2プロトコルは従来のHTTP/1.1の問題点を克服するため、1つのコネクション上で複数のリクエストおよびレスポンスを可能にするストリームと呼ばれる多重化の仕組みが実装されている。各ストリームはそれぞれリクエストとレスポンスを処理することができる。

これらストリームはフレームと呼ばれる単位でデータをやりとりするが、フレームには0から9まで10種類のタイプが規定されており、今回脆弱性が存在すると指摘されたCONTINUATIONフレームは、この9番のフレームとなる。

CONTINUATIONフレームはヘッダー情報を送信するHEADERSフレーム、またはサーバプッシュストリームの予約に使用するPUSH_PROMISEフレームの1度に送信できなかったフレームを継続するために使用される。フレームには8bitのフラグが用意されており、このフラグのEND_HEADERSがセットされているか否かでフレームの終わりを識別する。

今回発見された脆弱性は、単一ストリーム内で送信できるCONTINUATIONフレーム数に上限を設けていない不具合とされる。このような実装のHTTP/2サーバに対し、攻撃者はEND_HEADERSをセットせずにCONTINUATIONフレームを繰り返し送信することでサーバリソースを無限に消費させることができる。その結果、サーバはメモリー不足に陥りシステムの停止に至る。

この脆弱性および同種の脆弱性は実装ごとに複数の脆弱性情報データベース(CVE: Common Vulnerabilities and Exposures)に登録されている。それらの一覧は次のとおり。

脆弱性の影響を受ける製品

脆弱性の影響を受けるとされる製品とバージョンは次のとおり。

  • amphp/http-client v4.0.0-rc10からv4.0.0までのバージョン
  • amphp/http 1.7.2および、2.0.0から2.1.0までのバージョン
  • Apache HTTP Server 2.4.58およびこれ以前のバージョン
  • Arista Networksの複数の製品(参考:「Security Advisory 0094 - Arista」)
  • Go(net/httpパッケージ) 1.21.9より前、または1.22.0-0から1.22.2より前のバージョン
  • Go(golang.org/x/net/http2パッケージ) v0.23.0より前のバージョン
  • Tempesta FW 0.7.1より前のバージョン
  • Node.js Version 21.7.2より前のバージョン
  • Node.js Version 20.12.1より前のバージョン
  • Node.js Version 18.20.1より前のバージョン

脆弱性が修正された製品

脆弱性が修正された製品とバージョンは次のとおり。

  • amphp/http-client v4.1.0-rc1およびこれ以降のバージョン
  • amphp/http 1.7.3、2.1.1およびこれ以降のバージョン
  • Apache HTTP Server 2.4.59
  • Go(net/httpパッケージ) 1.22.2
  • Go(golang.org/x/net/http2パッケージ) v0.23.0
  • Tempesta FW 0.7.1
  • Node.js Version 21.7.2
  • Node.js Version 20.12.1
  • Node.js Version 18.20.1

上記の一覧はHTTP/2プロトコルをサポートするその他の製品の安全を示すものではない。影響を受けないと公表している製品や調査中の製品も存在するため、管理している製品が影響を受けるか否かは開発者に問い合わせるか、または発表を確認する必要がある。CERT/CCは開発者の提供する情報を確認し、必要に応じてアップデートを適用することを呼びかけている。