针对 n8n 中 CVE-2025-68613 漏洞的技术研究,涵盖受影响版本、实验室探索场景、攻防分析以及缓解策略。
n8n 是一个工作流自动化平台,用于通过可视化流程和 JavaScript 表达式集成系统与服务。
CVE-2025-68613 是一个严重的远程代码执行(RCE)漏洞,CVSS 评分为 9.9,影响多个版本的 n8n。该缺陷出现在未正确隔离的易受攻击版本中,工作流内 JavaScript 表达式的处理过程中。这使得具有编辑权限的已认证用户能够执行超出应用程序预期行为的代码。
实际上,该缺陷可被利用来在运行 n8n 的服务器上执行命令,并使用应用程序自身的权限。受影响的版本范围从 0.211.0 一直到 1.120.4、1.121.1 和 1.122.0 中应用修复之前的版本。
本仓库从技术角度记录了 CVE-2025-68613,涵盖该缺陷的背景、受影响版本、利用方式以及推荐的缓解措施。

| 状态 | n8n 版本 | 备注 |
|---|---|---|
| ❌ 受影响 | >= 0.211.0 | 引入易受攻击的机制 |
| ❌ 受影响 | < 1.120.4 | 在 1.120 分支补丁之前均受影响 |
| ❌ 受影响 | < 1.121.1 | 在 1.121 分支补丁之前均受影响 |
| ❌ 受影响 | < 1.122.0 | 在 1.122 分支补丁之前均受影响 |
| ✅ 已修复 | 1.120.4 | 已应用官方修复 |
| ✅ 已修复 | 1.121.1 | 已应用官方修复 |
| ✅ 已修复 | >= 1.122.0 | 默认包含修复 |
建议立即更新到 1.122.0 或更高版本。
为演示该漏洞,需要满足以下条件:
该缺陷发生在工作流的创建和执行过程中,而非认证之前。
第一步是使用有效用户登录 n8n Web 界面。

此步骤确认该攻击并非匿名。该漏洞需要已认证用户。
登录后,验证该用户是否具有创建和编辑工作流的权限。

这一点很重要,因为只有具有此访问级别的用户才能将动态表达式插入工作流。
使用已认证用户,从零开始创建一个新工作流。

从这里开始,是对 n8n 功能的合法使用,而在易受攻击的版本中,这可能会被利用。
添加到工作流的第一个节点是 Manual Trigger。

此节点的作用: 允许手动执行工作流,用作流程的起点。
在此场景中,它仅作为工作流执行的入口点。
添加的第二个节点是 Edit Fields (Set)。

此节点的作用: 此节点允许在工作流内创建、修改或覆盖数据字段。它接受静态值或在执行时求值的 JavaScript 表达式。
正是在这一点上,该漏洞显现出来。
在 Edit Fields (Set) 节点的值字段内,插入一个由 {{ }} 包裹的 JavaScript 表达式,这是 n8n 用于求值动态表达式的格式。

示例 payload:
{{ (function(){
return this.process.mainModule
.require('child_process')
.execSync('id')
.toString()
})() }}
(function(){ ... })():定义一个自调用函数,允许封装所有逻辑并直接向工作流表达式返回一个值。this.process:访问 Node.js 内部的 process 对象,该对象暴露运行时信息和资源。process.mainModule:允许访问应用程序的主模块,从而能够加载其他 Node.js 内部模块。require('child_process'):Node.js 原生模块,允许在操作系统上创建新进程并执行外部命令。execSync('id'):直接在运行 n8n 的操作系统上执行命令,并使用应用程序进程的权限。.toString():将所执行命令的输出转换为文本,使结果能够显示在 n8n 界面中。显示的结果确认该命令已使用 n8n 进程权限在操作系统上执行,构成远程代码执行(RCE)。