危ないのは「圧縮する側」ではなく「展開する側」。Brotliの穴で、Node.jsなどが更新
Webでよく使われる圧縮形式「Brotli」の展開処理に、メモリを壊して遠隔からプログラムを動かされるおそれのある穴が見つかりました。Node.js、Bun、Envoy、Istioなどが修正版を出しています。

この記事の結論
- 圧縮形式「Brotli」の展開(デコード)処理に、細工したデータでメモリが壊れる穴(CVE-2026-111497)
- Node.js、Bun、Envoy、Istioなどが修正版を出した。Node.jsは深刻度「高」
- 危ないのは外から来たBrotliのデータを展開するところ。圧縮して送るだけなら、それだけでは該当しない
- 圧縮形式「Brotli」の展開(デコード)処理に、細工したデータでメモリが壊れる穴(CVE-2026-111497)
- Node.js、Bun、Envoy、Istioなどが修正版を出した。Node.jsは深刻度「高」
- 危ないのは外から来たBrotliのデータを展開するところ。圧縮して送るだけなら、それだけでは該当しない
Brotli(ブロトリ)は、Googleが作ったデータの圧縮形式だ。Webページや画像、フォントを小さくして速く届けるために、ブラウザやCDN、サーバーで広く使われている。
このBrotliを展開する処理に、深刻な穴が見つかった。公表したのは、OpenAIが進める「Patch the Planet」という取り組みのサイトだ。今週のPHPの脆弱性(php2shell)に続く、2件目の公表になる。
見つけたのはOpenAI Codex Securityのメンバーだと、Node.jsの勧告に書かれている。Cloudflareの最高経営責任者が言っていた「同じような穴はまだ出てくる」が、さっそく形になった。
何が起きるのか
Node.jsの勧告によると、仕組みはこうだ。
- 壊れた圧縮データを受け取ったとき、本来は「形式がおかしい」というエラーにすべきところを、「データがまだ足りない」と扱っていた
- そのため展開の処理が、8バイトしかない内部の置き場所に、届いたデータを足し続けた
- 置き場所からあふれたデータが、まわりのメモリを書き換える
結果として、プログラムが落ちる、メモリの中身が漏れる、最悪の場合は攻撃者のプログラムを動かされるおそれがある。
どこが危ないか:「展開する側」
ここがいちばん大事だ。Patch the Planetは、こう書いている。
Brotliを送るデータの圧縮だけに使っていることは、それだけではこの展開の不具合の影響を受けることを意味しない。
つまり、サイトの表示を速くするためにBrotliで圧縮して送っているだけなら、この穴の対象とは限らない。危ないのは、外から来たBrotliのデータを展開している場所だ。
公式が挙げている例は次のとおり。
| 展開している場所 | 例 |
|---|---|
| 届いたリクエストを展開 | 圧縮されたリクエストの本文を受け付けるWebサービス |
| 取りに行った応答を展開 | 外部のサーバーからデータを取ってくるバッチやツール |
| ファイルを展開 | 圧縮されたファイル、フォント、データファイルの読み込み |
| 中継の途中で展開 | Brotliの展開を設定したEnvoyやIstio |
また、確かめる対象として、次のものも挙げている。
- Electronで作られたデスクトップアプリ。中にChromiumとNode.jsの両方が入っていて、Brotliが何か所にもある。ブラウザ部分が直っていても、Node.js部分が直っているとは限らない
- curl(libcurl)、PythonやJavaのBrotli部品などのネイティブのライブラリ
修正版
| ソフト | 修正版 |
|---|---|
| Node.js | 22.23.4 / 24.22.1 / 26.12.1 |
| Bun | 1.4.4(Brotli 1.2.1を同梱) |
| Envoy Proxy | 1.40.0 / 1.39.3 / 1.38.6 / 1.37.8 |
| Istio | 1.30.6 / 1.31.2(1.29.9にも入っているが、1.29はサポート終了) |
| Google Brotli(本体) | 1.0.10 / 1.1.1 / 1.2.1 |
Node.jsは、表にない古い系列は修正の対象として挙がっていない。サポートされている系列に上げる必要がある。
Patch the Planetは、上げたあとに再起動か再配置するよう念を押している。コンテナや、Node.jsを中に入れて配っているツールは作り直しが要る。古いまま動いている裏方の処理や定期実行も忘れやすい。
すぐ上げられないとき
公式の勧めは、信頼できないBrotliデータの展開だけを止めることだ。gzipなどほかの圧縮はそのまま使ってよい。
- 届くリクエスト:
Content-Encoding: brのリクエストを、展開する部品より手前で断る - 取りに行く応答:通信の部品の自動展開を切るか、Brotliの応答を断る
- EnvoyとIstio:Brotliの展開のフィルターを、行きと帰りの両方で切る
- ファイル:信頼できないBrotliファイルの処理を、直るまで止める
- Next.js:Node.jsを上げるまで、組み込みの画像最適化を止めるよう案内されている
効かない対策
公式は、これだけでは足りないものもはっきり書いている。
- CDNやWebサーバーでBrotliの圧縮をやめる。送る側の話なので、受け取って展開する処理は止まらない
- 自分のリクエストから「Brotliを受け取れる」という宣言(Accept-Encoding の br)を外す。相手のサーバーがそれでもBrotliで送ってくることは防げない
- リクエストの大きさの制限や、WAFのルールだけ。展開の経路をすべては覆えない
自分に関係あるか、の目安
- Node.jsやBunで動くサーバー、ツール、バッチを持っている → 版を確かめて上げる。
node -vやbun -vで分かる - Next.jsを自分のサーバーで動かしている → Node.jsを上げる。上げるまでは画像最適化を止める
- EnvoyやIstioでBrotliの展開を設定している → 上げるか、フィルターを切る
- PCやスマホを使うだけ → ブラウザと、デスクトップアプリの更新を溜めない。Electron製のアプリは、ブラウザとは別に更新が要る
- 静的なサイトをBrotliで圧縮して配っているだけ → それだけでは対象とは限らない。ただ、裏でNode.jsを使っているなら上の項目を見る
まとめ
- Brotliの展開処理に、メモリを壊す穴(CVE-2026-111497)。最悪で遠隔からプログラムを動かされる
- Node.js 22.23.4 / 24.22.1 / 26.12.1、Bun 1.4.4、Envoy、Istio、Brotli本体に修正版
- 危ないのは外から来たBrotliを展開する場所。圧縮して送るだけなら、それだけでは対象とは限らない
- 上げたら再起動・再配置。Electronアプリやコンテナも忘れない
- すぐ上げられないなら、Brotliの展開だけを止める。送る側の圧縮をやめても効かない
出典
- Patch the Planet「Brotli decoder vulnerability(CVE-2026-111497)」(2026年10月23日更新。影響範囲、修正版、緩和策、効かない対策。引用の日本語は筆者による訳)
- Node.js「Wednesday, October 21, 2026 Security Releases」(仕組み、深刻度、報告者)
- Istio セキュリティ勧告 ISTIO-SECURITY-2026-007
- Google Brotli 1.2.1 / Bun 1.4.4
本記事は2026年10月25日時点の公式発表に基づく。自分の環境が影響を受けるかは、使っているソフトとその版、Brotliを展開している経路を確かめたうえで判断すること。
新しい記事が出たら、ブラウザの通知でお知らせします。
メールアドレスの登録は要りません。いつでも止められます。
関連記事
RELATED
Laravelの認証回避、直した版は8月に出ていた。「いつも通り更新していた」サイトは守られていた
PHPのフレームワーク「Laravel」の標準のAPI認証「TokenGuard」で、トークンを知らなくても他人として認…
第5報で順番が変わった。「まず自分のパソコンを確かめて」の意味と、やり方
「お名前.com デスクトップクラウド」の第5報で、手元のパソコンのフルスキャンとバックアップが「予防的措置」から「至急…
直せないなら、作り直す。ニトロプラスの公式通販が閉鎖を選んだ判断を読む
ニトロプラスの公式通販「ニトロオンラインストア」が、PHPの脆弱性に今のシステムでは対応できないとして、旧サイトを閉鎖し…