n8nの致命的なRCE脆弱性(CVE-2026-25049)への緊急対応:サンドボックス回避によるシステム完全占拠の回避策

Tech

[Tone & Style: Professional CSIRT/Security Engineer]

  • 専門用語を正確に使用し、冗長な修飾語を排除した「事実と対策」中心の記述。

  • 脅威の深刻度をCVSSスコアに基づき客観的に評価。

  • コードブロックはシンタックスハイライトを適切に適用。

  • Mermaid図解は論理的構造を優先。

本記事は**Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)**です。 # n8nの致命的なRCE脆弱性(CVE-2026-25049)への緊急対応:サンドボックス回避によるシステム完全占拠の回避策 ### 【脅威の概要と背景】 n8nの式評価エンジンにおけるサンドボックス回避により、未認証の攻撃者がホストOS上で任意のコマンドを実行可能な脆弱性(CVSS 9.4)。 ### 【攻撃シナリオの可視化】

graph TD
    A["攻撃者: インターネット/内部NW"] -->|1. 悪意のある式を含むWebhook送信| B("n8n ワークフローエンジン")
    B -->|2. 式の評価中にサンドボックスを脱出| C{"ホストOS権限奪取"}
    C -->|3a. 機密情報の窃取| D["データベース/環境変数"]
    C -->|3b. 横展開| E["内部ネットワークへの侵入"]
    C -->|3c. 永続化| F["バックドアの設置"]

攻撃者は、n8nの「Expression(式)」機能がJavaScriptを実行する際の境界を悪用し、`vm2`や`isolated-vm`などのライブラリ制限をバイパスして、基盤となるNode.jsプロセスおよびOSのシステムコールに直接アクセスします。 ### 【安全な実装と設定】 #### 1. 脆弱な設定例(OSコマンドノードの無制限利用) ワークフロー内で外部入力をそのままシェルコマンドに渡す設計は、RCEの入り口となります。

# 誤用例:Webhookの入力をそのまま実行


# 攻撃者は payload に "; rm -rf /" などを注入可能

n8n_execute_command("ls " + $json.query.dir);

#### 2. 安全な代替案(ノード制限と環境分離) 環境変数を使用して、リスクの高いノードを無効化し、実行環境を隔離します。

# n8nサーバー起動時の環境変数設定


# 実行コマンドノードを無効化し、OSへの直接アクセスを制限する

export N8N_BLOCK_NODES=n8n-nodes-base.executeCommand,n8n-nodes-base.executeBatchCommand

# サンドボックスの隔離レベルを最大化(configファイル等)

export N8N_JS_SANDBOX=isolated

#### 3. 最小権限原則(Docker実行時) n8nプロセスを `root` ユーザーで実行しないことが、RCE成功時の被害を最小化する鍵です。

# docker-compose.yml 抜粋

services:
  n8n:
    image: n8nio/n8n:latest
    user: "1000:1000" # 非ルートユーザーでの実行
    read_only: true    # ルートファイルシステムを読み取り専用に
    tmpfs:

      - /home/node/.n8n

【検出と緩和策】

1. EDR/SIEMでの検知ポイント

  • 子プロセスの異常監視: n8nのメインプロセス(node)から、想定外のバイナリ(sh, bash, curl, nc)が起動されていないか監視。

  • 通信パターンの変化: n8nコンテナから外部の不審なIPアドレス(C2サーバー)へのアウトバウンド通信(特にポート4444や8080など)を検知。

2. 応急的な緩和策(パッチ適用が困難な場合)

  • WAFによるフィルタリング: Webhookエンドポイントへのリクエストに含まれる require(, process., child_process などのキーワードをブロック。

  • ネットワーク隔離: n8nサーバーから内部セグメント(DBや他社API)への通信を、必要な宛先のみに制限(ホワイトリスト化)。

【実務上の落とし穴】

  • 可用性への影響: N8N_BLOCK_NODES でコマンド実行ノードを停止すると、レガシーな運用自動化フローが停止する恐れがあります。事前に依存関係の棚卸しが必要です。

  • 誤検知(False Positive): 開発者が正当な理由で Code Node を利用している場合、セキュリティスキャンが正常なコードを攻撃と誤認する可能性があります。

【まとめ】

組織として直ちに実施すべき3項目:

  1. 即時アップデート: ベンダーが提供する修正済みバージョン(LTS等)への更新。

  2. 実行環境の要塞化: N8N_BLOCK_NODES を適用し、非ルートユーザーでのコンテナ実行を徹底。

  3. 資産の棚卸し: 公開設定になっているn8nインスタンスがないか、外部アタックサーフェスを確認。


参考文献:

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました