概要
Node.jsは10月21日、22.x/24.x/26.x系列の全サポートバージョン向けに、合計10件のCVEを修正する緊急セキュリティリリース(v22.23.4、v24.22.1、v26.12.1)を公開した。最も深刻なのはBrotliデコーダの範囲外書き込み(Out-of-Bounds Write)に起因するリモートコード実行の脆弱性(CVE-2026-111497、深刻度HIGH)で、OpenAI Codex SecurityのKhai TranとSylvie Mayerによって報告された。残る9件のうち、TLS証明書のホスト名検証をバイパスする脆弱性が3件(CVE-2026-105483、CVE-2026-106069、CVE-2026-106072)、DNS解決やキープアライブ処理、crypto.randomUUID()のエントロピー再利用に関する脆弱性などが含まれ、HIGHが4件、MEDIUMが3件、LOWが3件という内訳になっている。20.x以前はすでにEOLのため、パッチは提供されない。
Brotli RCE脆弱性の技術的詳細
CVE-2026-111497は、Node.jsにバンドルされているBrotli展開処理に存在するバッファ境界チェックの不備が原因で、攻撃者が加工した圧縮データをデコードさせることでバッファの範囲外にメモリを書き込ませられるという脆弱性だ。影響を受けるのはnode:zlibモジュールを直接利用するアプリケーションに加え、攻撃者が制御するBrotliデータを展開するケース全般で、fetch()でBrotli圧縮されたレスポンスを自動的に展開する仕様のため、意識せずに攻撃対象領域に組み込まれているアプリケーションが多いと指摘されている。修正の元となったパッチはGoogleのBrotliライブラリ本体のバージョン1.2.1、1.1.1、1.0.10(10月21日リリース)に由来し、Google自身は2026年2月にBrotliのソースに修正を加えており、今回10月にセキュリティリリースとして展開された(遅延の理由は記事中で明らかにされていない)。
10月22日には公開のPoCが示されたが、実際にコード実行に成功したのは「意図的に弱体化させたテストビルド」に対してのみで、標準のNode.jsビルドではクラッシュや限定的なメモリ読み取りが確認された程度であり、通常ビルドに対する実動する攻撃は確認されていない。本稿執筆時点で実際の悪用報告もないが、深刻度自体はHIGHに分類されている。
その他の主な修正内容と推奨対応
TLS関連では、全幅数字で表記されたIPアドレスや疎なIPアドレス表記を使った証明書のホスト名検証バイパス(CVE-2026-105483、CVE-2026-106069、CVE-2026-106072)が複数修正された。また、dns.resolveがNUL文字を含むホスト名を不適切に切り詰める問題(CVE-2026-105482)、キープアライブソケットの応答処理不備(CVE-2026-105481)、crypto.randomUUID()およびrandomInt()のエントロピーキャッシュがユーザーランドのスナップショットやSEA(Single Executable Applications)に保持され、プロセス間で値が繰り返される問題(CVE-2026-106074)も修正対象だ。LOW評価の3件はZipFile検証失敗時の情報開示や、Permission Modelのワイルドカード権限の過剰付与・fs.realpathSyncのバイパスに関するもの。合わせてc-ares、OpenSSL、SQLite、Undici、CA証明書(eMudhra中間CA侵害対応)といった依存ライブラリの更新も行われている。
Node.jsプロジェクトは、ワークアラウンドが存在しないため全ユーザーに対しv22.23.4、v24.22.1、v26.12.1への速やかなアップグレードを強く推奨している。特にBrotliのRCE脆弱性は影響範囲が広く、EOLとなった20.x以前を使い続けている環境は今回のパッチ対象外であるため、サポート状況の確認とあわせたバージョンの見直しが求められる。