文章总结: CVE-2025-68613是n8n0.211.0–1.120.3的9.9分严重漏洞,已认证用户可在表达式节点注入IIFE载荷,利用this→process→mainModule→require(child_process)链逃逸沙箱并执行任意系统命令,官方已在1.120.4+修复,建议立即升级并通过WAF/进程监控检测攻击 综合评分: 92 文章分类: 漏洞分析,WEB安全,漏洞POC,安全工具,应急响应
n8n RCE 101:CVE-2025–68613 漏洞分析
haidragon
安全狗的自我修养
2026年1月9日 12:03 湖南
官网:http://securitytech.cc/
#
2025 年 12 月 19 日,一个针对 n8n(一款流行的开源工作流自动化平台)的严重漏洞被公开。该漏洞编号为 CVE-2025–68613,严重性评分高达 9.9(Critical)。
该漏洞允许已认证用户绕过沙箱限制并执行任意系统命令。
在本文中,我们将拆解 n8n 的整体架构,理解 JavaScript 沙箱逃逸是如何发生的,并探讨如何在真实环境中检测此类攻击行为。
按 Enter 键或点击查看大图
什么是 n8n?
在深入分析漏洞之前,我们需要先了解目标本身。 n8n 被设计用于以可视化方式连接各种应用和服务。你可以构建由多个 节点(node) 组成的“工作流(workflow)”,每个节点执行一个具体操作,例如:
- 发起 API 请求
- 处理 JSON 数据
- 发送电子邮件
在底层实现上,n8n 构建于 Node.js 之上。 其中一个关键特性是 表达式求值系统(Expression Evaluation System)。
该系统允许用户使用双大括号 {{ }} 包裹的动态表达式,用来引用前一个节点的数据或执行简单逻辑。
例如,用户可能会编写如下表达式:
(此处为示例表达式)
这些表达式在执行期间会被当作 JavaScript 代码 来执行,而这一特性正是漏洞的核心所在。
漏洞本质:沙箱逃逸(Sandbox Escape)
该漏洞影响 n8n 的版本范围为 0.211.0 到 1.120.3。
虽然 n8n 的设计初衷是让这些表达式运行在一个受限的沙箱环境中,但实际上该隔离机制并不完整。
核心问题在于:表达式注入(Expression Injection)
具体来说,表达式求值器未能正确地将执行上下文与 Node.js 的全局环境隔离。 攻击者可以利用某些 JavaScript 特性,“一步步爬出”沙箱,最终访问宿主系统。
利用载荷(Payload)
下面我们来看由 wioui 提供的 PoC(概念验证)载荷。
乍一看,它只是一个普通的 立即执行函数(IIFE, Immediately Invoked Function Expression)。 但真正的“魔法”发生在函数内部。
下面逐步拆解其权限提升链路:
this在沙箱上下文中,this指向全局对象。由于隔离存在缺陷,它为我们提供了进入 Node.js 执行环境的入口。processNode.js 的全局对象,用于获取当前 Node.js 进程的信息。mainModule指向应用程序的根模块。 👉 这是关键突破点:此时我们已经绕过了用户表达式沙箱,开始接触应用的核心内部结构。require('child_process')正常情况下,require在用户表达式中是被禁止的。 但通过mainModule间接访问,我们可以成功加载child_process模块,从而创建操作系统级别的新进程。execSync('id')执行系统命令id。
权限提升链路总结:
Sandbox
↓
Node.js Global(this)
↓
Module System(mainModule)
↓
RCE (child_process)
复现漏洞(Reproducing the Exploit)
要演示该漏洞,并不需要复杂的工具——只需浏览器和一个存在漏洞的 n8n 实例即可。
步骤 1:环境准备
登录 n8n 控制面板后,创建一个新的工作流,选择 “From Scratch(从零开始)”。
步骤 2:触发器
添加一个 Manual Trigger(手动触发) 节点,用于点击执行工作流。
步骤 3:注入点
将一个通用的 “Edit Fields (Set)” 节点连接到触发器。
该节点允许我们定义变量。
在字段值中,不使用静态字符串,而是将输入类型切换为 “Expression”,并粘贴恶意载荷。
步骤 4:执行
点击 “Execute Step” 后,n8n 引擎会对表达式进行求值。
结果并非返回字符串,而是:
- 执行 JavaScript
- 逃逸沙箱
- 在服务器上运行
id - 将命令输出返回到预览窗口
预览窗口中的输出清楚地表明: 代码是以 root(或 n8n 服务用户) 权限执行的。
检测与防御(Detection and Defense)
该漏洞已在以下版本中修复:
- 1.120.4
- 1.121.1
- 1.122.0
👉 升级是唯一可靠的修复方式。
但对于蓝队(Blue Team)而言,检测攻击尝试同样至关重要。
日志问题
默认情况下,n8n 的日志通常不足以记录具体的表达式载荷。
最佳做法是:
- 在 反向代理(如 Nginx)或 WAF 上
- 检查发送到 n8n 的 HTTP Request Body
Sigma 规则
用于检测该行为的 Sigma 规则,通常关注以下特征:
- 向
/rest/workflows发送的 POST 请求 - 请求体中出现与沙箱逃逸链相关的 JavaScript 关键字
注意:
该检测方式依赖于特定的 child_process 访问方法。攻击者可能对其进行混淆,因此还必须:
- 在 n8n 主机上监控 进程创建事件
- 特别是
node启动sh、bash、powershell等行为
总结(Conclusion)
CVE-2025–68613 再次清楚地提醒我们: 将用户输入作为代码执行,本身就具有极高风险。
即使引入了沙箱机制,JavaScript 的高度动态特性也使得真正的隔离极其困难。
这个漏洞不仅仅是输入校验不当的问题,而是用户提供的代码与应用运行时环境之间的信任边界被彻底打破。
-
n8n 用户:立即升级
-
安全研究人员:这是一个“功能丰富的表达式引擎如何演变成致命漏洞”的经典案例
-
公众号:安全狗的自我修养
-
vx:2207344074
-
http://gitee.com/haidragon
-
http://github.com/haidragon
-
bilibili:haidragonx
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全狗的自我修养 haidragon《n8n RCE 101:CVE-2025–68613 漏洞分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论