n8nの致命的RCE脆弱性(CVE-2024-25049)に対する緊急アドバイザリと対応策

Tech

{“engine”: “Gemini-1.5-Pro”, “expertise”: “CSIRT/Security Engineering”, “target_CVE”: “CVE-2024-25049”, “severity”: “9.4/10”}

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

n8nの致命的RCE脆弱性(CVE-2024-25049)に対する緊急アドバイザリと対応策

【脅威の概要と背景】

n8nの式評価エンジンに存在する欠陥により、認証なしでサーバー上での任意コード実行(RCE)を許す脆弱性。2024年に特定され、CVSS 9.4と極めて高いリスク。

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

graph TD
    Attacker["攻撃者"] -->|1. 未認証のAPIリクエスト| N8N_Server["n8n サーバー"]
    N8N_Server -->|2. 不正な式(Expression)の注入| Engine["式評価エンジン"]
    Engine -->|3. サンドボックスの回避| OS_Kernel["OS/ホストシステム"]
    OS_Kernel -->|4. リバースシェルの確立| C2_Server["攻撃者のC2サーバー"]
    C2_Server -->|5. 認証情報の窃取・横展開| Internal_Network["内部ネットワーク"]

【安全な実装と設定】

n8nの利便性である「JavaScriptの自由度」が、設定次第で攻撃の起点となります。特に共有環境や外部公開されているインスタンスでは、以下の対策が必須です。

1. 実行環境の分離(サンドボックスの強制)

脆弱な設定では、Node.jsのプロセスが直接OSリソースにアクセス可能です。

誤用例(デフォルト・危険): 特に対策をせず、n8nを特権ユーザーで直接実行している。

安全な代替案(Docker / 環境変数による制限): .env ファイルまたは環境変数にて、強力な制限を課します。

# 1. 外部関数呼び出しの制限

N8N_BLOCK_SVC_JS_EXPRESSIONS=true

# 2. サンドボックスの有効化(Node.js VM2等の利用、または分離されたバイナリ)


# 最新版ではデフォルトで強化されているが、コンテナレベルでの制限が推奨される

docker run --rm \
  --name n8n \
  --user 1000:1000 \
  --cap-drop=ALL \
  --net=n8n-network \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n:latest

2. ネットワークレベルの保護

n8nを不特定多数に公開せず、アクセス元を制限します。

# UFW (Ubuntu) による特定IPからのアクセスのみ許可

ufw allow from [社内VPN_IP] to any port 5678

【検出と緩和策】

EDR/SIEMでの検知ポイント

  • 異常な子プロセス生成: n8n プロセス(node)から sh, bash, curl, wget 等が起動されていないかを監視。

  • ファイル書き込みの検知: /tmp/var/tmp への不審なバイナリ書き込み。

  • ログ監視: n8n のログに SyntaxError や異常な文字列を含む式評価エラーが短時間に多発していないかを確認。

応急的な緩和策(Workaround)

  1. アップデート: 公式が提供する修正済みバージョン(v1.25.0以降推奨)へ即座に更新。

  2. 外部公開の停止: VPN配下への配置、またはリバースプロキシでのBasic認証/クライアント証明書の追加。

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

【実務上の落とし穴】

  • 可用性への影響: N8N_BLOCK_SVC_JS_EXPRESSIONS を有効にすると、高度なJavaScriptを記述している既存のワークフローが停止するリスクがあります。

  • 誤検知(False Positive): 開発者が意図的に Execute Command ノードを使用している場合、セキュリティスキャナがそれをRCEと誤認することがあります。棚卸しが必要です。

  • プラグインの盲点: コミュニティ製のカスタムノードが古い依存ライブラリを引き継いでいる場合、n8n本体を更新しても脆弱性が残る可能性があります。

【まとめ】

組織として、以下の3点を最優先で実施してください。

  1. バージョンの即時確認: 使用中のn8nが修正済みバージョンであるか確認し、未修正なら1時間以内にアップデートまたはサービス停止を判断する。

  2. 露出面の最小化: 公開設定を見直し、インターネットからの直接アクセスを遮断する。

  3. 実行ユーザーの非特権化: コンテナ実行時を含め、root権限での稼働を停止する。


参考文献:

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

コメント

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