n8nRCE101:CVE-2025–68613漏洞分析

admin 2026-01-09 23:31:03 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 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,安全工具,应急响应


cover_image

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 执行环境的入口。
  • process Node.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 启动 shbashpowershell 等行为

总结(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 漏洞分析》

评论:0   参与:  0