HTTP/3のヘッダー圧縮(QPACK)の扱いに不備があり、ログインしていない相手からの小さな通信で、サーバーにその何十倍から何千倍ものメモリを使わせてしまえる問題が、2026年10月20日にFoxIOのSébastien Féry氏から公表されました。名前は「Header Accordions」です。調べた10個のHTTP/3の実装のうち7個が対象で、CaddyやTraefikが使うquic-go、OpenLiteSpeedが使うlsquicも入っています。データが盗まれる問題ではなく、サーバーが止まる(サービス妨害)問題です。
この問題に関係があるのは、CaddyやTraefik、OpenLiteSpeedなどでサイトを公開していて、HTTP/3が有効になっているかもしれない人です。
結論:どれを使っていると対象か
- Caddyはv2.11.1以降、Traefikはv3.6.4以降またはv2.11.32以降、OpenLiteSpeedは1.9.2以降なら、直ったライブラリが入っています。
- CaddyはHTTP/3が最初から有効です。v2.10.2以前のまま動かしているなら、更新するか、すぐ更新できないときはHTTP/3を止めてください。
- OpenLiteSpeedも初期設定でHTTP/3が有効です。1.9.1以前のまま動かしているなら、直ったlsquicが入った1.9.2以降に更新するか、HTTP/3を止めてください。
- h3(Rust)とaioquic(mitmproxyやhypercornが使うPythonのライブラリ)は、2026年10月20日の公表の時点で直ったバージョンがなく、2026年10月23日10時6分(日本時間)の時点でも出ていません。HTTP/3をインターネットに出さないのが対策です。
- Bunは、公表のあとの2026年10月22日に出た1.4.4で直ったと、開発元がGitHubのIssueで答えています。Bunを使っているなら1.4.4以降に更新してください。
- IIS、Envoy、ngtcp2/nghttp3、Googleのquicheは対象外とされています。nginxはこの調査の10個に入っていません。
何が起きる問題か
HTTP/3では、同じヘッダーを何度も送らずに済むよう、QPACKという方法でヘッダーを小さくして送ります。よく使うヘッダーは決まった表の番号で、一度送ったヘッダーは通信ごとに作る表の番号で表せるので、1バイトで長いヘッダーを指せます。
HTTP/3の決まり(RFC 9114)では、受け取るヘッダーの大きさに上限を設けてもよいとされていて、設けるときは元に戻した後の大きさ(名前と値の長さに、1つにつき32バイトを足したもの)で数えることになっています。対象の実装は、圧縮されたままの大きさしか見ていない、全部を元に戻してから確かめている、上限が初期値で無制限になっている、などのどれかに当てはまっていました。そのため、受け取った量に比べて桁違いのメモリを使ってしまいます。
FoxIOによると、初期設定のサーバーでも1本の接続でメモリを使い切らせたり、動かなくさせたりできるとされています。ログインは要りません。
ライブラリごとの対象と直ったバージョン
直ったバージョンより前が対象です。ただしWiresharkは、4.6.0〜4.6.1と4.4.0〜4.4.11だけが対象とされています。
| ライブラリ | 直った |
CVE番号 |
|---|---|---|
| quic-go |
0.57.0 | CVE-2025-64702 |
| Cloudflare quiche |
0.29.3 | CVE-2026-12523 |
| lsquic |
4.9.0 | なし |
| Wireshark | 4.6.2、 |
CVE-2025-13945 |
| Bun | 1.4.4 | なし |
| h3 |
まだない | なし |
| aioquic |
まだない | なし |
深刻度(CVSS)は、quic-goが5.3、quicheが7.5です。Bunは10月20日の時点の最新の1.4.3が対象とされています。Bunの1.4.4(2026年10月22日)は、HTTP/3のヘッダーの大きさをRFC 9114の数え方で確かめ、上限を超えた要求には431を返すようにしたと、修正のプルリクエストに書かれています。
quic-goの勧告では、サーバーだけでなくクライアントも対象です。悪意のある相手につないだときに、クライアント側でメモリを使わされます。直ったquic-goは、元に戻した後のヘッダーの大きさを確かめ、上限を超えたらサーバーは431を返して打ち切ります。
Wiresharkはサーバーではなく通信を見るソフトです。鍵のログを使ってHTTP/3を復号したとき、または鍵を含むキャプチャーファイルを開いたときに、落ちることがあります。
lsquicは4.9.0(2026年7月15日)で、1本の通信でためておけるヘッダーのまとまり(1回分のヘッダー一式)の数に上限を設けました。今の最新は4.10.2です。
サーバーソフトごとの直ったバージョン
CaddyとTraefikはquic-go、OpenLiteSpeedはlsquicを中で使っています。それぞれのリリースノートで、直ったライブラリに上がったバージョンは次のとおりです。
| ソフト | 中で |
直った |
|---|---|---|
| Caddy | quic-go | v2.11.1以降 |
| Traefik v3 | quic-go | v3.6.4以降 |
| Traefik v2 | quic-go | v2.11.32以降 |
| OpenLiteSpeed | lsquic | 1.9.2以降 |
| mitmproxy | aioquic | まだない |
| hypercorn | aioquic | まだない |
Caddyはv2.11.1(2026年2月23日)のリリースノートに、quic-go 0.57.0(直ったバージョン)への更新が載っていて、v2.11.1に入っているのは0.59.0です。v2.10.2まではquic-go 0.54.0です。Traefikはv3.6.4(2025年12月5日)とv2.11.32(12月4日)のリリースノートに、quic-go 0.57.1への更新が載っています。OpenLiteSpeedは1.9.2(2026年8月6日)のリリースログに、lsquic 4.9.3への更新が載っています。
hypercornはFoxIOの検証の対象には入っていません。aioquicに直ったバージョンがまだないため、表に入れています。
使っているバージョンとHTTP/3が有効かの確かめ方
Caddyのバージョンは次のコマンドで出ます。
caddy version
Traefikのバージョンは次のコマンドで出ます。
traefik version
OpenLiteSpeedのバージョンは次のコマンドで出ます(OpenLiteSpeedの文書のとおり、初期の場所に入れた場合)。
/usr/local/lsws/bin/lshttpd -v
サイトがHTTP/3を使えると知らせているかは、応答のヘッダーにある alt-svc で分かります。example.com は自分のドメインに置き換えてください。
curl -sI https://example.com/ | grep -i alt-svc
h3 を含む行が出てきたら、そのサイトはHTTP/3を受け付けています。
- Caddy:
protocolsの初期値がh1 h2 h3なので、何も設定していなければHTTP/3は有効です。 - Traefik:entryPointに
http3の設定を書いたときだけ有効です(v2では、さらに静的設定のexperimentalにhttp3の設定が要ります)。 - OpenLiteSpeed:サーバー全体の「Enable HTTP3/QUIC」、リスナーの「Open HTTP3/QUIC (UDP) Port」、バーチャルホストの「Enable HTTP3/QUIC」の初期値がどれも「Yes」なので、変えていなければHTTP/3は有効です。
すぐ更新できないときにHTTP/3を止める方法
Caddy
Caddyfileの先頭の全体設定で、使うプロトコルから h3 を外します。
{
servers {
protocols h1 h2
}
}
書き換えたら設定を読み込み直します。HTTP/1.1とHTTP/2はそのまま使えます。
Traefik
静的設定のentryPointから http3 の項目を外し、Traefikを起動し直します。コマンドラインで設定しているなら、--entryPoints.websecure.http3 のような引数を外します(websecure はentryPointの名前)。
OpenLiteSpeed
WebAdminの「Server Configuration」の「Tuning」にある「Enable HTTP3/QUIC」を「No」にすると、サーバー全体でHTTP/3が止まります。リスナーごとに止めるなら「Open HTTP3/QUIC (UDP) Port」、バーチャルホストごとなら「Enable HTTP3/QUIC」を「No」にします。リスナーとバーチャルホストの項目は、それぞれの「SSL」の設定の中にあります。下の設定は、上の設定がすべて「Yes」のときだけ効きます(上から順に、サーバー、リスナー、バーチャルホスト)。バーチャルホストで「No」にすると、HTTP/3を使えるという知らせが送られなくなります。ただし、サーバーとリスナーでHTTP/3が有効のままなら、前の情報が残っているブラウザーとはHTTP/3でつながり続けることがあります。確実に止めるなら、サーバー全体かリスナーで止めてください。設定を変えたら、次のコマンドで起動し直します。
systemctl restart lsws
mitmproxy
FoxIOは、HTTP/3を切って起動するよう案内しています。
mitmproxy --set http3=false
Bun・h3
Bunは1.4.4以降に更新します。
bun upgrade
Homebrewで入れた場合は brew upgrade bun を使う、とBunの文書にあります。すぐ更新できないときは、HTTP/3のサーバーをインターネットに出さないでください。h3を使うRustのプログラムでは、max_field_section_size を妥当な大きさに設定します。
よくある質問
nginxは対象ですか
FoxIOが調べた10個の実装にnginxは入っておらず、対象かどうかは示されていません。nginx自身のHTTP/3の脆弱性は、nginx 1.30.6・1.31.7で脆弱性5件を修正の記事にあります。
データが盗まれることはありますか
ありません。メモリを使い切らせてサーバーを止める問題です。
新しく見つかった問題ですか
直ったバージョンは順に出ていました。quic-goは2025年11月21日に0.57.0、Wiresharkは12月3日に4.6.2、quicheは2026年7月14日に0.29.3、lsquicは7月15日に4.9.0です。まとめての公表が2026年10月20日で、そのあと10月22日にBunが1.4.4を出しました。
HTTP/3を止めるとサイトは見られなくなりますか
見られます。ブラウザーはHTTP/2やHTTP/1.1でつなぎます。
参考
- FoxIO:Header Accordions(2026年10月20日)
- oss-security(2026年10月22日)
- RFC 9114:4.2.2 Header Size Constraints
- quic-go:GHSA-g754-hx8w-x2g6(CVE-2025-64702)
- Cloudflare quiche:GHSA-4fgf-9xrr-88gf(CVE-2026-12523)
- Wireshark:wnpa-sec-2025-07
- lsquic:CHANGELOG
- Caddy v2.11.1 リリースノート
- Traefik v3.6.4 リリースノート
- Traefik v2.11.32 リリースノート
- OpenLiteSpeed 1.9.x リリースログ
- OpenLiteSpeed:Basic Commands
- OpenLiteSpeed Users’ Manual:Server Tuning(Enable HTTP3/QUIC)
- OpenLiteSpeed Users’ Manual:Listeners SSL(Open HTTP3/QUIC (UDP) Port)
- OpenLiteSpeed Users’ Manual:Virtual Host SSL(Enable HTTP3/QUIC)
- Bun:Issue #46475
- Bun:プルリクエスト #46392
- Bun v1.4.4 リリースノート
- Bun:Installation(bun upgrade)
- Caddy:Global options(protocols)
- Traefik:EntryPoints(http3)
- Traefik v2.11:EntryPoints(試験的なHTTP/3)

コメント