HTTP2Shell(Brotliの不具合)とは?仕組みと企業・個人の対応
HTTP2Shell(CVE-2026-111497)は、Google Brotliの「圧縮を元に戻す処理」に見つかった不具合です。細工された外部データが修正前の処理へ届くと、ソフトの停止や情報漏えい、不正な命令実行の恐れがあります。製品内のコピーも含めて修正版へ更新し、動いている版を確認することが対策の基本です。
圧縮データを元に戻す処理で何が起きるのか
Web通信では、データを小さくたたんで送り、受け取った側で元の大きさに戻す「Brotli」という仕組みがよく使われます。圧縮した荷物を届いた先で開いて広げるような手順です。今回の不具合(CVE-2026-111497、通称HTTP2Shell/Node2Shell)は、データを小さくする側ではなく、受け取った側で「圧縮を元に戻す処理(展開処理)」に見つかりました[1][3]。
この問題は、ソフトの中にBrotliの部品が入っているだけで起きるわけではありません。攻撃者が細工した外部データが、修正前の展開処理まで実際に届くことが発生の条件です[7][8]。データが届く経路には次の2つがあります。
- 外から届く要求の本文:利用者などから届いた通信の本文を、サーバーのアプリや通信を中継する部品の設定で展開する経路です[5][9]。
- アプリが外部から受け取る応答:アプリが外部のURLへデータを取りに行き、返ってきた応答を展開する経路です。たとえばBunの
fetch機能はBrotliの応答を自動で展開します[2][9]。
条件がそろうとメモリの扱いに異常が起き、ソフトの停止やメモリ内の情報漏えい、攻撃者のプログラムが動かされる恐れがあります[7]。プログラムが動かされる場合は、まずそのソフト自身の権限で実行されるため、そのソフトが読める秘密情報や利用できる接続先も確認の対象になります。「HTTP2Shell」という名前ですがHTTP/2固有の穴ではなく、HTTP/2の設定を切るだけでは解決しません[8]。
企業は「組み込まれたコピー」まで更新して確認する
企業での対応を難しくするのは、同じBrotliが複数の製品の内部に「組み込まれたコピー」として入っている点です[1][8]。たとえばBunでプログラムとソフトを動かす土台を1つの配布用ファイルにまとめると(bun build --compile)、当時のBrotliがその中に組み込まれます。手元のBun本体だけを更新しても、過去に配ったファイルは作り直すまで古いまま残ります[2]。
対応は次の3段階で進めます。
- 調べる:ソフトを動かす土台やパッケージ、コンテナ、配布用の実行ファイル、通信の中継製品を洗い出し、外部データを展開する経路と管理者を特定します。IstioもBrotli展開を有効にした構成が対象です[5][8]。
- 製品ごとの更新・必要な再ビルドと再配置:外部データが届く経路を優先して修正版へ更新し、古いコピーを含むコンテナや配布ファイルは作り直して(再ビルド)、再配置・再起動します[1][2]。
- 動いている版を確認:稼働中の版と提供元の修正情報を照合し、未対応の箇所には担当者を決めます。クラウドや委託先に任せている範囲は提供元の対応状況を確認します[6][7]。
更新までの暫定策として製品ごとに展開処理を停止・制限する場合は、受信する本文と外部からの応答の両経路を確認します。入口のWAFの保護範囲に、アプリが外部から受け取る応答まで含まれるとは限りません。採る対策がどの経路まで有効かを、製品の公式手順と照合します[8][9]。また、侵害の疑いがある場合は、不具合を塞ぐ更新とは別に、環境の隔離や記録の保全、調査を並行して進めます。
個人は「自分で動かしているか」で対応を分ける
個人の対応は、自分でアプリやサーバーを動かしているか、普段Webサイトやアプリを使っているだけかで分かれます。個人の端末でも、開発や公開のためにサーバーやアプリを動かしているなら運用者側の手順が必要です。
自分でアプリやサーバーを動かしている人
自分の環境で使うソフトを動かす土台(Node.jsやBun)やパッケージ(Pythonのbrotliやbrotlicffiなど)、配布物、コンテナを修正版へ更新します[1][4]。必要に応じてアプリやコンテナを作り直して再起動し、いま動いている版が更新されたかを確認します[2]。レンタルサーバーやクラウドを利用している場合は、どこまで自分が更新するかを運営会社の案内で確認します。
普段Webサイトやアプリを使う人
手元のOSやブラウザ、利用アプリの公式更新を適用し、提供元の案内を確認します。利用先サービスのサーバーを修正する責任はその運営会社にあります。すべての個人端末が安全とも危険とも一律には言えないため、手元のソフトを公式の最新版に保つことが基本の対策になります。
修正が入った版の例と確認のポイント
以下の表は、2026年10月26日時点で公式資料から確認した「本件(CVE-2026-111497)の修正が入った版の例」です[1][3]。すべての対象製品の一覧や、そのまま導入すべき最新版のリストではありません。
| ソフト | 修正が入った版の例 |
|---|---|
| Node.js | 22.23.4 / 24.22.1 / 26.12.1 |
| Bun | 1.4.4 |
| Python brotli | 1.2.1 |
| Python brotlicffi | 1.2.1.0 |
| Google Brotli / libbrotli | 1.0.10 / 1.1.1 / 1.2.1(利用系列に対応) |
実際の運用では、利用している系列のうち現在もサポート中の修正版を選びます[5][11]。Linuxなどの配布元が番号を変えずに独自の修正を反映している場合は、番号だけで判断せず配布元のセキュリティ告知を照合します[6]。
更新作業の最後は、いま実際に動いているソフトに修正版が反映されているかを確かめて完了とします。
公式の修正情報と研究報告
- [1] Node.js:2026年10月のセキュリティ更新
Nodeに同梱されたBrotli展開処理。
- [2] Bun:Brotliのセキュリティ勧告
Bun >=1.0.21,<1.4.4が対象、1.4.4で修正。
- [3] Google Brotli:v1.2.1
CVE-2026-111497の修正。
- [4] BrotliCFFI:1.2.1.0の変更履歴
libbrotliを1.2.1へ更新しCVEを修正。
- [5] Istio:ISTIO-SECURITY-2026-007
Envoy経由のBrotli展開を有効化した構成が対象。
- [6] Red Hat:CVE-2026-111497
配布元の独自修正(バックポート)により、単純な上流バージョン比較で誤判定が生じ得る。
- [7] NCSC:Google Brotliの脆弱性
認証なしの遠隔攻撃。
- [8] Aikido:HTTP2Shellの対象と対策
HTTP2Shellという通称とCVEの対応。
- [9] Imperva:Node2Shellの研究報告
同社がNode24.22.0 Linux arm64の特定構成でRCEを実証し24.22.1で同じ入力の拒否を報告。
- [10] Python brotli:1.2.1
Pythonパッケージ版1.2.1の公開。
- [11] Google Brotli:v1.0.10
旧1.0系列でのCVE修正。
- [12] Google Brotli:v1.1.1
旧1.1系列でのCVE修正。
確認日:2026年10月26日。