危ないのは「圧縮する側」ではなく「展開する側」。Brotliの穴で、Node.jsなどが更新

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

この記事の結論

  1. 圧縮形式「Brotli」の展開(デコード)処理に、細工したデータでメモリが壊れる穴(CVE-2026-111497)
  2. Node.js、Bun、Envoy、Istioなどが修正版を出した。Node.jsは深刻度「高」
  3. 危ないのは外から来た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バイトしかない内部の置き場所に、届いたデータを足し続けた
  • 置き場所からあふれたデータが、まわりのメモリを書き換える

結果として、プログラムが落ちる、メモリの中身が漏れる、最悪の場合は攻撃者のプログラムを動かされるおそれがある。

SPONSORED

どこが危ないか:「展開する側」

ここがいちばん大事だ。Patch the Planetは、こう書いている。

Brotliを送るデータの圧縮だけに使っていることは、それだけではこの展開の不具合の影響を受けることを意味しない。

つまり、サイトの表示を速くするためにBrotliで圧縮して送っているだけなら、この穴の対象とは限らない。危ないのは、外から来たBrotliのデータを展開している場所だ。

公式が挙げている例は次のとおり。

展開している場所例
届いたリクエストを展開圧縮されたリクエストの本文を受け付けるWebサービス
取りに行った応答を展開外部のサーバーからデータを取ってくるバッチやツール
ファイルを展開圧縮されたファイル、フォント、データファイルの読み込み
中継の途中で展開Brotliの展開を設定したEnvoyやIstio

また、確かめる対象として、次のものも挙げている。

  • Electronで作られたデスクトップアプリ。中にChromiumとNode.jsの両方が入っていて、Brotliが何か所にもある。ブラウザ部分が直っていても、Node.js部分が直っているとは限らない
  • curl(libcurl)、PythonやJavaのBrotli部品などのネイティブのライブラリ

修正版

ソフト修正版
Node.js22.23.4 / 24.22.1 / 26.12.1
Bun1.4.4(Brotli 1.2.1を同梱)
Envoy Proxy1.40.0 / 1.39.3 / 1.38.6 / 1.37.8
Istio1.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の展開だけを止める。送る側の圧縮をやめても効かない
SPONSORED

出典

本記事は2026年10月25日時点の公式発表に基づく。自分の環境が影響を受けるかは、使っているソフトとその版、Brotliを展開している経路を確かめたうえで判断すること。

新しい記事が出たら、ブラウザの通知でお知らせします。

メールアドレスの登録は要りません。いつでも止められます。

AUTHOR

北海道のWEB屋

北海道を拠点に、Web業界14年・サポート実績1,000件以上。WordPressの復旧、サーバー移転、独自ドメインとメールの設定、PHP・JavaScriptの修正まで対応します。相談と見積もりは無料です。

SPONSORED

関連記事

RELATED