「HTTP2Shell」CVE-2026-111497、Node.js・Python・Bun・Envoyに影響 Brotliの重大脆弱性と修正版を確認

セキュリティニュース

投稿日時: 更新日時:

「HTTP2Shell」CVE-2026-111497、Node.js・Python・Bun・Envoyに影響 Brotliの重大脆弱性と修正版を確認

2026年10月21日、Node.js開発チームは、Brotliの展開処理に起因するメモリ破壊の脆弱性「CVE-2026-111497」を修正したセキュリティアップデートを公開しました。問題はNode.js固有のコードではなく、広く利用される圧縮ライブラリ「Brotli」のデコーダにあります。Python向けパッケージ、JavaScriptランタイムのBun、プロキシソフトウェアのEnvoy、サービスメッシュのIstioなどでも関連する修正版が案内されています。

この脆弱性は一部で「HTTP2Shell」、マレーシアのMyCERTなどでは「Node2Shell」と呼ばれています。ただし、原因はHTTP/2プロトコル自体ではありません。影響を受けるのは、細工されたBrotli圧縮データを脆弱なデコーダで展開する処理です。Webサーバーへのリクエストだけでなく、アプリケーションが外部サーバーから取得した圧縮レスポンスも検証対象になります。

共通ライブラリの問題だけに、最初の対応は特定のCVEを検索することだけでは足りません。企業は自社のシステムと稼働バージョン、事業継続上重要なサービスを整理し、影響調査とアップデートの日程を決める必要があります。

CVE-2026-111497のサマリー

  • 対象はGoogle Brotliのデコーダ(c/dec/decode.c)に存在する境界外書き込みの脆弱性です。
  • CVE登録情報のCVSS v4.0基本値は9.2(Critical)。Node.js開発チームの独自評価はHighです。評価方式や主体の異なる数値を混同しないよう注意が必要です。
  • 攻撃者が制御する不正なBrotli圧縮データを展開すると、プロセスのクラッシュ、メモリ情報の漏えい、条件によっては任意コード実行につながるおそれがあります。
  • Node.jsは10月21日に22.23.4、24.22.1、26.12.1を公開しました。
  • Python向けbrotliは1.2.1、brotlicffiは1.2.1.0が公開されています。Python言語の標準実装全体に同じ問題があるという意味ではありません。
  • Bun、Envoy、Istioにも修正済みリリースが存在します。Brotliを同梱する製品では、システムの共有ライブラリのみを更新しても修正されない場合があります。
  • 公開PoCは確認されていますが、PoCの存在と、一般的な環境での安定した遠隔コード実行や実際の攻撃での悪用確認は別です。MyCERTは10月24日付の注意喚起で、10月23日時点の実環境での悪用報告は把握しておらず、CISAのKEVにも掲載されていないと説明しています。
項目 内容
CVE番号 CVE-2026-111497
主な問題 Brotliデコーダの境界外書き込み(CWE-787)、エラー判定の不備(CWE-252)
CVSS CVSS v4.0:9.2(Critical、CVE登録情報)。シンガポールCSAはCVSS v3.1:9.8と案内
影響条件 攻撃者が制御できるBrotliデータが脆弱なデコーダで展開されること
主な想定被害 サービス停止、プロセスメモリの漏えい、条件付きの遠隔コード実行
発見者 OpenAI Codex SecurityのKhai Tran氏とSylvie Mayer氏(Node.js公式の謝辞)
主な公表時期 Node.js修正:2026年10月21日/CVE情報公開:10月22日

Brotliの脆弱性が複数の製品に波及した理由

BrotliはHTTP通信などで利用されるデータ圧縮方式です。WebページやAPIレスポンスの転送量を抑えるため、多くのランタイムやライブラリが圧縮・展開機能を提供しています。今回問題となったのは圧縮されたデータを元に戻すデコーダ側です。

Node.jsの公式説明によると、無効なブロック切り替えを本来はデータ形式のエラーとして扱うべきところ、追加の入力が必要な状態と誤って処理します。その結果、ストリーミングデコーダが内部の8バイトのバッファへ入力を加え続け、境界外書き込みにつながります。

この問題は「Brotliをインストールしているだけ」で直ちに外部から攻撃できるというものではありません。アプリケーションや利用ライブラリが、信頼できない圧縮データを展開する経路を持つかどうかで、悪用可能性が変わります。

典型的には、HTTPリクエストボディのBrotli展開、Node.jsのnode:zlib経由の解凍、外部URLを取得した際の圧縮レスポンスの自動展開、Brotli展開を有効化したプロキシなどが調査対象です。Node.jsのfetch()を通じた外部通信も対象になり得るため、入口のWAFだけで保護が完結するとは限りません。

Node.js、Python、Bun、Envoy、Istioの影響と修正版

2026年10月24日までに確認できた公式情報・公開アドバイザリに基づく主な修正版は以下のとおりです。各製品の修正版に加え、OSディストリビューションのバックポートやマネージドサービスの提供状況も個別に確認してください。

ソフトウェア 影響を確認する対象・条件 修正版・対応先
Google Brotli 公式CVE情報が対象とする1.0.3以降の旧版系列(1.0.3~1.0.9、1.1.0、1.2.0) それぞれ1.0.10、1.1.1、1.2.1
Node.js 22.x、24.x、26.xの修正前バージョン。信頼できないBrotliデータを展開する処理に注意 22.23.4、24.22.1、26.12.1以降
Python向けbrotli 脆弱なBrotliコードを含むPythonパッケージ。Python本体とは区別 brotli 1.2.1
Python向けbrotlicffi 脆弱なlibbrotliを同梱する旧パッケージ brotlicffi 1.2.1.0
Bun 旧版が同梱するBrotliデコーダ。Bun 1.4.3以前を使用する環境は確認が必要 Bun 1.4.4以降
Envoy Brotli展開機能が設定された環境。公式アドバイザリは1.39.2、1.38.5、1.37.7、1.36.11を影響版として列挙 1.40.0、1.39.3、1.38.6、1.37.8、1.36.12
Istio 1.31.0~1.31.1、1.30.0~1.30.5、1.29.0~1.29.8。Brotli展開を有効にしている構成に注意 1.31.2、1.30.6、1.29.9(1.29系列はすでにサポート終了)

Node.jsは10月21日付のセキュリティリリースで、この問題以外にもDNS解決やTLSの証明書検証などの脆弱性を修正しています。サポート終了済みのNode.js 20.xなどを利用している場合は、今回の更新だけでなく、サポート対象の系統への移行を検討する必要があります。

Pythonではrequestsやaiohttpなど、圧縮応答を処理するライブラリがBrotliパッケージと組み合わせて利用されることがあります。ただし、それらのライブラリを使用しているという事実だけで脆弱性を断定できません。実際に導入されたデコーダ、そのバージョン、圧縮データの入力元を照合する必要があります。

また、ソフトウェア部品表(SBOM)生成ツール「cdxgen」も、単体実行ファイルやコンテナイメージに同梱したNode.jsランタイムを通じた影響を公式アドバイザリで説明しています。12.8.9と13.5.0が修正版として案内されており、アプリケーション本体以外のビルド・解析ツールにも確認範囲を広げる必要があります。

PoC公開と実際の悪用状況は分けて判断

公開された実証コードには、未修正Node.jsをクラッシュさせるものや、実験用に固定した一部の環境でコード実行に成功したとする研究者の報告があります。ただし、対象バイナリ、メモリ配置、実行条件を限定した実験を、一般のNode.jsアプリケーションへそのまま当てはめることはできません。

脆弱性の存在や影響の大きさはNode.jsの公式アドバイザリで確認されています。一方、公開PoCを本番環境へ送信して可否を判定することは、サービス停止につながるおそれがあります。影響調査では、稼働バージョン、利用している展開機能、到達可能性を調べ、必要な再現検証は隔離した検証環境で実施します。

10月24日時点では、実際の攻撃での悪用が広く確認された脆弱性として扱う根拠は限定的です。しかし、更新が不要という意味ではありません。インターネット公開サービスや不特定の外部データを展開する機能は、先に対応する対象として整理します。

PHP2Shellとの関係 共通するのは深刻度ではなくソフトウェア更新の難しさ

セキュリティ対策Labが10月21日から報じているPHP2Shell(CVE-2026-109618/CVE-2026-109619)の脆弱性と国内の対応状況は、今回のBrotliの問題とは別件です。PHP2ShellはPHP本体の脆弱性であり、CVE-2026-111497はBrotliデコーダの境界外書き込みです。「Shell」という通称が似ていても、同じ脆弱性や連鎖攻撃だと示す資料はありません。

一方、両案件は2026年10月21日に主要な修正が公開され、広く利用されるオープンソースの更新作業が企業の対応能力を左右する点で重なります。PHP2ShellではPHP本体を、今回のBrotli脆弱性ではNode.jsやEnvoy、Pythonパッケージをはじめとした組み込み先を、それぞれ確認する必要があります。

発見経緯にもAIの活用という共通項があります。Node.js公式はCVE-2026-111497を報告した研究者として「OpenAI Codex Security」の2人を明記しています。PHP2ShellについてもAIを用いた独立した調査と協調的な修正・開示が報告されていますが、発見チームや欠陥の仕組みが同一というわけではありません。

PHP2Shellをめぐる国内企業の対応では、修正版公開後、配布元から実際のパッケージが届くまでの時間差も課題になりました。今回も、開発元の修正版が存在するかだけでなく、自社が使っているコンテナ、OSパッケージ、サードパーティ製ソフトウェアへ修正が届き、稼働環境へ反映されたかまで確認する必要があります。

PHP2ShellはPalo Alto Networksの管理用Web画面にも影響

PHP2Shellの影響は、PHPで開発された一般的なWebサイトだけにとどまりません。Palo Alto Networksは2026年10月21日に公表し、10月24日に更新した公式セキュリティアドバイザリで、CVE-2026-109618とCVE-2026-109619がファイアウォール向けOS「PAN-OS」と集中管理製品「Panorama」にも影響すると説明しています。対象はPA-Series・VM-Seriesファイアウォール、および仮想版・M-SeriesのPanoramaで、PAN-OS 10.2、11.1、11.2、12.1、12.2の各系列に修正が必要なバージョンがあります。

影響するのは管理用HTTPS Web UIとXML APIです。管理プロファイルによって管理アクセスを有効にしたデータプレーン側のインターフェースも対象になり得ます。一方、GlobalProtectのポータル・ゲートウェイ・クライアントレスVPN、Captive Portalは対象外とされています。Palo Alto Networksは自社製品での深刻度をCVSS v4.0の8.7(High)と評価しており、PHP本体の9.2(Critical)をPAN-OSの製品評価へそのまま当てはめることはできません。製品側の評価では主に可用性への影響が想定され、同社は10月24日時点で自社製品に対する悪意ある悪用を把握していないとしています。

10月24日時点でPAN-OSの修正版は今後の公開予定として案内されており、10月26~30日に系列・バージョンごとにホットフィックスを順次提供する見込みです。修正版を待つ間、同社は管理インターフェースへのアクセス元を信頼できる内部IPアドレスや踏み台サーバーに限定するよう推奨しています。Threat Preventionのシグネチャも案内されていますが、管理通信を実際に検査するには経路の設定、TLS通信の復号、脅威防止機能の適用など追加の条件があります。導入済みというだけで保護されるとは限りません。製品ごとの影響と暫定対策については、セキュリティ対策Labの既存記事「Palo Alto NetworksのPAN-OS・PanoramaもPHP2Shellの影響対象に」でも整理しています。

この事例は、オープンソース言語の脆弱性がセキュリティ機器の管理機能へ波及し、メーカー製ファームウェアの更新計画まで必要になることを示しています。ただし、PAN-OSへの影響が公表されたのはPHP2Shellであり、本記事のBrotli脆弱性「HTTP2Shell」がPAN-OSに影響するという意味ではありません。両者を区別したうえで、社内Webサーバーだけでなくネットワーク機器や集中管理システムも、資産台帳と更新スケジュールの対象に含める必要があります。

企業が最初に進めたい対策 資産・バージョン・重要業務の把握と更新計画

最初に行うべきことは、社内で何を動かしているか、どのサービスを止められないかを整理することです。脆弱性の情報を受け取っても、影響するソフトウェアの設置場所や担当部署が分からなければ、適用日を決められません。

1.システムとバージョン、事業上重要なサービスを洗い出す

情報システム部門は、Webサイト、顧客向けAPI、社内システム、プロキシ、クラウド、コンテナ、CI/CD環境、委託先管理システムを対象に、Node.js、Bun、Envoy、Istio、Brotli関連パッケージの利用有無を確認します。

営業・受発注・決済・顧客対応など、停止した場合に事業への影響が大きいサービスを優先して一覧化します。システム名だけでなく、実際の稼働バージョン、外部公開の有無、Brotli展開の有無、管理責任者、保守委託先、代替運用手段を残します。

Node.jsであればnode -vを実行する場所にも注意が必要です。管理者の端末だけではなく、本番サーバー、コンテナ内、サーバーレスの実行環境、ビルドエージェントをそれぞれ確認します。Pythonの場合も、システムPythonだけでなく仮想環境やコンテナに含まれるbrotli、brotlicffiのバージョンを確認します。

管理台帳に記録する項目 記載例・判断の観点
システム・サービス名 受発注API、会員サイト、社内バッチ、プロキシなど
事業上の優先度 停止すると受注・決済・顧客対応に影響するか
稼働製品とバージョン Node.js 24.x、Bun、Python向けBrotli、Envoyなど
脆弱性への該当状況 製品・同梱ライブラリ・圧縮データの展開経路を確認
公開範囲 インターネット公開、社内限定、外部データ取得など
管理責任者・委託先 変更承認者、更新を実施する担当者、問い合わせ先
更新予定日と検証 検証環境、本番適用日、動作確認、復旧・切り戻し担当

2.バージョン確認後、サービスごとのアップデートスケジュールを組む

影響の有無を判定したら、事業影響と攻撃面を組み合わせて更新順序を決めます。たとえば「不特定の外部リクエストを展開する公開API」「外部サイトから圧縮データを取得する業務システム」「社内限定で外部データを扱わない検証環境」では、同じ古いバージョンでも優先順位が異なります。

更新計画では、修正版の取得先、互換性試験、作業時間帯、停止が許容される時間、承認者、バックアップ、切り戻し手順を決めます。委託先が管理するサービスは、脆弱性の該当有無と修正適用予定日を回答してもらい、更新が完了した証跡まで確認します。

  • 優先確認: 顧客向けサービスや社外連携システムで影響するバージョンが稼働していないか、管理者・委託先へ照会する。
  • 更新計画の策定: 修正版と互換性を調べ、事業部門と停止可能時間を調整し、環境ごとに本番適用日を設定する。
  • 適用後の検証: コンテナの再ビルド・再配備を含め、実行中のバージョンと機能の正常動作を確認する。
  • 継続管理: 例外的に更新を延期するシステムには、暫定的な露出低減策、責任者、再評価日を設定する。

通常のパッケージ脆弱性スキャンだけでは、Node.jsランタイム自体や独立したバイナリへ組み込まれたライブラリを把握できない場合があります。依存コンポーネントをSBOMで可視化する方法と、外部公開・悪用可能性・業務上の重要度で順位を付ける脆弱性管理の考え方を組み合わせると、以後の更新にも使える台帳を整備できます。

3.修正版を直ちに適用できない場合の暫定策

修正版の適用まで時間がかかる場合は、該当する機能の利用を必要最小限に絞ります。リバースプロキシでContent-Encoding: brの受信リクエストを遮断する、不要なBrotli展開を停止する、外部データの取得先を制限する、といった方法が考えられます。ただし、圧縮を無効化すると正規のクライアント通信にも影響するため、変更前に確認が必要です。

WAFのルールは、WAFを通る受信通信のリスク低減には役立ちますが、Node.jsアプリケーションが外部サーバーから取得するBrotliレスポンスには効きません。Node.js公式の修正を代替するものでもありません。

また、サービス停止を伴う更新では、バックアップの取得だけではなく、停止時にどの業務を代替運用し、いつまでに再開するかを事業部門と調整します。脆弱性修正を後回しにしないためにも、更新失敗時の切り戻し、障害時の連絡体制、復旧確認までを作業計画に含めます。

複数製品へ波及する脆弱性に備えるために

今回のCVEは、アプリケーションが直接利用するランタイムだけでなく、その内部に同梱された圧縮ライブラリまで把握する必要がある事例です。Node.jsの更新だけで完了するシステムもあれば、EnvoyやIstio、Pythonパッケージ、単体実行ツールを個別に更新する必要があるシステムもあります。

情報システム部門が優先すべきなのは、影響するバージョンを使うシステムを見つけ、事業上の優先度に従って更新日を確定し、適用後に実際の稼働状態を確認することです。PHP2Shellと同様に、修正版の公表日と社内での適用完了日は必ずしも一致しません。両者の差を把握できる更新管理体制が、今後の重大脆弱性への対応速度を左右します。

出典・関連資料