SystemVll/CVE-2026-21858
GitHub: SystemVll/CVE-2026-21858
CVE-2026-21858 概念验证工具,用于检测 n8n 平台因表单工作流输入验证不足导致的未授权远程代码执行漏洞。
Stars: 3 | Forks: 0
# CVE-2026-21858
## n8n 工作流自动化平台 - 远程代码执行
一个用于检测 CVE-2026-21858 的安全研究工具,该漏洞是 n8n 工作流自动化平台中的一个严重远程代码执行漏洞。
## 目录
- [漏洞概述](#vulnerability-summary)
- [受影响版本](#affected-versions)
- [技术分析](#technical-analysis)
- [前置条件](#prerequisites)
- [安装说明](#installation)
- [使用方法](#usage)
- [输出参考](#output-reference)
- [检测方法](#detection-methodology)
- [缓解与修复](#mitigation-and-remediation)
- [入侵指标](#indicators-of-compromise)
- [法律免责声明](#legal-disclaimer)
- [参考资料](#references)
- [致谢](#credits)
## 漏洞概述
| 字段 | 值 |
|-------|-------|
| CVE 标识符 | CVE-2026-21858 |
| CVSS v3.1 评分 | 10.0(严重) |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| CWE 分类 | CWE-94: 代码生成控制不当 |
| 供应商 | n8n GmbH |
| 产品 | n8n 工作流自动化 |
| 披露日期 | 2026年1月 |
| 补丁状态 | 已提供(v1.121.0+) |
### 执行摘要
n8n 1.65.0 到 1.120.x 版本中存在一个严重漏洞,允许未经身份验证的远程攻击者在底层服务器上执行任意代码。该漏洞通过特制的基于表单的工作流被利用,从而导致未经授权的文件系统访问和命令执行。
### 影响评估
- **机密性**:系统数据完全泄露
- **完整性**:任意文件修改和代码执行
- **可用性**:可能导致系统被完全接管或拒绝服务
- **影响范围**:已改变 - 利用该漏洞可能会影响受漏洞组件以外的资源
## 受影响版本
| 版本范围 | 状态 |
|---------------|--------|
| < 1.65.0 | 不受影响 |
| 1.65.0 - 1.120.x | 存在漏洞 |
| >= 1.121.0 | 已修复 |
## 技术分析
### 漏洞根本原因
该漏洞源于基于表单的工作流执行引擎中输入验证不足。当通过表单触发器处理用户提供的数据时,n8n 在将输入参数传递给内部执行上下文之前未能正确进行清理。
### 攻击向量
1. 攻击者发现一个可公开访问的 n8n 实例
2. 利用目标基于表单的工作流端点
3. 通过表单输入字段注入恶意 payload
4. 该 payload 以 n8n 服务账户的权限执行
5. 实现任意文件读取/写入和命令执行
### 利用复杂性
- **前置条件**:具有对目标 n8n 实例的网络访问权限
- **身份验证**:不需要
- **用户交互**:无
- **攻击复杂性**:低
## 前置条件
### 系统要求
- Python 3.12 或更高版本
- 具有与目标 n8n 实例的网络连接
- 具有执行 Python 脚本的足够权限
### 依赖项
| 包名 | 最低版本 | 用途 |
|---------|-----------------|---------|
| requests | 2.31.0 | HTTP 请求处理 |
| urllib3 | 2.0.0 | URL 和连接管理 |
| packaging | 23.0 | 版本比较逻辑 |
## 安装说明
### 方法 1:使用 uv(推荐)
[uv](https://github.com/astral-sh/uv) 是一个快速的 Python 包安装和解析工具。
```
# Clone the repository
git clone https://github.com/SystemVll/CVE-2026-21858.git
cd CVE-2026-21858
# 安装依赖并创建虚拟环境
uv sync
# 运行工具
uv run python main.py -u https://target.example.com
```
### 方法 2:使用 pip
```
# Clone the repository
git clone https://github.com/SystemVll/CVE-2026-21858.git
cd CVE-2026-21858
# 创建虚拟环境(推荐)
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# 或
.\venv\Scripts\activate # Windows
# 安装依赖
pip install requests>=2.31.0 urllib3>=2.0.0 packaging>=23.0
# 运行工具
python main.py -u https://target.example.com
```
### 方法 3:手动安装
```
# 确保已安装 Python 3.12+
python3 --version
# 安装所需的包
pip install requests urllib3 packaging
# 下载并运行
curl -O https://raw.githubusercontent.com/SystemVll/CVE-2026-21858/main/main.py
python3 main.py -u https://target.example.com
```
## 使用方法
### 命令行界面
```
Usage:
python main.py -u Scan single target
python main.py -l Scan multiple targets from file
Arguments:
-u Single target URL
-l Path to file containing target URLs (one per line)
```
### 单目标扫描
测试单个 n8n 实例是否存在漏洞:
```
python main.py -u https://n8n.example.com
```
```
python main.py -u http://192.168.1.100:5678
```
### 批量目标扫描
从文件扫描多个目标:
```
python main.py -l targets.txt
```
**目标文件格式** (`targets.txt`):
```
https://n8n.company-a.com
https://n8n.company-b.com:5678
http://10.0.0.50:5678
n8n.company-c.com
192.168.1.100:5678
```
注意事项:
- 每行一个目标
- 没有协议前缀的 URL 默认使用 `https://`
- 空行将被忽略
- 使用多线程并发扫描目标
## 输出参考
### 状态指示器
| 指示器 | 颜色 | 描述 |
|-----------|-------|-------------|
| `[VULNERABLE]` | 绿色 | 目标运行存在漏洞的 n8n 版本 (1.65.0 - 1.120.x) |
| `[SAFE]` | 蓝色 | 目标运行已修复的版本 (>= 1.121.0 或 < 1.65.0) |
| `[WARNING]` | 黄色 | 检测到 n8n 实例,但版本提取失败 |
| `[ERROR]` | 红色 | 连接失败、超时或非 n8n 目标 |
## 检测方法
### 版本指纹识别过程
该工具通过以下步骤采用被动版本检测:
1. **端点请求**:向 `/signin` 端点发送 HTTP GET 请求
2. **实例验证**:验证目标是否为 n8n 安装
3. **配置提取**:在 HTML 中定位 `n8n:config:sentry` meta 标签
4. **Base64 解码**:解码内嵌的 Sentry 配置
5. **版本解析**:提取匹配 `n8n@X.Y.Z` 模式的版本字符串
6. **漏洞评估**:将提取的版本与已知的受影响范围进行比较
### 请求详情
```
GET /signin HTTP/1.1
Host: target.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language: en-US,en;q=0.5
Connection: close
```
## 缓解与修复
### 立即采取的行动
1. **升级 n8n**:立即更新至 1.121.0 或更高版本
# 使用 npm
npm update -g n8n
# 使用 Docker
docker pull n8nio/n8n:latest
2. **网络隔离**:限制对 n8n 实例的访问
- 实施防火墙规则,限制仅受信任的 IP 范围可以访问
- 将 n8n 置于具有身份验证的 VPN 或反向代理之后
3. **工作流审计**:审查所有现有的工作流
- 识别并暂时禁用基于表单的工作流
- 审计 webhook 端点是否存在未经授权的访问
### 长期建议
| 行动 | 优先级 | 描述 |
|--------|----------|-------------|
| 补丁管理 | 严重 | 为 n8n 建立自动更新程序 |
| 访问控制 | 高 | 对所有 n8n 端点实施身份验证 |
| 网络隔离 | 高 | 将 n8n 与公共网络隔离 |
| 监控 | 中 | 部署针对 n8n 活动的日志记录和告警 |
| 最小权限 | 中 | 以最低要求的权限运行 n8n |
| 备份 | 中 | 定期备份工作流配置 |
### 补丁修复后的验证
```
# 在更新后验证 n8n 版本
n8n --version
# 或者通过此工具检查
python main.py -u https://your-n8n-instance.com
# 预期:[SAFE] ... 版本:1.121.0+(不易受攻击)
```
## 入侵指标
### 日志分析
检查 n8n 和 Web 服务器日志中是否存在以下模式:
- 针对表单触发器端点的异常 POST 请求
- 表单字段中包含编码 payload 的请求
- 试图通过表单数据访问敏感文件路径的尝试
- 来自 n8n 服务器的意外外部连接
### 文件系统痕迹
- n8n 工作目录中的未经授权文件
- 已修改的工作流配置文件
- 意外的脚本或可执行文件
### 网络指标
- 连接到未知的外部主机
- 数据泄露模式
- 源自 n8n 进程的反向 shell 连接
## 法律免责声明
**重要提示:使用前请阅读**
本工具仅严格用于:
- 授权的安全评估
- 获得书面授权的渗透测试
- 教育和研究目的
- 防御性安全操作
**禁止的用途:**
- 未经授权访问计算机系统
- 未经明确书面同意利用系统漏洞
- 任何违反适用法律或法规的活动
**责任:**
作者和贡献者不对本软件的误用承担任何责任。用户需自行确保遵守所有适用的法律,并在进行任何安全测试之前获得适当的授权。
**法律通知:**
在大多数司法管辖区,未经授权访问计算机系统属于犯罪行为,包括但不限于违反美国的《计算机欺诈和滥用法》(CFAA)、英国的《计算机滥用法》以及全球范围内的类似立法。
## 参考资料
### 官方资源
- [n8n 官方网站](https://n8n.io)
- [n8n GitHub 代码库](https://github.com/n8n-io/n8n)
- [n8n 安全公告](https://github.com/n8n-io/n8n/security/advisories)
### 漏洞数据库
- [NVD - CVE-2026-21858](https://nvd.nist.gov/vuln/detail/CVE-2026-21858)
- [MITRE CVE 记录](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-21858)
### 相关文档
- [CWE-94: 代码生成控制不当](https://cwe.mitre.org/data/definitions/94.html)
- [OWASP 代码注入](https://owasp.org/www-community/attacks/Code_Injection)
## 更新日志
| 版本 | 日期 | 变更 |
|---------|------|---------|
| 1.0.0 | 2026-01-20 | 初始发布 |
## 许可证
本项目按“原样”提供,仅用于授权的安全研究目的。不提供任何明示或暗示的保证。使用风险自负,并需遵守适用的法律。
标签:Maven, n8n, PoC, 安全漏洞, 暴力破解, 漏洞验证, 网络安全审计, 逆向工具