Brotliの脆弱性Node2Shellとは?影響範囲と今すぐの対策を解説

2026年10月21日、Googleが開発するデータ圧縮の技術「Brotli」に、遠隔からプログラムを実行されるおそれのある脆弱性が公表されました。Node.jsで攻撃の成立が確かめられたことから「Node2Shell」とも呼ばれ、PythonやBunなど、Brotliを組み込んだほかのソフトにも影響が広がっています。Brotliは、通信やWebフォントのデータを小さくする部品として、多くのシステムの内部で使われている技術です。
自社でBrotliを入れた覚えがなくても、Webサービスや社内ツール、AIツールの中に組み込まれている場合があります。この記事では、Brotliの脆弱性の中身と影響を受けるソフト、AIツールへの影響、今すぐ取るべき対策を解説します。やるべきことは、Brotliを組み込んだソフトを修正版へ更新し、動いているプログラムを再起動することです。記事を読めば、自社で確認すべき場所と最初の一手がわかります。
Brotliの脆弱性(CVE-2026-111497)とは、圧縮データの展開でメモリを壊される不具合のこと
Brotliの脆弱性は、2026年10月に公表された、圧縮データを元に戻す「展開」の処理の不具合です。識別番号はCVE-2026-111497で、細工した圧縮データを展開させると、プログラムのメモリが壊されます。最悪の場合は、攻撃者が遠隔からサーバー上で任意のプログラムを実行できてしまいます。
影響を受けるのは、Brotliのバージョン1.0.3から1.2.0までです。開発元のGoogleは2026年10月21日に、修正版の1.0.10・1.1.1・1.2.1を公開しました。
脆弱性の深刻さを示す国際指標CVSS(バージョン4.0)では、10点満点中9.2点の「緊急(クリティカル)」と評価されています。Brotliを内蔵するNode.jsは、独自の基準で深刻度を「高(High)」としました。Node.jsへの報告者は、AIでプログラムの安全性を点検するOpenAIの製品「Codex Security」の研究者です。
Brotliの脆弱性を理解するための要点は、以下のとおりです。
- Brotliは通信やフォントの圧縮に使われる部品
- 細工した圧縮データでメモリの範囲外に書き込まれる
- 「Node2Shell」「HTTP2Shell」と呼ばれる理由
Brotliは通信やフォントの圧縮に使われる部品
Brotliは、Googleが開発した、データの中身を損なわずに小さくする圧縮の形式です。仕様は2016年7月に、技術文書RFC 7932として公開されました。Webの通信では、サーバーがページのデータをBrotliで圧縮して送り、受け取った側が展開して元に戻します。Brotliで圧縮したデータには、通信の中で「br」の記号が付く決まりです。
Webフォント(Webサイトで使う文字のデータ)の形式WOFF2も、データの圧縮にBrotliを採用しています。
Brotliは単独のアプリではなく、ほかのソフトの内部で働く部品(ライブラリ)です。利用者が直接触れないため、自社のどこで動いているかは見えにくくなっています。
出典:RFC 7932(Brotliの仕様)、W3CのWOFF2の仕様
細工した圧縮データでメモリの範囲外に書き込まれる
Brotliの脆弱性の原因は、形式の誤ったデータを受け取ったときの判断の誤りです。修正前のBrotliは、本来は「データの形式が正しくない」として展開を止めるべき場面でも、「データの続きがまだ届いていない」と判断して処理を続けていました。あとから届くデータは8バイトしかない作業用の領域へ追加され続け、領域の外へあふれて書き込まれます。
あふれたデータはプログラムのメモリを壊し、強制終了やメモリの中身の流出を引き起こします。攻撃者がメモリの壊れ方を操れる場合は、遠隔からのプログラムの実行も可能です。攻撃にログインなどの認証は必要ありません。
問題があるのはデータを圧縮する処理ではなく、圧縮されたデータを展開する処理です。外部から受け取った圧縮データを展開するソフトが、攻撃の入口になります。
出典:Node.jsの公式発表(2026年10月21日)、GitHub Advisory Databaseの勧告(2026年10月22日)
「Node2Shell」「HTTP2Shell」と呼ばれる理由
Node2Shellは、セキュリティ企業Impervaの調査チームが、公式のNode.js(24.22.0)で攻撃が成立することを確かめた検証に付けた名前です。名前の「Shell」は、攻撃者がサーバーを遠隔から操作できる状態を指します。
HTTP2Shellは、セキュリティ企業Aikidoが、影響がNode.jsの外へ広がったことを示すために使った呼び名です。Pythonの通信ライブラリなど、HTTPの通信でBrotliを展開するソフト全般が対象になることを表します。
正式な名前はCVE-2026-111497で、Node2ShellとHTTP2Shellはどちらも同じ脆弱性の呼び名です。
出典:Impervaの技術解説(2026年10月22日)、Aikidoの技術解説(2026年10月23日)
HTTP2Shellとは?Brotliの脆弱性の影響とPC・AIツールの確認方法
Brotliの脆弱性がとくに危険とされる理由
Brotliの脆弱性を突かれてサーバーを乗っ取られると、顧客情報の抜き取りやサイトの改ざんにつながります。被害の大きさに加えて、Brotliの脆弱性がとくに危険とされる理由は以下の3つです。
- 自社で使っていなくても部品として組み込まれている
- 外部から取り込んだデータからも攻撃を受ける
- 実際の悪用は未報告だが攻撃の実証が進んでいる
自社で使っていなくても部品として組み込まれている
Brotliは、Node.jsやPythonの部品、Bun、Linuxのパッケージなど、さまざまなソフトの内部に組み込まれています。自社でBrotliを選んで入れた覚えがなくても、使っているソフトの中にBrotliが含まれていれば確認の対象です。
Dockerなどのコンテナ(アプリを動かす環境ごとまとめて配る仕組み)は、Node.jsの実行環境を内部に含んだまま配布されます。社内のソフトの一覧表だけでは、コンテナの中のNode.jsのバージョンを見落としがちです。
外部から取り込んだデータからも攻撃を受ける
Brotliの脆弱性は、外から届く依頼(リクエスト)を受け付けるときだけでなく、自社のシステムがほかのサーバーからデータを取ってくるときにも突かれます。Node.jsに標準で入っているfetch()と呼ばれる通信の機能は、Brotliで圧縮された応答を自動で展開する作りです。攻撃者が用意したサーバーへ自社のシステムがアクセスすると、細工した圧縮データを送り返されるおそれがあります。
確認が必要な取り込みの機能は、以下のとおりです。
- 外部サービスからの通知を受け取る仕組み(Webhook)
- URLを貼るとページの概要を表示するリンクプレビュー
- 外部の画像を取り込んで表示する機能
- URLを指定してデータを読み込む機能
- 取引先やAIのAPIを呼び出す社内の仕組み
外から取り込む通信は、Webサイトの入口に置く防御の仕組み(WAF)では止められません。WAFが調べるのは外から届く依頼だけで、自社のシステムが取りにいった応答は対象外です。
実際の悪用は未報告だが攻撃の実証が進んでいる
2026年10月22日の時点で、Brotliの脆弱性が実際の攻撃に悪用された報告はありません。一方で、公表の翌日には、攻撃が成立することを示す検証の結果が相次いで公開されました。
Impervaの調査チームは、公式のNode.jsで攻撃者のプログラムを動かすことに成功しました。成功までには複数回の試行が必要で、毎回確実に成功するわけではありません。同じ日に公開された実証コードは、通常の環境ではプログラムの強制終了などにとどまりました。
悪用の報告が出る前に修正版への更新を終えておけば、攻撃が広まっても被害を受けずに済みます。
Brotliの脆弱性の影響を受けるソフトとバージョン
Brotliの脆弱性は、Brotliを組み込んだソフトごとに修正版の番号が異なります。影響を受けるソフトの確認ポイントは、以下の4つです。
- 影響を受けるソフトと修正版の一覧
- Node.jsで影響を受けやすい使い方
- Node.js以外で注意が必要なソフト
- サポートが終わったNode.jsには修正版が出ない
影響を受けるソフトと修正版の一覧
影響を受ける主なソフトと修正版は、以下の表のとおりです。
| ソフト | 影響を受ける範囲 | 修正版 |
|---|---|---|
| Brotli本体 | 1.0.3〜1.2.0 | 1.0.10・1.1.1・1.2.1 |
| Node.js | 22系・24系・26系(サポート終了の系統を含む) | 22.23.4・24.22.1・26.12.1 |
| Python用のBrotli | 1.0.3〜1.2.0 | 1.2.1 |
| Python用のbrotlicffi | 1.0.3以上・1.2.1.0未満 | 1.2.1.0 |
| Bun | 1.4.4より前 | 1.4.4 |
Node.jsは、使っている系統で表の修正版以降の番号なら、今回の脆弱性の対象外です。
Linuxに標準で入るbrotliのパッケージは、配布元が修正版を順次出しています。Debianは2026年10月に修正版を公開しました。Amazon Linux 2023のbrotliのパッケージは、2026年10月24日の時点で修正待ちの状態です。
出典:Brotliの公式リリース(2026年10月21日)、Bun 1.4.4のリリースノート(2026年10月22日)、Debianの脆弱性追跡ページ、Amazon Linuxの脆弱性情報
Node.jsで影響を受けやすい使い方
Node.jsは、受け取ったBrotliのデータを自動では展開しません。影響を受けるのは、自社のプログラムや使っている部品が、外部から届いたBrotliのデータを展開する場合です。
Node.jsで影響を受けやすい使い方は、以下のとおりです。
- Express 5やbody-parser 2.xで、Brotliで圧縮された依頼の本文を受け付けている
- fetch()で外部のサーバーからデータを取得している
- 自作のプログラムや部品が、外部のデータをBrotliで展開している
- Next.jsを自社のサーバーで動かし、外部の画像を最適化している
Express 4やbody-parser 1.xは、Brotliで圧縮された依頼の本文を展開しません。ただし、fetch()で外部からデータを取り込む使い方があれば影響を受けます。開発を外部に任せている場合は、4つの使い方に当てはまるかを開発会社に確認しましょう。
出典:Vercelのセキュリティ情報(2026年10月21日)、Hadrianの解説(2026年10月23日)
Node.js以外で注意が必要なソフト
Brotliの脆弱性は、Node.js以外のソフトにも及びます。Pythonでは、Brotliを扱う部品の「Brotli」と「brotlicffi」が対象です。Pythonの代表的な通信ライブラリのurllib3・requests・httpx・aiohttpは、Brotliの部品が入っていると、Brotliで圧縮された応答を自動で展開します。
Linuxの配布元が提供するNode.jsには、OSに入っているbrotliを使って動く作りのものがあります。OSのbrotliを使うNode.jsは、OS側のbrotliもあわせて更新しないと修正が行き渡りません。Brotliを組み込んだほかのソフトも同じ不具合を抱えているため、提供元の更新情報の確認が必要です。
サポートが終わったNode.jsには修正版が出ない
Node.jsの20系以前と、21系・23系・25系は、すでにサポートが終わっています。サポートが終わった系統には、Brotliの脆弱性の修正版が提供されません。20系のサポートは2026年4月30日に終了しました。
サポートが終わった系統を使っている場合は、22系か24系への移行が必要です。移行には動作の確認が欠かせないため、早めに開発会社と日程を詰めましょう。
Claude CodeやMCPサーバーなどAIツールへの影響
AIツールにはNode.jsやPythonの上で動くものがあるため、社員のPCもBrotliの脆弱性の確認の対象になります。AIツールを使う会社が確認したいポイントは、以下の3つです。
- Claude Code本体は最新版へ更新する
- Node.jsで動くMCPサーバーは更新が必要
- AIのAPIを呼び出す社内ツールも確認する
Claude Code本体は最新版へ更新する
Claude Codeの本体は、PCに入っているNode.jsを使わずに動きます。npmでインストールした場合も、本体は動くときにNode.jsを呼び出しません。
一方で、Claude Codeの本体は、JavaScriptの実行環境Bunで作った実行ファイルとして配布されています。Bunは1.4.3以前に修正前のBrotliを内蔵しており、Bunで作った実行ファイルは修正版のBunで作り直すまで古いBrotliを抱えたままです。Claude Code本体の安全は、PCのNode.jsではなく、Claude Code自体を最新版へ更新して保ちます。
ネイティブ版は自動で最新版へ更新されますが、自動更新を止める設定をしていると古い版のまま残ります。HomebrewやWinGetで入れた場合は手動の更新が必要です。npmでのインストールのためにNode.jsを入れたPCでは、そのNode.jsも修正版へ更新しておきましょう。
出典:Claude Codeの公式ドキュメント、Bunの公式発表(2025年12月)、Bunのセキュリティ勧告(2026年10月23日)
Claude CodeのインストールをWindows・Mac別に徹底解説!日本語対応も紹介
Node.jsで動くMCPサーバーは更新が必要
MCPサーバーは、Claude CodeなどのAIツールに、ブラウザの操作や外部サービスとの連携といった機能を足す仕組みです。MCPサーバーには、Node.jsに付属するnpxと呼ばれる命令で起動し、PCに入っているNode.jsの上で動くものがあります。たとえばブラウザを操作するPlaywright MCPは、Node.js 18以降を必要とし、npxで起動する設定が標準です。
MCPサーバーがPCのNode.jsで動いている場合、そのNode.jsは今回の修正の対象に含まれます。外部のWebサイトの情報を取り込むMCPサーバーは、外部のデータを扱う使い方に当たるため、更新の優先度が高い対象です。PCのNode.jsを更新したあとは、AIツールを再起動してMCPサーバーを立ち上げ直しましょう。
MCPサーバーとは?仕組みと安全な選び方・代表例を徹底解説!
AIのAPIを呼び出す社内ツールも確認する
Node.jsで作った社内ツールのうち、AIのAPIや取引先のサービスを呼び出すものは、外部からデータを取り込む使い方に当たります。Node.jsのfetch()はBrotliで圧縮された応答を自動で展開するため、呼び出し先のサーバーが細工した応答を返すと攻撃の入口になります。AIエージェントに外部のURLを読み込ませる仕組みも、同じ理由で優先度の高い確認先です。
Pythonで作ったAIツールも、Python用のBrotliが入っていれば同じく確認の対象です。社内ツールの開発者に、Node.jsとPython用のBrotliのバージョンを確かめてもらいましょう。
AIエージェントのセキュリティを徹底解説!10のリスクと企業の対策も紹介
Brotliの脆弱性へ今すぐ取るべき対策
Brotliの脆弱性への根本的な対策は、Brotliを組み込んだソフトを修正版へ更新することです。今すぐ取るべき対策は、以下の4つです。
- Node.jsやBrotliが動いている場所を洗い出す
- 修正版へ更新してプログラムを再起動する
- 開発会社やクラウド事業者に対応状況を確認する
- すぐに更新できない場合は暫定的な備えを取る
Node.jsやBrotliが動いている場所を洗い出す
Node.jsやBrotliが動いている場所の確認先は、以下のとおりです。
- 外部に公開しているWebサービスやAPI
- 社内ツールや業務の自動化の仕組み
- Dockerなどのコンテナのイメージ
- 開発や検証に使うCIの環境
- AIツールを使う社員のPC
Node.jsのバージョンは、Windowsのコマンドプロンプトや、Macのターミナルで「node -v」と入力すると表示されます。「node」が見つからないと表示されたPCには、Node.jsが入っていません。コンテナの中のNode.jsはPCとは別の環境のため、コンテナごとに番号を確かめる必要があります。
修正版へ更新してプログラムを再起動する
Node.jsは、使っている系統の修正版(22.23.4・24.22.1・26.12.1)以降へ更新し、Node.jsで動くすべてのプログラムを再起動してください。動き続けているプログラムは、再起動するまで修正前のBrotliを使い続けるためです。
コンテナを使っている場合は、修正版のNode.jsを土台にしてイメージを作り直し、配置し直す必要があります。「node:24.22.0」のようにバージョンを固定したイメージは、何度作り直しても修正前のままです。
Python用のBrotliは1.2.1以降、brotlicffiは1.2.1.0以降へ更新します。ロックファイル(部品の組み合わせの記録)も更新し、コンテナを作り直してから再起動する流れです。Bunは1.4.4以降へ、Linuxのbrotliのパッケージは配布元の修正版へ更新します。
開発会社やクラウド事業者に対応状況を確認する
システムの開発や運用を外部に任せている場合は、開発会社やクラウド事業者に対応状況を確認します。更新の進め方は事業者ごとに異なり、利用者側の作業が必要な場合もあるためです。
Vercelは、Node.js 22系と24系の環境の修正を事業者側で進めており、利用者がバージョンを変える必要はありません。
開発会社やクラウド事業者へ確認したい項目は、以下のとおりです。
- 使っているNode.jsのバージョンと更新の予定日
- コンテナのイメージを修正版で作り直したか
- Python用のBrotliなど、Node.js以外の部品の確認状況
- 更新後にプログラムを再起動したか
出典:Vercelのセキュリティ情報(2026年10月21日)
すぐに更新できない場合は暫定的な備えを取る
更新までに時間がかかる場合に取れる、攻撃の入口を狭める暫定的な備えは以下のとおりです。
- 入口の中継サーバーやWAFで、Brotliで圧縮された依頼の本文を受け付けない
- WAFの事業者が用意した、Brotliの脆弱性向けの防御ルールを有効にする
- Pythonの外向きの通信で、Brotliで圧縮された応答を展開する前に拒否する
入口でBrotliの依頼を拒んでも、自社のシステムが外部から取り込む応答は守れません。Pythonでは、受け取りたい圧縮の形式を相手に伝える設定からBrotliを外すだけでは不十分です。根本的な解決は修正版への更新だけで、暫定的な備えは更新までのつなぎにとどまります。
Brotliの脆弱性に関するよくある質問
Brotliの脆弱性について、よくある質問と答えは以下のとおりです。
- ブラウザでWebサイトを見るだけでも危険ですか
- WordPressのサイトも影響を受けますか
- Brotliの脆弱性は今回が初めてですか
ブラウザでWebサイトを見るだけでも危険ですか
今回の公表で影響と修正版が示されたのは、Brotli本体とNode.js・Python用の部品・Bunなどです。ブラウザへの影響を示した提供元の発表は、2026年10月24日の時点で確認できていません。ブラウザは修正が自動で配られるため、自動更新を有効にして最新版を使うことが基本の備えです。
WordPressのサイトも影響を受けますか
WordPress本体はNode.jsを使わずにPHPで動くため、Node.jsを通じた影響は受けません。ただし、WordPressを動かすサーバーに、Brotliを組み込んだほかのソフトが入っている場合があります。レンタルサーバーを使っている場合は、サーバー会社の案内を確認しましょう。
同じ2026年10月には、PHP本体にも緊急の脆弱性「PHP2Shell」が公表されています。PHP2ShellはPHPで動くサイトを乗っ取られるおそれがあるため、WordPressのサイトではPHPの更新を優先してください。
PHP2Shellとは?緊急のPHP脆弱性の影響と今すぐの対策を解説
Brotliの脆弱性は今回が初めてですか
Brotliの脆弱性は、今回が初めてではありません。2020年には、2GiBを超える大きなデータを一度に展開すると不具合が起きる脆弱性(CVE-2020-8927)が公表されました。2025年には、展開すると極端に大きくなる圧縮データでメモリを使い切らせる脆弱性(CVE-2025-6176)が公表され、Python用のBrotliの1.2.0で対策が入っています。
1.2.0は、CVE-2025-6176の対策を含む一方で、今回のCVE-2026-111497の影響を受ける版です。以前の脆弱性への対応で1.2.0へ更新した環境も、改めて1.2.1へ更新する必要があります。
出典:OSVのCVE-2020-8927の情報、OSVのCVE-2025-6176の情報
Brotliの脆弱性は修正版への更新と再起動で防げる
Brotliの脆弱性(CVE-2026-111497)は、圧縮データの展開でメモリを壊され、遠隔からプログラムを実行されるおそれのある不具合です。Brotliは多くのソフトに組み込まれているため、使った覚えがなくても影響を受ける場合があります。
被害を防ぐためにやることは、以下の4つです。
- Node.jsやBrotliが動いている場所を洗い出す
- 使っている系統の修正版へ更新する
- 更新後にプログラムを再起動し、コンテナを作り直す
- 外部に任せている場合は開発会社やクラウド事業者に確認する
実際の悪用はまだ報告されていませんが、攻撃の検証は公表の翌日から進んでいます。修正版への更新と再起動を済ませれば、Brotliの脆弱性による被害は防げます。まずは社内のPCとサーバーでNode.jsのバージョンを確かめるところから、今日始めましょう。



