リモートの未認証クライアントは、HTTP/3サーバーに送信量の数十倍から数千倍ものメモリを確保させることができます。接続が1つあれば、サーバーのメモリを使い果たさせたり、デフォルト設定のサーバーを動かなくさせたりするのに十分です。テストした10の実装のうち7つが脆弱で、そのいくつかはすでに修正されています。
QPACKは、ネットワーク上で送信されるトラフィックを最小限にするためにHTTP/3ヘッダーを圧縮します。影響を受ける実装では、デコード後のヘッダーの制限が欠けているか、不完全であるか、適用が遅すぎます。そのため、小さなHEADERSフレームがメモリ内で数十万のヘッダーオブジェクトに展開されることがあります。この展開を防ぐには、フィールドをデコードして保持する際に累積の上限を適用する必要があります。
この研究は、TLSスキャナーであるJA4ScanのためにQUICスタックを調べている中で始まりました。そこでは、複数のHTTP/3実装で同じ種類の脆弱性が見つかりました。RFC 9114は、サーバーがデコード後のヘッダーサイズをどのように制限すべきかを定めていますが、一部の実装では圧縮フレームのサイズしか確認しない、チェック前にすべてを展開する、フィールドごとの32バイトのオーバーヘッドを無視する、設定が未構成のときに無制限とみなす、あるいはこの設定を一切適用しない、といった問題があります。
この攻撃は2つの方向から働きます。1,000,000バイトのHEADERSフレームには約160,000個の一意なヘッダーを詰め込めます。一方、動的テーブルを用いる変種では、大きなエントリを1つ挿入し、それを1バイトのインデックスで数千回参照します。これにより、lsquicとBunでは4064:1の増幅率になります。
quic-go、Cloudflare quiche、lsquic、Wiresharkには修正が提供されています。2026年10月20日時点で、Bun、h3クレート、aioquic/mitmproxyは未修正のままでした。緩和策としては、HTTP/3サーバーを外部に公開しないこと、mitmproxyでHTTP/3を無効にすること、h3でmax_field_section_sizeに適切な値を設定することが挙げられます。IIS、Envoy、ngtcp2/nghttp3は影響を受けません。
出典: Hacker News · 要約:HeadlinesBriefing