Node2Shell脆弱性、MicrosoftとNode.jsがBrotliのパッチ対応に追われる

GoogleのBrotliデコーダーにある境界外書き込みの脆弱性は複数のソフトウェアエコシステムに影響します。これを受けて、.NET、Node.js、2つのPythonパッケージでセキュリティアップデートが公開されました。

GoogleのBrotli圧縮ライブラリーに脆弱性が見つかりました。影響を受けるBrotliデコーダーで圧縮データを処理するアプリケーションでは、攻撃者が任意のコードを実行できる恐れがあります。

この脆弱性はCVE-2026-111497として追跡されており、深刻度は「高」です。最初に指摘されたのは、Node.jsに組み込まれているBrotliデコーダーでした。原因は境界外書き込みで、プロセスのメモリーが破壊され、リモートコード実行(RCE)、情報漏えい、サービス拒否(DoS)につながる可能性があります。

Node.jsプロジェクトは2026年10月21日、この脆弱性を公表しました。あわせて、22.x、24.x、26.xの各リリースラインにセキュリティアップデートを提供しています。ただし、影響はNode.jsだけにとどまりませんでした。Microsoftも同じCVEに対処するため、10月25日に.NET向けの臨時セキュリティアップデートを公開し、自社のBrotli展開実装を修正しています。

OpenSourceMalwareが公表した別の調査では、PythonパッケージのBrotliとbrotlicffiにも脆弱なデコーダーコードが含まれていることが判明しました。両パッケージとも、すでに修正版がリリースされています。

リスクの有無は、アプリケーションが攻撃者の制御するBrotliデータを、影響を受けるデコーダーで処理するかどうかで決まります。リモートコード実行は、GitHub上で公開されたPoC(概念実証)ラボで実証されたほか、セキュリティ企業のImpervaも独自に確認しました。Impervaはこの脆弱性に「Node2Shell」という名前を付けています。

特に危険にさらされるのは、信頼できないHTTPレスポンスやリクエストボディーを展開するサービスです。研究者らは、コンテナーや配備済みのアプリケーション成果物に組み込まれたランタイムやライブラリーも、組織は忘れずに確認すべきだと指摘しています。

不正なブロック切り替えでBrotliのデコードが境界外へ

Brotliは、アプリケーションとサーバーの間でやり取りするデータのサイズを減らすための可逆圧縮アルゴリズムです。Node2Shellの原因は、圧縮ストリーム内の無効なブロックタイプ遷移をデコーダーが処理する部分にあります。

GitHubのPoCによると、ストリームが無効なブロック切り替えを要求すると、脆弱なDecodeBlockTypeAndLength()関数があいまいな失敗値を返すことがあります。デコーダーの高速パスはこの戻り値を適切に処理できず、無効な内部状態のまま処理を続行します。その結果、境界外書き込みが発生してメモリーが破壊される恐れがあります。この弱点は、戻り値の未チェック(CWE-252)と境界外書き込み(CWE-787)が組み合わさったものです。

PoCの標的は、脆弱なNode.js 24.22.0のLinux x86-64ビルドです。このエクスプロイトは特定のバイナリーとメモリーレイアウトに依存しており、実行は確率的で、場合によっては再試行が必要です。リポジトリーでは、修正版のNode.js 24.22.1ビルドに対して同じリクエストを送っても失敗することも示されています。このビルドのデコーダーは、無効なブロック切り替えを拒否します。

この脆弱性は、OpenAIによるセキュリティテストの中で、Codex Securityの研究者Khai Tran氏とSylvie Mayer氏が発見し、Node.jsプロジェクトに報告しました。

Node.js、Microsoft、Pythonのパッチで対応が出そろう

Node.jsプロジェクトは、バージョン22.23.4、24.22.1、26.12.1で修正を公開しました。管理者は、該当する修正版またはそれ以降のセキュリティアップデートにアップグレードし、影響を受けるコンテナーイメージを再ビルドして、脆弱なランタイムを組み込んだアプリケーションを再デプロイする必要があります。サポート終了(EOL)となったNode.jsバージョンも影響を受けるものとして扱い、サポート対象のリリースへ移行してください。

Microsoftが10月25日に公開した臨時アップデートは、.NET 8、9、10と.NET 11 Release Candidate 3のCVE-2026-111497に対処します。該当するランタイムのバージョンは8.0.33、9.0.22、10.0.14で、プレビュー版は11.0.0-rc.3.26522.148です。更新されたSDKも提供されています。自己完結型デプロイやNative AOTを使うアプリケーションは、必要に応じて再ビルドと再デプロイが必要です。共有ランタイムを更新するだけでは、実行可能ファイルにすでにリンクされているデコーダーは置き換わらないためです。

Pythonのメンテナーも、影響を受けるパッケージの修正版をリリースしました。OpenSourceMalwareは、修正版がBrotli 1.2.1とbrotlicffi 1.2.1.0だと特定しています。脆弱なバージョンは、それぞれ1.2.0以前と1.2.0.2以前です。開発者は依存関係を更新し、デプロイ済みの環境で修正版が使われていることを確認してください。

Googleも、Brotliライブラリーの修正済みバージョンを公開しました。根本的な欠陥は1.0.10、1.1.1、1.2.1で修正されています。記事公開時点で、Node2Shellが実際の攻撃で悪用されたという報告は公には確認されていません。ただし、PoCコードはすでに数日前から入手できる状態です。

翻訳元: https://www.csoonline.com/article/4241027/node2shell-puts-microsoft-and-node-js-on-brotli-patch-duty.html

本記事は csoonline.com の記事を翻訳・要約したものです。