{“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)
アップデート: 公式が提供する修正済みバージョン(v1.25.0以降推奨)へ即座に更新。
外部公開の停止: VPN配下への配置、またはリバースプロキシでのBasic認証/クライアント証明書の追加。
特権の剥奪: n8nプロセスを
rootで実行している場合、即座に非特権ユーザー(nodeユーザー等)へ切り替え。
【実務上の落とし穴】
可用性への影響:
N8N_BLOCK_SVC_JS_EXPRESSIONSを有効にすると、高度なJavaScriptを記述している既存のワークフローが停止するリスクがあります。誤検知(False Positive): 開発者が意図的に
Execute Commandノードを使用している場合、セキュリティスキャナがそれをRCEと誤認することがあります。棚卸しが必要です。プラグインの盲点: コミュニティ製のカスタムノードが古い依存ライブラリを引き継いでいる場合、n8n本体を更新しても脆弱性が残る可能性があります。
【まとめ】
組織として、以下の3点を最優先で実施してください。
バージョンの即時確認: 使用中のn8nが修正済みバージョンであるか確認し、未修正なら1時間以内にアップデートまたはサービス停止を判断する。
露出面の最小化: 公開設定を見直し、インターネットからの直接アクセスを遮断する。
実行ユーザーの非特権化: コンテナ実行時を含め、root権限での稼働を停止する。
参考文献:


コメント