ブログ一覧に戻る
脆弱性2026年10月22日4分で読めます

Node.jsのBrotli脆弱性がリモートコード実行を可能に(CVE-2026-111497/Node2Shell)

Node2Shell: Node.js Brotli vulnerability allows remote code execution (CVE-2026-111497)

脆弱性CVE脆弱性

この記事のポイント

【なぜ重要か】 Node.jsに搭載されているBrotliデコーダーに「境界外書き込み(out-of-bounds write)」の脆弱性が発見され、攻撃者が悪意あるBrotli圧縮データをアプリケーションに送り込むことで、プロセスのクラッシュ・メモリリーク・リモートコード実行が起こり得る。2026年10月22日時点で公開済みの概念実証(PoC)が存在し、研究者によってLinux arm64上の未...

【なぜ重要か】 Node.jsに搭載されているBrotliデコーダーに「境界外書き込み(out-of-bounds write)」の脆弱性が発見され、攻撃者が悪意あるBrotli圧縮データをアプリケーションに送り込むことで、プロセスのクラッシュ・メモリリーク・リモートコード実行が起こり得る。2026年10月22日時点で公開済みの概念実証(PoC)が存在し、研究者によってLinux arm64上の未修正Node.js 24.22.0でコード実行が確認されている(ただし毎回成功するわけではない)。野外での実際の悪用報告はないものの、Brotli圧縮データを扱うすべてのNode.jsアプリケーションが対象となるため、早急な対応が求められる。

【ポイント】

  • 影響範囲:Node.jsのすべてのサポート対象リリースライン(22.x・24.x・26.x)およびBun 1.4.4未満が対象。Brotli圧縮データを攻撃者が制御できる状況、具体的にはExpress 5やbody-parser 2.xがContent-Encoding: brリクエストを受け付ける場合、fetch()が外部サーバーからBrotliレスポンスを受け取る場合、node:zlibのBrotli関数に非信頼入力を渡す場合に脆弱性が発動する。
  • 修正バージョン:Node.js 22.x → 22.23.4、24.x → 24.22.1、26.x → 26.12.1へのアップグレードが必要。Node.js 25.x・23.x・20.x以前はサポート終了(End of Life)のため修正版は提供されない。Bunは1.4.4以上へのアップグレードで対応済み。
  • コンテナイメージへの注意:node:24.22.0など旧タグにピン留めされたDockerfileは再ビルドしても脆弱なまま。タグ自体を修正済みバージョンに変更してから再ビルド・再デプロイが必要。Linuxディストリビューションのパッケージ(Debian・Ubuntu・Fedora・RHEL・Alpineなど)からNode.jsを導入している場合、システム側のBrotliパッケージを更新することで修正が適用される場合があるため、各ディストリビューションのセキュリティアドバイザリも確認すること。
  • 暫定対策の限界:Node.jsの公式アドバイザリはワークアラウンドを提示していない。リバースプロキシや負荷分散装置でContent-Encoding: brのリクエストを拒否する、またはVercelのファイアウォールルールを活用するといった暫定対策は、受信リクエスト経由の露出を減らすに過ぎず、アプリが外部サーバーからフェッチするBrotliレスポンスには効果がない。根本的な解決はランタイムのアップグレードのみ。
  • Aikidoによる検出:Aikidoはこの脆弱性を検出し、脆弱なバージョンのNode.jsが動作しているリポジトリおよびコンテナイメージをダッシュボード上で可視化する。アップグレード後に再スキャンすることで修正の完了を確認できる。

【まとめ】 Brotli圧縮データを扱うNode.js(またはBun)アプリケーションはすべて影響を受ける可能性があり、公開PoCも存在することから早急な対応が必要。まずはnode --versionで現行バージョンを確認し、22.23.4・24.22.1・26.12.1(またはそれ以降のパッチリリース)へのアップグレードとコンテナイメージの再ビルド・再デプロイを速やかに実施すること。

原文を読む

Aikido Security Blog

英語で詳細な技術情報を確認

原文を読む

コメント・質問

この記事についてのコメントや質問を投稿できます

コメントを投稿するにはログインが必要です

ログインする

読み込み中...