2026年10月26日時点で、Brotli の脆弱性 CVE-2026-111497(CVE は脆弱性に付く世界共通の番号)は、Google の圧縮形式 Brotli のデータを元に戻す「展開」の処理の不具合で、更新するのは Brotli 本体の各系列の修正版 1.0.10・1.1.1・1.2.1 と、それを組み込んだ Node.js・Bun(JavaScript の実行環境)、Envoy・Istio(通信の中継の仕組み・Brotli の展開を設定している場合)、Python(プログラムの言語)の brotli などの修正版です(米国の脆弱性データベース NVD、対象の版と直し方をまとめた GitHub の勧告、OpenAI の取り組み Patch the Planet の Brotli のページ)。対象の Brotli 本体は 1.0.3 以上 1.0.10 未満・1.1.0 以上 1.1.1 未満・1.2.0 以上 1.2.1 未満です(CVE の記録の対象の欄)。上げた後は再起動まで済ませます。すぐ更新できない所は、信頼できないデータの Brotli の展開だけを止めてつなぎ、Brotli だけを切り分けられない作りなら、自動の展開かその経路を止めます(Patch the Planet)。
結論:先に更新するのは、影響を受ける版の Brotli で信頼できないデータを「展開」するソフトです(CVE の記録は、対象の版の Brotli はすべて修正版に上げるよう書いています)。Node.js だけで終わらせず、Bun・Envoy・Istio(この 2 つは Brotli の展開を設定している場合で、Envoy は勧告の対象の版の欄に無い古い版も対象として扱う)・Python の brotli/brotlicffi(どちらも Python で Brotli を扱うためのパッケージ)・Linux の brotli のパッケージも、使っている版が対象かを確かめ、修正版が出ている物は上げます。Linux の提供元の 1 つ、Ubuntu の brotli は10月25日更新の時点で各版とも Needs evaluation(評価が必要)なので、提供元の更新を確かめます。
- 要点1:細工したデータを展開させると、処理が落ちる・メモリの中身が漏れる・場合によってはプログラムを実行される恐れがあります。主な入口は「受け取る圧縮リクエスト」「取りに行った応答」「圧縮されたファイル」の 3 つで、ほかの入力でも Brotli を展開していれば対象になりえます
- 要点2:Envoy と Istio は、Brotli の展開を設定している時が対象です。Istio は告知の対象の範囲の版を、Envoy は修正版より前の版を上げます。Envoy の勧告の対象の版の欄は各系列の修正前の最後の版だけで、欄に無い 1.39.1・1.38.0 も影響を受ける版の Brotli 1.2.0 を組み込んでいるためです。Python は brotli 1.2.1・brotlicffi 1.2.1.0 が修正版です
- 要点3:すぐ更新できない時は、信頼できないデータの Brotli の展開だけを止めます。Brotli だけを切り分けられない作りなら、自動の展開かその経路を止めます。CDN(Web の表示を速くする配信の網)で Brotli の「圧縮」を止めても、受け取った側の展開は止まりません
- 要点4:深刻度は評価した組織で違います(CVSS〈深刻度を 0〜10 で表す物差し〉v4.0 で Google の評価は 9.2・Node.js は high・Ubuntu の優先度は Medium)。「HTTP2Shell」はセキュリティ会社 Aikido のブログの呼び名で、今回確かめた公式の告知には出てきません
対象読者:Web サービス・社内システム・AI エージェントを動かす会社の情報システム部門と開発の責任者、委託先に確認を頼む経営者
読了後にできること:自社で Brotli を展開している所を洗い出し、更新する物と、すぐ更新できない所の止め方を決められます
CVE-2026-111497 は10月21日の Node.js のセキュリティ更新の告知に載った脆弱性ですが、CVE の記録で対象の製品になっているのは Google の Brotli そのものです(Node.js の告知、CVE の記録)。同じ部品を組み込んだソフトはほかにもあるので、「Node.js は上げたけれど、ほかに何を確かめればいいのか」が分かりにくいんです。
CVE の番号のほかに、呼び名もいくつか出ています。セキュリティ会社 Aikido のブログは HTTP2Shell と呼んでおり、GitHub の勧告の要約(ページの題名)には Node2Shell とあります。どちらも CVE-2026-111497 のことです(Aikido のブログ、GitHub の勧告)。HTTP2Shell の名前は、今回確かめた公式の告知(Patch the Planet・NVD・各製品の告知)には出てきません。
Node.js の版と更新の手順は Node.jsの脆弱性(2026年10月)|22・24・26系の更新と今やること にまとめています。この記事は、Node.js 以外で確かめるソフト、すぐ更新できない時の止め方、更新後の確かめ方を、一次情報で確かめた範囲で書きます。最終更新:2026年10月26日。
Brotliの脆弱性CVE-2026-111497とは|展開する側が危ない理由
Brotli(ブロトリ)は、Google が公開している圧縮の形式と、その圧縮と展開をする部品(ライブラリ)です(google/brotli の説明)。Web では、Brotli で圧縮した中身に「Content-Encoding: br」という印を付けてやり取りします(libcurl の説明書)。
今回壊れていたのは展開する部品(デコーダー)で、CVE の記録は「c/dec/decode.c のバッファオーバーフロー」(決められた入れ物の外まで書き込む不具合)と書いています。認証の要らない外部の攻撃者が、細工したデータで隣のメモリを壊す・中身を漏らす・処理を止める、場合によってはプログラムを実行する、を起こしうるとされています(GitHub の勧告、NVD)。Node.js の告知によると、壊れた形式のデータを「もう少し入力が要る」と扱ってしまい、8 バイトの内部の入れ物に入力を足し続けて外まで書き込む仕組みです。
たとえるなら、小包を開ける係です。細工された小包の「まだ続きがあります」という合図を信じて小さな作業台に中身を載せ続け、あふれた物が隣の机の書類まで汚してしまう。送る側(圧縮する側)ではなく、受け取って開ける側(展開する側)の問題です。
| 場面 | していること | 今回の欠陥との関係 |
|---|---|---|
| Web サーバーや CDN が、応答を Brotli で圧縮して送る | 圧縮(送る側) | それだけでは、この欠陥の対象とは言えない |
| 外から届いた、圧縮されたリクエストの本文を開く | 展開(受ける側) | 対象になりうる |
| 外部のサーバーから取ってきた応答を、自動で開く | 展開(取りに行く側) | 対象になりうる |
| Brotli で圧縮されたファイルやフォントを読み込む | 展開(ファイル) | 対象になりうる(HTTP の通信に限らない) |
右の列は、Patch the Planet の「影響を受ける所」の説明に沿っています(Patch the Planet)。
何が発表されたか|告知の日付と深刻度の一覧
日付は各ページの表記で、時刻が分かる GitHub と CVE・NVD の記録は日本時間に直しています。GitHub の勧告には GHSA で始まる番号が付きます。
告知の日付
| 日付 | 発表元 | 中身 |
|---|---|---|
| 10月21日 | Node.js | 22・24・26 系のセキュリティ更新。Brotli のデコーダーの範囲外への書き込み(深刻度 high)を含む(Node.js の告知・版の詳細はNode.js の更新の記事) |
| 10月22日 | Google Brotli | 修正版 1.0.10・1.1.1・1.2.1 を公開。SECURITY の欄に CVE-2026-111497(Brotli のリリース) |
| 10月22日 | Bun | 1.4.4 を公開。セキュリティの修正の対象に Brotli を挙げる(Bun の告知) |
| 10月22日 | CVE の記録・NVD | CVE-2026-111497 を公開。対象は Google Brotli 1.0.3 以上 1.0.10 未満・1.1.0 以上 1.1.1 未満・1.2.0 以上 1.2.1 未満(CVE の記録・NVD) |
| 10月23日 | GitHub の勧告 | GHSA-9v8h-qqgm-4m35。題名に「Node2Shell」。PyPI(Python の部品を公開する置き場)の brotli・brotlicffi も対象。最終更新は10月24日(GitHub の勧告) |
| 10月23日 | Patch the Planet | Brotli のページを更新。修正版の表・確かめる物・止め方(Patch the Planet) |
| 10月23日(25日更新) | Ubuntu | 優先度 Medium。Ubuntu の brotli は各版とも Needs evaluation(評価が必要)(Ubuntu の告知) |
| 10月24日 | Envoy | 勧告 GHSA-3wvj-j6qm-62mr。Brotli の展開を設定している構成が対象で、修正版は 1.40.0・1.39.3・1.38.6・1.37.8・1.36.12(Envoy の勧告) |
深刻度は評価した組織ごとに違う
1 つの値にまとめず、誰の評価かを付けて並べます。
| 評価した組織 | 値 |
|---|---|
| Google(この CVE を発行した窓口) | CVSS v4.0 で 9.2(区分は CRITICAL)。CVE の記録と NVD に表示 |
| NVD | NVD 自身の評価はまだ。10月26日時点で「Awaiting Analysis(分析待ち)」(NVD) |
| GitHub の勧告 | critical(GitHub の勧告) |
| Envoy の勧告 | Critical(CVSS v4.0 で 9.2)(Envoy の勧告) |
| Node.js の告知 | high(高)(Node.js の告知) |
| Ubuntu の告知 | 優先度 Medium(中)(Ubuntu の告知) |
NVD のページの 9.2 は、NVD ではなく Google の窓口が付けた値です(NVD では Secondary と表示)。Patch the Planet は、修正版が出ているので影響を受ける環境をすぐに更新するよう書いています(Patch the Planet)。
悪用の確認と、見つけた人
CVE の記録と NVD に載る米国 CISA(サイバーセキュリティの政府機関)の評価(SSVC=悪用の状況や影響などから、脆弱性への対応の優先度を決める判定の方法・10月23日付)では、10月23日時点で悪用は確認されていません。悪用の状況は「none」(悪用の証拠も、攻撃のやり方を示す公開のコード〈PoC〉も無い)、自動化は「no」(攻撃の手順を確実には自動化できない)、影響は「total」(悪用された場合に、脆弱性のある部品の動きを完全に握られるか、その部品を含むシステムの情報がすべて漏れうる、という区分)です(定義は CISA の SSVC の手引き)。この評価は10月23日時点のもので、その後の変化は確かめていません。CISA が実際に悪用された脆弱性を集めた一覧(KEV)にも、10月26日に確かめた時点(10月23日版)で載っていません(CISA の KEV)。どちらも安全の保証ではありません。
見つけた人は、CVE の記録(発見者の欄)では OpenAI Codex Security の Khai Tran 氏と Sylvie Mayer 氏です。Node.js の告知もこの 2 人を報告者として挙げ、Patch the Planet の参考と謝辞の節にも同じ記載があります。Patch the Planet は、ページの表記では OpenAI のセキュリティ向けの取り組み Daybreak の一つで、最先端の AI とセキュリティの専門家と組んで、脆弱性の確認から修正の試験、公表の調整までを行う活動です。同じサイトに載る PHP の緊急の脆弱性(php2shell)は PHPの緊急脆弱性(php2shell)|レンタルサーバーの対応と今やること にまとめています。
10月26日昼の時点で、JPCERT/CC(日本の情報セキュリティの調整機関)の注意喚起の一覧と、脆弱性情報サイト JVN の新着には、Brotli の項目は見当たりませんでした。JVN の脆弱性のデータベース JVN iPedia は停止中で、確認できませんでした(JPCERT/CC の一覧、JVN)。
影響を受ける場所|Brotliを展開する3つの入口
Patch the Planet は、攻撃者が用意したデータを、影響を受ける版の Brotli のデコーダーに渡すアプリは危険にさらされうると書き、主な入口として次の 3 つを挙げています(Patch the Planet)。

- 受け取る圧縮リクエスト:外から届いた HTTP のリクエストの本文が Brotli で圧縮されていて(Content-Encoding: br)、受け口の部品が展開する場合
- 取りに行った応答:信頼できないサーバーから取ってきた応答を、HTTP の部品が展開する場合
- 圧縮されたファイル:Brotli で圧縮されたファイルを読み込む場合。影響は HTTP の通信に限りません
確かめる場所としては、Web サービス、裏で動く処理(ワーカー)、Node.js や Bun を同梱した道具、Brotli の展開を設定した Envoy と Istio を挙げています。ほかに確かめる物は次の 3 つです。
- 組み込みの実行環境:Electron(Web の技術でデスクトップのアプリを作る仕組み)などのアプリは Brotli を複数持つことがあり、中の Chromium(Chrome の元になっているブラウザの部分)と Node.js の両方を確かめます。ブラウザの部分が直っても、組み込みの Node.js が直ったことにはなりません
- ネイティブのクライアントと結びつけ:ネイティブは、機械が直接読む形に組み立てた部品のことです。curl/libcurl(Web のデータを取りに行くコマンドと部品)、Python・Java の結びつけ(バインディング)、ほかのネイティブのライブラリが読み込むデコーダー。同梱の wheel(Python のパッケージのファイルの形式)や静的なバイナリ(部品を中に組み込んだ実行ファイル)は、個別の更新か作り直しが要ることがあります
- ファイルの処理:Brotli を使うフォントやデータファイルの読み込み
一方で、送る側で Brotli で圧縮するだけなら、それだけでこの欠陥の対象とは言えない、とも書かれています。AI を使う会社は、2 つ目の入口を特に確かめてください(Uravation の補足)。外部の URL を読みに行く AI エージェントやボット、URL のプレビュー、外部の画像の取り込みは、信頼できない相手の応答を受け取る作りです。
更新しないといけないのはどれか|ソフト別の修正版
表の版か、同じ系列でそれより新しい修正済みの版に上げ、再起動か入れ直しまで済ませます(Patch the Planet)。

| ソフト | 対象になる条件 | 修正版 | 出典 |
|---|---|---|---|
| Node.js | 22・24・26 系(Brotli を同梱)。サポートが終わった系列は対象のまま | 22.23.4・24.22.1・26.12.1 | Node.js の告知 |
| Bun | Bun と、Bun を組み込んで作った実行ファイル | 1.4.4(中の Brotli は 1.2.1) | Patch the Planet・Bun の設定 |
| Envoy | Brotli の展開(decompressor)を設定している構成。勧告の対象の版の欄は各系列の修正前の最後の版(1.39.2・1.38.5・1.37.7・1.36.11)だけだが、欄に無い 1.39.1・1.38.0 も影響を受ける版の Brotli 1.2.0 を組み込んでいる(Envoy 1.39.1・1.38.0 の依存の一覧)ので、修正版より前の版は対象として扱う | 1.40.0・1.39.3・1.38.6・1.37.8(1.36.12 にも修正は入るが、1.36 はサポート外) | Envoy の勧告・Patch the Planet |
| Istio(中継に Envoy を使う、サービス同士の通信の管理の仕組み) | Brotli の展開を有効にしている構成(EnvoyFilter〈Envoy の設定を足す仕組み〉で足した場合など)。対象は 1.31.0〜1.31.1・1.30.0〜1.30.5・1.29.0〜1.29.8 | 1.29.9・1.30.6・1.31.2(1.29 はサポート終了) | Istio の告知 |
| Python の brotli・brotlicffi(PyPI のパッケージ) | brotli は 1.0.3 以上 1.2.1 未満、brotlicffi は 1.0.3 以上 1.2.1.0 未満 | brotli 1.2.1・brotlicffi 1.2.1.0 | GitHub の勧告 |
| Brotli 本体(自社のソフトに組み込んだ物) | 1.0.3 以上 1.0.10 未満・1.1.0 以上 1.1.1 未満・1.2.0 以上 1.2.1 未満 | 1.0.10・1.1.1・1.2.1(使っている系列の修正版) | CVE の記録 |
| Linux の brotli のパッケージ | Ubuntu・Debian などの提供元が入れた brotli | Debian 12:1.0.9-2+deb12u1、Debian 13:1.1.0-2+deb13u1。Ubuntu は各版とも Needs evaluation(10月25日更新の時点) | Debian の追跡ページ・Ubuntu の告知 |
| curl・libcurl、Python や Java の結びつけ、ほかのネイティブのライブラリ | Brotli のデコーダーを読み込んでいる物 | 各製品の告知で確かめる | Patch the Planet |
| Electron などで作ったデスクトップのアプリ | Brotli を複数の場所に持つことがある | アプリの開発元の告知で確かめる(Chromium と Node.js の両方) | Patch the Planet |
表のソフトは、実行環境(Node.js・Bun)、中継の仕組み(Envoy・Istio)、ライブラリとクライアント(Brotli 本体・Python の brotli・curl/libcurl など)、組み込みのアプリ(Electron などのアプリ)の 4 つのまとまりで担当を分けると、確かめ漏れを減らせます。Linux の brotli のパッケージは、OS の更新と一緒に見ます。
Linux の提供元のパッケージで入れている場合
Ubuntu や Debian の nodejs のパッケージで Node.js を入れている場合は、見る物が変わります。Ubuntu の告知は、22.04 以降の nodejs は OS の brotli を使うので「Not affected(影響なし)」、20.04 の nodejs は同梱の brotli を使うので「Vulnerable(影響あり)」としています。Ubuntu 22.04 以降で見るのは OS の brotli のパッケージですが、10月25日更新の時点で各版とも Needs evaluation(評価が必要)なので、Ubuntu の告知で更新を確かめてください。Ubuntu 20.04 の nodejs は、OS の brotli ではなく nodejs のパッケージの対応を Ubuntu の告知で確かめてください。Debian の追跡ページは、nodejs は OS の brotli を使うと注記する一方、nodejs のパッケージの欄は掲載の各版とも vulnerable(影響あり)と表示し、修正の欄では nodejs を unstable(Debian の開発中の版)で未修正(unfixed)・緊急度 unimportant(重要ではない)としています。修正済みの版が出ているのは brotli のパッケージ(版は上の表)なので、brotli と nodejs の両方の状況を追跡ページで確かめてください。
Debian の修正済みの版は 1.0.9-2+deb12u1 のように、元の版番号(1.0.9)に提供元の印が付いた形です。元の版番号だけで「1.0.10 より前だから危ない」と決めず、追跡ページの修正済みの版と比べてください。
Python と Istio で見落としやすいこと
Python では、自社のコードで brotli を使っていなくても、ほかの部品が使うことがあります。HTTP の部品 urllib3 は、brotli か brotlicffi が入っていると Brotli(br)を扱え、受け取った応答を Content-Encoding に従って展開するのが既定です(urllib3 の説明書、同・応答)。Istio の同じ告知には Brotli 以外の脆弱性の修正も入っているので、Brotli の展開を使っていない Istio も修正版に上げるのが確実です。
自社の担当者が確かめる順|洗い出しから確かめまで5段
Patch the Planet の「影響の確かめ方」と「再起動と確かめ」の節をもとに 5 段に並べました。クラウドのサービスの扱いは Uravation の補足です。

- Brotli を展開している所を洗い出す:受ける(圧縮されたリクエストが外から届く受け口)、取りに行く(外部の URL や画像を取りに行く処理・AI エージェント・ボット)、ファイル(受け取った圧縮ファイル・フォント・データファイル)の 3 つの入口ごとに探します。自社で動かしていないクラウドのサービスは、提供元の告知を確かめるか問い合わせます
- 版を確かめる:動いている物の版を前の節の表と比べます。コンテナのイメージ(アプリを動かす環境をまとめた元)や、ひとまとめにした実行ファイルの中の版も見ます
- 更新する:表の修正版か、同じ系列でそれより新しい修正済みの版に上げます。サポートが終わった系列は、サポート中の系列へ移ります。Envoy 1.36 は 1.36.12 にも修正が入っていますがサポート外です。Istio 1.29 は最後の版 1.29.9 で直りますが、Istio の告知は 1.30 以降への移行の計画も求めています
- 作り直して再起動する:版の固定(ピン留め)を上げ、影響を受ける版を組み込んだコンテナや実行ファイルを作り直します。古い版で動くサービス・裏の処理・定期の処理・複製を、すべて再起動か入れ直しします
- 確かめる:動いているプログラムやイメージが修正版かを確かめます。一時的に止めた設定は、展開の前に br を断っているか、許可した gzip(別の圧縮形式)などが動くかも試します
版の確かめ方の例です(コマンドは各製品の説明書にあるもの)。
| 確かめる物 | コマンドや見る所 | 見るポイント |
|---|---|---|
| Node.js | node --version | 表の修正版か、同じ系列のそれより新しい版か(Node.js の説明書) |
| Python の brotli・brotlicffi | python -m pip show brotli brotlicffi | brotli 1.2.1 以降・brotlicffi 1.2.1.0 以降か。サーバー・コンテナ・CI(自動でテストや組み立てを回す仕組み)の環境ごとに見る(pip の説明書)。Linux の提供元のパッケージで入れた物は、元の版番号だけで決めず、提供元の修正済みの版と比べる |
| curl | curl -V | 1 行目に curl・libcurl と、curl に組み込まれたほかのライブラリの版が出るので、Brotli を組み込んだ curl なら、その版もここで見る(Linux の提供元のパッケージの物は、元の版番号だけで決めず、提供元の修正済みの版と比べる)。Features の行に brotli があれば、その curl は Brotli の自動の展開に対応している(curl の説明書) |
| Envoy・Istio | 設定の中の展開フィルター | decompressor_library の typed_config(拡張の設定を書く欄)の type URL(種類を表す URL)が type.googleapis.com/envoy.extensions.compression.brotli.decompressor.v3.Brotli の展開フィルターがあるか。decompressor_library の name の欄は識別用の名前で、拡張の種類を選ぶのには使われないので、name ではなく type URL で探す(Envoy の説明書、同・Brotli の展開、同・拡張の設定) |
この記事の内容を社内で使うなら
要点と手順をまとめた資料を無料で受け取れます。研修6,000名以上・支援100社以上の実績をもとに、自社の業務に当てはめる相談も30分から受け付けています。
すぐ更新できない時の止め方|Brotliの展開だけを止める
更新が終わるまで、信頼できないデータの Brotli の展開を止めます。gzip や deflate(以前から使われている別の圧縮形式)は使い続けられます。展開する経路のすべてに当て、Brotli だけを止められない作りなら、自動の展開そのものか、その経路を止めます(Patch the Planet)。

| 入口・部品 | 止め方 |
|---|---|
| 受け取るリクエスト | Content-Encoding: br のリクエストを、中継や本文を読む部品が展開する前に断る。直接つながる経路や別の経路も含める |
| 取りに行く応答 | HTTP の部品の Brotli の自動の展開を止め、Brotli の応答は展開の前に断る。できなければ、その取得を止めるか修正済みの部品に替える |
| Envoy・Istio | Brotli の展開フィルターを、リクエストと応答の両方向で止める。止めると圧縮のまま先へ流れるので、先の部品でも br を断る |
| ファイルとそのほかの入力 | 信頼できない Brotli のデータの処理を、更新まで止める |
受け取るリクエストを断る
Patch the Planet は Express(Node.js で Web の受け口を作る仕組み)の例として、本文を読むすべての部品(body parser)より前に、Content-Encoding が identity(圧縮なし)・gzip・deflate 以外のリクエストを 415(対応していない形式)で断る処理のコードを載せています。「gzip, br」のような重ねがけも断ります。この処理を前に置けない時の代わりは、すべての body parser に inflate: false を付けることで、この場合は gzip なども含めて圧縮された本文が全部断られます(Patch the Planet、Express の説明書)。先に展開する中継(プロキシ)がある場合は、その中継にも別に対策が要ります。
取りに行く応答の自動の展開を止める
Accept-Encoding(受け取れる圧縮の形式を相手に伝える欄)から br を外すだけでは、相手が Brotli で送ってくるのを止められません(Patch the Planet)。止めるのは、自分の側の自動の展開です。
- Python(urllib3):本文を読む前に Content-Encoding を確かめ、identity・gzip・deflate 以外なら断る例が Patch the Planet に載っています。この例は転送(リダイレクト)と再試行を切った前提で、足す時はすべての応答で、本文を読む前に同じ確認をします。ほかの部品は、説明書にある生の応答を受け取る使い方か、Brotli だけを切る設定を使います。ふつうの fetch()(Web の内容を取りに行く関数)や本文の自動の読み込みの後にヘッダーを見ても、遅いことがあります
- curl と libcurl:curl のコマンドは --compressed を付けた時に、圧縮された応答を自動で展開します(curl の説明書)。信頼できない相手から取る定期の処理で付けている所は、更新まで外すか処理を止めます(外すと gzip などの自動の展開も止まります)。libcurl は、CURLOPT_ACCEPT_ENCODING を設定していない(NULL の)時は自動で展開しません。設定している所は、更新まで NULL にするか(gzip などの自動の展開も止まります)、その取得を止めます(libcurl の説明書、Patch the Planet)
- Next.js(Node.js で動く Web の仕組み):Node.js をすぐ上げられない時は、next.config.js で images.unoptimized を全体に設定すると、組み込みの画像の最適化が外部の画像を取りに行ってデコードするのを止められます。今の設定に足して作り直し、入れ直した後、/_next/image で最適化が動かないことを確かめます。ほかのサーバー側の取得・独自の画像の読み込み・ほかのデコーダーは守れません(Patch the Planet、Next.js の説明書)
Envoy と Istio の展開フィルターを止める
Envoy では、decompressor_library に Brotli の種類を使う展開フィルターを外すか、そのフィルターのリクエストと応答の両方向を無効にします。gzip や zstd(別の圧縮形式)の展開フィルターは残せます。Patch the Planet の例です(書く場所は、Brotli を使う展開フィルターの typed_config の中で、decompressor_library の中の Brotli の設定ではありません)。
# Inside the existing Brotli decompressor's typed_config.
# Leave separate gzip / zstd decompressor filters enabled.
request_direction_config:
common_config:
enabled:
default_value: false
response_direction_config:
common_config:
enabled:
default_value: false2 つの enabled からは runtime_key を外します(実行時の上書きで再び有効になることがあるため)。書かずにおいた向きは有効のままです。Istio では、Brotli のフィルターを入れた元の EnvoyFilter を直します(その挿入を消すか、上の設定をその挿入に当てます)。envoy.filters.http.decompressor の名前で全部消すと、gzip や zstd のフィルターも消えることがあります。無効にしたフィルターは圧縮のまま先へ流すので、先の部品の前でも br を断り、すべてのゲートウェイ(外との出入り口の中継)とサイドカー(各サービスの横の中継)で効いている設定を確かめます(Patch the Planet)。
止めても足りないこと
CDN や Web サーバーで応答の Brotli の圧縮を止めても、リクエストの展開や取りに行く側の展開は止まりません。リクエストの大きさの制限や WAF(Web への攻撃を見分けて止める仕組み)の規則だけでも、すべての経路は覆えません(Patch the Planet)。ここまでの止め方は、更新までのつなぎです。
修正前の版で展開していた所があったら|入られた後と戻せるか
ここからは一次情報の手順ではなく、Uravation の考えです。修正前の版で、信頼できないデータを Brotli で展開していた所があった場合は、入られたと決まったわけではなくても、気づく・止める・鍵の取り替えを検討する(メモリの中身が漏れた恐れがある時)、の順で備えます。

気づいて止める:落ち方と通信の記録を見る
今回の欠陥は、処理が落ちる・メモリの中身が漏れる・プログラムを実行される、のどれにもつながりえます(GitHub の勧告)。修正前の期間に、Brotli を展開するサービスの異常な落ち方(異常終了や再起動の繰り返し)や、想定外の外向きの通信がないかを記録で確かめます。受ける側なら、br のリクエストの送り元も手がかりです。おかしな動きがあれば、修正版で作り直した環境に入れ替え、古い環境は記録ごと残し、必要なら専門の事業者に相談します。
鍵の取り替えを検討する:その処理が持っていた鍵から
メモリの中身が漏れた恐れがある時は、その処理が読み込んでいた鍵(生成 AI の API キー、クラウドの認証情報、データベースのパスワード、外部サービスのトークンなど)の取り替えを検討します。JPCERT/CC も別の件(国内で相次ぐ不正アクセス)の注意喚起で、「不要となった、または漏えいが疑われるAPIトークンは速やかに無効化できるようにする」よう勧めています(JPCERT/CC の注意喚起)。同じく漏れた恐れがある時、その処理が AI エージェントやボットの一部なら、外部のサービスとの連携を一時的に止め、修正前の期間にその処理へ渡したデータ(AI への指示の文・添付ファイル・取りに行った先の内容)の範囲も確かめます。
戻せるか:作り直せる状態かを確かめる
戻せるかは、サービスを修正版の部品で作り直せること(イメージや設定を記録した手順で作れるか)と、データを前の状態に戻せるバックアップがあることの 2 つで決まります。手順が無いサービスは、今回を機に残しておきます。緊急の更新が出た日の初動は WordPressの脆弱性対応|緊急の更新が出た日に最初にやること にもまとめています。
社内で先に決めること|チェック表
更新の前に次のことを決めておくと、作業が止まりにくくなります。
| 決めること | 中身 |
|---|---|
| 誰が見るか | 自社で作った物・委託先が作った物・クラウドのサービスに分け、確認の担当を決める |
| どこから直すか | 外から圧縮されたデータを受ける所と、外部の URL を取りに行く所を先にする |
| すぐ更新できない所 | Brotli の展開だけを止めるか、その処理ごと止めるか |
| 委託先・提供元に聞くこと | 使っている Brotli や実行環境の版、修正版を入れた日か入れる予定の日 |
| 鍵の一覧 | どのサービスがどの鍵を持つか。取り替えが要る時にすぐ動けるか |
| AI の道具 | 社内の AI エージェント・ボットが、Node.js や Python で外部の URL を読んでいないか |
| 記録 | どの環境をいつどの版にしたか。止めた設定をいつ戻すか |
【要注意】よくある読み違い4つ
読み違い1:Node.jsを更新したから全部済んだ
❌ Node.js を 22.23.4・24.22.1・26.12.1 に上げたので、CVE-2026-111497 の対応は終わり
⭕ Node.js は Brotli を組み込んだソフトの 1 つです。Bun・Envoy・Istio(この 2 つは Brotli の展開を設定している場合)・Python の brotli/brotlicffi・Linux の brotli のパッケージ・Brotli を組み込んだ自社のソフトなども確かめます。Node.js も、上げた後に(コンテナや実行ファイルに組み込んでいれば作り直して)再起動か入れ直しをし、動いている版が修正版かを確かめるまでが対応です。
読み違い2:Brotliの圧縮を止めれば安全
❌ CDN や Web サーバーで Brotli の圧縮を止めたので大丈夫
⭕ 危ないのは受け取った側の「展開」です。圧縮を止めても、リクエストや取りに行った応答の展開は止まりません。止めるのは展開する所です。
読み違い3:深刻度は中なので急がなくてよい
❌ Ubuntu の優先度が Medium なので、急がなくてよい
⭕ 深刻度は評価した組織で違います(CVSS v4.0 で Google の評価は 9.2・GitHub は critical・Node.js は high・Ubuntu の優先度は Medium)。1 つの値ではなく、自社に「信頼できないデータを Brotli で展開する経路」があるかで、急ぐかを決めます。
読み違い4:Accept-Encodingからbrを外せば届かない
❌ Accept-Encoding から br を外したので、Brotli の応答は来ない
⭕ 相手が Brotli で送ってくるのは止められません。HTTP の部品の Brotli の自動の展開を止め、Brotli の応答は展開の前に断ります。それができない部品なら、その取得を止めるか、修正済みの部品に替えます。
Uravationならこう判断する
ここも Uravation の考えです。今回の欠陥は、細工したデータを部品が展開する時に起きうるもので、Google が付けた CVSS の評価でも、攻撃に利用者の操作は要らないとされています(CVE の記録)。社員への注意や研修では止められないので、部品の更新と、展開の経路を止めることで対応します。判断の軸は「信頼できないデータを Brotli で展開する経路があるか」と「その経路に外のデータが届くか」の 2 つで、次の順で直すことを勧めます。
- 1 番目:外のデータが直接届いて展開する所。圧縮されたリクエストが届く受け口、Brotli の展開を設定したゲートウェイ(Envoy・Istio)、外部の URL・画像を取りに行く処理(AI エージェント、ボット、クローラー、URL のプレビュー、Next.js の画像の最適化)です。これらが使う Linux の brotli も、提供元の修正版が出ていれば同じ順で上げます(Ubuntu は10月25日更新の時点で各版とも Needs evaluation)
- 2 番目:社内の通信だけを扱う中継や、社内向けのサービス
- 3 番目:外のデータを Brotli で展開する経路が無いと確かめた、CI や開発者のパソコンの Node.js・Bun・Python。後に回せますが、残さず上げます。外部の URL やファイルを取ってきて展開する CI・開発の環境は 1 番目に入れます
自社で動かしていないクラウドのサービスは、提供元の告知を確かめ、見当たらなければ「CVE-2026-111497 の対象か、対象なら修正版をいつ入れたか」を問い合わせます。日本語の注意喚起を待つより、表の一次情報で判断を始めるのが現実的です。その日のうちに更新できない所は、信頼できないデータの Brotli の展開だけを止めてつなぎ、Brotli だけを切り分けられない作りなら、自動の展開かその経路を止めます。
よくある質問
HTTP2ShellとNode2Shellは同じですか?
どちらも、同じ Brotli の脆弱性 CVE-2026-111497 を指す呼び名です。GitHub の勧告の要約(ページの題名)にあるのは「Node2Shell」で、セキュリティ会社 Aikido のブログは「HTTP2Shell」と呼んでいます(Aikido のブログ)。HTTP2Shell の名前は、今回確かめた公式の告知(Patch the Planet・NVD・各製品の告知)には出てきません。http2shell.com も、10月26日に確かめた時点では Brotli の告知のページではなく、別の会社のサイトへ転送されていました。調べる時は CVE の番号で探してください(確かめ方は AIが作った偽の脆弱性情報|業務利用前の検証5ステップ)。
Pythonで何を更新すればいいですか?
PyPI の brotli は 1.2.1 以降、brotlicffi は 1.2.1.0 以降に上げます(GitHub の勧告)。自社のコードで使っていなくても urllib3 などの HTTP の部品が使うことがあるので、python -m pip show brotli brotlicffi で環境ごとに確かめます。対象の版を含むコンテナのイメージは作り直し、同梱の wheel は個別の更新か作り直しが要ることがあります。Linux の提供元のパッケージで入れた物は、提供元の更新で直します。
WebサイトでBrotliの圧縮を使っているだけでも危ないですか?
Patch the Planet は、送る側で Brotli で圧縮するだけなら、それだけでこの欠陥の対象とは言えないと書いています。ただし、同じサーバーが受け取ったリクエストの本文や外部から取ってきた応答・画像を展開していれば、その部分は対象になりえます。レンタルサーバーや CDN は、提供元の告知を確かめてください。
すぐ更新できない時はどうすればいいですか?
更新まで、信頼できないデータの Brotli の展開だけを止めます。受ける側は Content-Encoding: br のリクエストを展開の前に断り(直接つながる経路や別の経路も含めます)、取りに行く側は HTTP の部品の Brotli の自動の展開を止め、Envoy と Istio は両方向の Brotli の展開フィルターを止め(止めると圧縮のまま先へ流れるので、先の部品の前でも br を断ります)、信頼できない Brotli のファイルの処理は更新まで止めます。gzip などはそのまま使えます。Brotli だけを止められない作りなら、自動の展開ごとか、その経路を止めます(取りに行く処理は、修正済みの部品に替える手もあります)。CDN や Web サーバーの圧縮を止めるだけでは足りません(Patch the Planet)。
ブラウザや7-Zipは対象ですか?
2026年10月26日時点で、今回確かめた告知(Patch the Planet・GitHub の勧告・NVD)には、ブラウザそのもの(Chrome・Safari など)や 7-Zip が対象かどうかの記載はありませんでした。Patch the Planet が挙げているのは、Electron などのアプリに組み込まれた Chromium(ブラウザの部分)と Node.js の両方を確かめる、という点です。Windows や macOS の更新の有無も、同じく記載はありませんでした。なお CVE の記録は、この Brotli の不具合を「on all platforms」(すべてのプラットフォームで起きる)としているので、Windows や macOS で動くソフトでも、影響を受ける版の Brotli で信頼できないデータを展開していれば対象になりえます。使っている製品の告知を確かめてください。
この脆弱性は、もう悪用されていますか?
CISA の評価(SSVC)では、10月23日時点で悪用は確認されていません。悪用の状況は「none」(悪用の証拠も公開の攻撃コードも無い、という区分)で、この評価の後の変化は確かめていません。10月26日に確かめた KEV(10月23日版)にも載っていません。どちらも確かめた時点の情報で、安全の保証ではないので、更新は進めてください。
まとめ
CVE-2026-111497 は Google の Brotli の展開の部品の不具合で、Node.js だけの問題ではありません。Brotli 本体の修正版は 1.0.10・1.1.1・1.2.1 です。Brotli を組み込んだソフトは、各製品の告知で対象の版と修正版を確かめ、修正版が出ている物を上げます。「受ける・取りに行く・ファイル」の入口で展開している所を洗い出し、更新・組み込んだ物の作り直し・再起動・確かめまで進め、すぐ更新できない所は Brotli の展開だけを止めて(切り分けられなければ、自動の展開かその経路を止めて)つないでください。経営者や部門の責任者は、自社のサービスや委託先のシステムが Node.js・Bun・Envoy・Istio・Python を使っているかを、担当者か委託先に確かめるところから始めてください。
著者:佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。X(@SuguruKun_ai)フォロワー約10万人。
100社以上の企業向けAI研修・導入支援。著書『AIエージェント仕事術』『Claude仕事術』(SBクリエイティブ・書籍シリーズ累計66,000部)、『AI推進担当になったら読む本』(大和書房)。
SBクリエイティブ「ビジネス+IT」ほかで生成AI連載を執筆(NewsPicks最大1,125ピックス)。
今日から始める3つのアクション
- 今日やること:外から圧縮されたリクエストを受ける所(Brotli の展開を設定した Envoy・Istio を含む)と、外部の URL を取りに行く処理(AI エージェント・ボットを含む)を一覧にし、そこで動く Node.js・Bun・Envoy・Istio・Python の brotli・Linux の brotli が対象の版かを確かめる。対象の版なら修正版に上げ、その日のうちに上げられない所は、更新までのつなぎとして Brotli の展開を止める
- 今週中:残りの対象の版も修正版に上げ、影響を受ける版を組み込んだコンテナや実行ファイルは作り直して、古い版で動くサービスを再起動か入れ直しする。委託先・クラウドのサービスと Linux の brotli は提供元の対応を確かめ、修正版が出ていない所やすぐ上げられない所は Brotli の展開を止めておく(Brotli だけを切り分けられなければ、自動の展開かその経路を止める)
- 今月中:サービスごとの部品の版と鍵の一覧を作り、次の緊急の更新の時にすぐ確かめられるようにする
ご質問・ご相談はお問い合わせフォームからお気軽にどうぞ。
参考・出典
- Brotli vulnerability (CVE-2026-111497)(Patch the Planet・2026年10月23日更新)(参照日: 2026-10-26)
- GHSA-9v8h-qqgm-4m35(GitHub Advisory Database)(参照日: 2026-10-26)
- CVE-2026-111497 Detail(NVD)(参照日: 2026-10-26)
- CVE-2026-111497(CVE の記録)(参照日: 2026-10-26)
- Wednesday, October 21, 2026 Security Releases(Node.js)(参照日: 2026-10-26)
- google/brotli の説明(README・Introduction の節)(参照日: 2026-10-26)
- google/brotli のリリース(v1.2.1・v1.1.1・v1.0.10)(参照日: 2026-10-26)
- Bun v1.4.4(Bun・2026年10月22日)(参照日: 2026-10-26)
- Bun 1.4.4 の Brotli の依存の設定(GitHub)(参照日: 2026-10-26)
- GHSA-3wvj-j6qm-62mr(Envoy)(参照日: 2026-10-26)
- Envoy 1.39.1 の依存の一覧(bazel/repository_locations.bzl・brotli の欄)(参照日: 2026-10-26)
- Envoy 1.38.0 の依存の一覧(bazel/repository_locations.bzl・brotli の欄)(参照日: 2026-10-26)
- ISTIO-SECURITY-2026-007(Istio)(参照日: 2026-10-26)
- CVE-2026-111497(Ubuntu・2026年10月25日更新)(参照日: 2026-10-26)
- CVE-2026-111497(Debian Security Tracker)(参照日: 2026-10-26)
- Known Exploited Vulnerabilities Catalog(CISA)(参照日: 2026-10-26)
- SSVC Guide(CISA)(参照日: 2026-10-26)
- Decompressor(Envoy の説明書)(参照日: 2026-10-26)
- Brotli Decompressor(Envoy の説明書)(参照日: 2026-10-26)
- Extension configuration(Envoy の説明書)(参照日: 2026-10-26)
- body-parser(Express の説明書)(参照日: 2026-10-26)
- Image Component(Next.js の説明書)(参照日: 2026-10-26)
- urllib3.util(urllib3 の説明書)(参照日: 2026-10-26)
- Response and Decoders(urllib3 の説明書)(参照日: 2026-10-26)
- curl man page(参照日: 2026-10-26)
- CURLOPT_ACCEPT_ENCODING(libcurl)(参照日: 2026-10-26)
- Command-line API(Node.js)(参照日: 2026-10-26)
- pip show(pip)(参照日: 2026-10-26)
- 直近で相次いでいる国内組織における不正アクセスに関する注意喚起(JPCERT/CC・JPCERT-AT-2026-0030・2026年10月23日更新)(参照日: 2026-10-26)
- 注意喚起 2026年の一覧(JPCERT/CC)(参照日: 2026-10-26)
- JVN(Japan Vulnerability Notes)(参照日: 2026-10-26)
- Aikido のブログ(2026年10月23日・呼び名「HTTP2Shell」の使用例として)(参照日: 2026-10-26)
この記事の内容を社内展開する方へ: 部門別 AIエージェント活用マップ 50選(無料・PDF 32ページ+Excel) をダウンロードできます。



