n8nの致命的RCE脆弱性(CVE-2024-25049)への対応:サンドボックス回避の防御策

Tech

  • 専門家として、具体的かつ客観的な事実に基づいた構成を行う。

  • 読者の時間を尊重し、構造化された情報(箇条書き、Mermaid)を多用する。

  • リスク評価はCVSS基本値に基づき、ビジネスインパクトと技術的対策の両面をカバーする。

  • 文体は「だ・である」調を採用し、簡潔さを徹底する。

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

n8nの致命的RCE脆弱性(CVE-2024-25049)への対応:サンドボックス回避の防御策

【脅威の概要と背景】

n8nのJSノード等でサンドボックスを回避しRCEを許す脆弱性。2024年に特定され、CVSS 9.4の深刻なリスクを伴います。

【攻撃シナリオの可視化】

本脆弱性は、n8nの式評価エンジンやJavaScript実行ノードにおいて、制約された環境(サンドボックス)から脱出し、ホストOS上で任意のコマンドを実行可能にする。

graph TD
    Attacker["攻撃者"] -->|悪意ある入力/Webhook| N8N["n8n ワークフロー"]
    N8N -->|脆弱なJSノード/式評価| SandboxEscape["サンドボックス回避"]
    SandboxEscape -->|任意のコード実行| HostOS["ホストOS/コンテナ実行環境"]
    HostOS -->|機密情報窃取| Data["DB/環境変数/APIキー"]
    HostOS -->|横展開| Network["内部ネットワーク"]

【安全な実装と設定】

n8nにおける「コード実行」のリスクを最小化するため、脆弱な古いバージョンを排除し、実行環境を隔離することが不可欠である。

1. 脆弱な設定例と安全な代替案

誤用例(脆弱な構成): 特権ユーザーで実行されているコンテナ内で、外部からの入力を直接JavaScriptノードの処理に渡している。

# 脆弱な実行例(Docker)

docker run -it --rm --name n8n -u root -p 5678:5678 n8nio/n8n:1.30.0

安全な代替案(セキュアな構成): 最新バージョンへのアップデート(v1.31.2以降等)に加え、N8N_BLOCK_ENV_VARS_FROM_EXPRESSIONS などの環境変数による制限、および非特権ユーザーでの実行を徹底する。

# 推奨される実行例(非特権ユーザー・リソース制限)

docker run -d --name n8n \
  -u node \
  --cap-drop=ALL \
  --memory="1g" \
  -e N8N_BLOCK_ENV_VARS_FROM_EXPRESSIONS=true \
  -p 5678:5678 n8nio/n8n:latest

2. 環境変数による保護

ワークフロー内で不必要なシステム情報にアクセスできないよう、n8nの設定で制限をかける。

  • N8N_DISABLE_PRODUCTION_MAIN_PROCESS_TERMINATION=true

  • NODE_FUNCTION_ALLOW_EXTERNAL: 許可するモジュールを厳格にホワイトリスト化する。

【検出と緩和策】

検出ポイント (Detection)

  • EDR/監査ログ: n8nプロセス(node)の子プロセスとして sh, bash, curl, wget 等が不自然に起動していないかを監視。

  • SIEM: Webhookノードへのリクエストに含まれる特殊なJavaScript構文(constructor, process, require 等の文字列)をシグネチャベースで検知。

緩和策 (Mitigation)

  1. アップデート: ベンダーが提供する修正済みバージョン(最新版)へ即時移行する。

  2. ネットワーク分離: n8nサーバーから外部への通信を、業務上必要な宛先IP/ドメインのみに制限する(Egressフィルタリング)。

  3. ノード制限: JavaScriptノードの使用が不要な環境では、設定により特定のノードを無効化する。

【実務上の落とし穴】

  • 可用性とのトレードオフ: サンドボックスを強化しすぎると、複雑なロジックをJSノードで記述していた既存ワークフローが停止する恐れがある。移行前にステージング環境での検証が必須。

  • 偽陽性 (False Positive): 開発者がデバッグ目的で正規に記述したコードが、SIEMの検知ルールに抵触し、アラートが過剰発生する可能性がある。

  • コンテナ外への波及: docker.sock をマウントしている場合、コンテナ内でのRCEがホストマシンの完全な乗っ取りに直結するため、マウント設定を再確認すること。

【まとめ】

組織として優先すべき3つのアクション:

  1. 即時アップデート: インストールされているn8nのバージョンを確認し、修正済みバージョンへ更新する。

  2. 実行権限の見直し: n8nプロセスを root で実行している場合、即座に非特権ユーザー(node 等)へ切り替える。

  3. 資産の棚卸し: 公開インターネットに露出しているn8nインスタンスを特定し、可能な限りVPN内またはIP制限下に配置する。


参考文献:

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

コメント

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