GoogleのデータZ圧縮ライブラリBrotliに見つかった脆弱性「CVE-2026-111497」(通称Node2Shell)を受け、Microsoft、Node.jsプロジェクト、2つのPythonパッケージのメンテナーがセキュリティアップデートを公開しました。
Node.jsとPythonパッケージは先週パッチが公開されました。Microsoftも10月25日、.NET、Visual Studio、PowerShell向けの修正を公開しています。Bun、Envoy、Istioも更新されました。
BrotliはWeb経由で送るデータの圧縮方式として広く使われており、そのデコーダーは数多くのアプリケーションやライブラリに組み込まれています。
この脆弱性は境界外書き込み(out-of-bounds write)に分類され、Brotli 1.0.3から1.2.0までが影響を受けます。GoogleはCVSS v4スコアを9.2と評価しており、深刻度は「緊急(Critical)」です。修正版はBrotli 1.0.10、1.1.1、1.2.1です。
Node.jsプロジェクトによると、細工された入力によって、デコーダーが使用するバッファの範囲を超えてデータが書き込まれる可能性があります。その結果生じるメモリ破損により、プロセスのクラッシュやメモリ内容の漏えいが起こり得ます。認証されていない攻撃者による任意のコード実行を許す恐れもあります。
Node.jsは、この脆弱性を発見したのはOpenAI Codex Securityのメンバーだとしています。OpenAIによれば、問題はレッドチーム活動の中で見つかりました。その後、同社がBrotliの開発者と、このライブラリに依存するプロジェクトに通知したということです。
OpenAIは、修正自体は開示より前に行われていたと説明しています。同社は「根本原因となる問題は、実は2月にBrotliのソースコードで修正されていました。ただ、当時はそれがセキュリティ脆弱性につながるとは知られておらず、その後Brotliの新しいリリースもありませんでした」と述べました。
公式Node.jsイメージでコード実行を実証
Impervaは、Linux arm64向けの公式Node.js 24.22.0イメージで、この脆弱性を悪用してコードを実行できることを示しました。研究者らは、標的アプリケーションが取得するサーバーレスポンスと、Express 5またはbody-parser 2が処理するリクエストボディの両方に、悪意あるデータを仕込んで送信しました。
Impervaは「実証はすべての試行で成功したわけではありません。今回の結果は、検証したLinux arm64ビルドとアプリケーション構成でコード実行が可能であることを示すものです。あわせて、修正版ビルドが同じ入力をどう処理したかも確認しました」と説明しています。同社はエクスプロイトを公開していません。
攻撃が成立するのは、悪意あるBrotliデータがデコーダーに到達した場合に限られます。たとえば、アプリケーションに代わって圧縮コンテンツを展開するライブラリを経由するケースです。OpenAIの「Patch the Planet」イニシアチブは、アドバイザリで「攻撃者が制御できるデータを、影響を受けるGoogle製Brotliデコーダーに渡すアプリケーションはすべて、危険にさらされる可能性があります。圧縮されたHTTPリクエストボディ、信頼できないサーバーから取得したレスポンス、圧縮ファイルなどが該当します」と注意を促しています。
これまでのところ、実際の攻撃は報告されていません。GitHubで公開された概念実証(PoC)コードは、意図的に弱体化したビルドに対してのみコード実行に成功すると報じられています。一部の研究者は、この脆弱性はサービス拒否(DoS)攻撃にしか使えないと主張しています。
影響を受けるMicrosoft製品とPythonパッケージ
Microsoftが10月25日に公開したアップデートには、.NETランタイムのバージョン8.0.33、9.0.22、10.0.14と、.NET 11 Release Candidate 3が含まれます。Visual Studio 2019、2022、2026、PowerShell 7.4、7.5、7.6も更新されました。
MicrosoftはCVE-2026-111497を権限昇格の問題に分類し、CVSS v3.1の基本スコアを8.1としました。深刻度は、.NETとVisual Studioでは「緊急(Critical)」、PowerShellでは「重要(Important)」と評価しています。悪用可能性の評価は「悪用の可能性が高い(Exploitation More Likely)」です。
Pythonでは、脆弱なデコーダーがPyPIの2つのパッケージ、Brotliとbrotlicffiに組み込まれています。それぞれバージョン1.2.1と1.2.1.0のリリースでパッチが適用されました。
影響を受けるソフトウェアが増えるにつれ、研究者らはこの脆弱性を「HTTP2Shell」「Broccoli2Shell」とも呼ぶようになりました。
Brotliデコーダーの独自コピーを同梱するソフトウェアを集めた公開トラッカーには、DuckDB、Apache Arrow、7-Zip-zstd、p7zip、EDK IIなど、いまだ未修正のプロジェクトが複数並んでいます。トラッカーの運営者は、このリストは網羅的ではなく、これらのプロジェクトのすべての構成が脆弱なコードにさらされるとは限らないとしています。
アップデートを適用する際は、影響を受けるサービスの再起動に加え、パッチ適用済みのベースイメージに基づくコンテナイメージの再ビルドも必要です。すでに稼働中のプロセスは、脆弱なコードを使い続けるためです。