n8n 反复出现的 RCE 攻击面:保管你全部凭据的自动化枢纽
2026 年 6 月 n8n 工作流平台的一批严重漏洞——沙箱逃逸、原型污染、表达式求值——说明了为何一个存放你所有密钥的 AI 自动化枢纽会成为单点故障。
摘要 进入 2026 年上半年,n8n——一个被广泛用于构建 LLM 驱动的智能体与自动化流程的开源工作流平台——持续修补了一连串严重的远程代码执行漏洞:2026 年 1 月披露的一条无需认证的文件读取利用链、贯穿春季反复重做的表达式求值漏洞系列,以及 2026 年 6 月新增的 Python 代码节点沙箱逃逸和一条通往 RCE 的原型污染路径。单看每一个都不算奇特。合在一起,它们揭示了一个结构性问题:一个保管你全部密钥的自动化枢纽是价值极高的目标,而每一个漏洞都在同一个共享密钥库上引爆。本文是对漏洞类别的解读,而非利用教程。
这是什么?
n8n 是一个可自托管的工作流自动化引擎——一层”胶水”,把你的 Google Drive、OpenAI 或 Anthropic API 密钥、Salesforce、数据库、支付处理器、CI/CD,以及越来越多代你调用工具和模型的 LLM 智能体节点连接在一起。大约有十万个实例暴露在公网上,eSecurity Planet 的研究人员统计出其中超过 103,000 个至少受一个近期漏洞影响。
n8n 之所以频繁出现在安全公告中,并非因为它写得特别糟糕。而是因为工作流引擎在设计上就是一台把攻击者提供的输入转化为可求值逻辑和对外 API 调用的机器,同时又坐在企业里最敏感的密钥库之上。2026 年上半年,该项目为多个不同的根因发布了修复:一处导致任意文件读取的 content-type 混淆(2026 年 1 月由 Cyera Research Labs 以”Ni8mare”之名披露)、春季被修复又再修复的一系列表达式求值逃逸、一个可通过未经校验的分页参数触及的全局原型污染漏洞,以及 6 月发布的 Python 代码节点沙箱逃逸。漏洞各不相同,爆炸半径却是同一个。
工作原理
这里没有单一的 payload;有的是一再重复的形态。贯穿这些漏洞的模式如下:
n8n 的 RCE 模式(概念性,已删减)
--------------------------------
1. 某个入口接受不可信输入
(表单 webhook、HTTP 请求参数、工作流字段)
2. 该输入抵达一个求值面
- 被加前缀而当作表达式处理的值 -> 双重求值
- 沙箱未能完全约束运行时的代码节点
- 污染共享原型的对象合并路径
3. 求值产生文件读取、配置/密钥泄露或代码执行
4. 攻击者触及之处,即触及密钥库
-> API 令牌、OAuth 授权、数据库连接、实例密钥
1 月的利用链最为轰动,因为它无需登录:一个 content-type 错误的请求被错误的例程处理,使得未认证的调用方能够读取本地文件——包括实例密钥和用户数据库——并据此伪造管理员会话、添加一个命令执行节点。6 月的问题范围较窄:它们通常要求一个拥有工作流编辑权限的已认证账户,从而将其限定在内部滥用或被盗的编辑者会话。但当单个被攻陷的编辑者就能把一个 Python 节点从沙箱逃逸到 task runner 容器,或把原型污染推进到宿主代码执行时,“较窄”是相对的。表达式求值这一系列最具启发性:n8n 会把以特定前缀开头的字段值当作待求值的表达式,而一旦用户数据被求值而非被读取,横亘在它与 RCE 之间的就只剩沙箱——这个沙箱如今已不止一次被攻破。
为何重要
要点不是”n8n 不安全”,而是”编排平台是承重结构,而我们仍在像对待普通 Web 应用那样保护它们”。一个 AI 自动化枢纽像域控制器聚合身份那样聚合权限:你构建的每一个工作流都交给它又一个长期有效的凭据,因此单个 RCE 的价值会随着你添加的每一个集成而增长。正如 Cyera 所言,一个被攻陷的实例意味着的不是损失一个系统,而是把接入其中的一切的钥匙拱手让人。
随着这些平台长出智能体节点,这一点只会更加重要,而非相反。一个 LLM 节点把检索到的文档、工具输出和聊天消息变成又一条不可信的输入通道,喂给同样的求值面和密钥面。间接提示注入与经典的表达式注入终究殊途同归:两者都是”攻击者控制的数据抵达一处被解释执行的地方”。当解释器就架在你的密钥库之上时,严重性的天花板就是整个环境。
防御
- 积极打补丁,并跟踪分支而非某个版本。 n8n 会把修复回移植到多条版本线上(例如 6 月的沙箱逃逸修复落在 1.123.x、2.21.x 和 2.22.x 分支)。锁定你所在分支的最新补丁,并直接关注项目的安全公告,因为发行说明是被有意延迟发布的。
- 把它从公网上撤下来。 暴露实例的数量才是真正的问题。把 n8n 置于经过认证的入口或 VPN 之后;自动化枢纽根本不该对全世界可达。
- 对编辑者实行最小权限。 6 月的多数漏洞都需要工作流编辑权限。限制谁能创建或修改工作流,审计变更历史,并把编辑权限当作敏感授权而非默认设置。
- 约束并隔离代码/表达式节点。 在不需要时通过节点排除配置禁用 Python 和 Form/Code 节点,让 task runner 运行在隔离的网络段中,并施加出站过滤,使沙箱逃逸既无法对外回连也够不到内部服务。
- 轮换并分隔密钥。 假定枢纽被攻陷即等于密钥全失:收窄令牌范围,优先使用短期凭据,对 runner 意外的出站连接告警,并在怀疑滥用时轮换 n8n 可读取的一切。
状态
| 项目 | 参考 | 日期 | 备注 |
|---|---|---|---|
| 无认证文件读取 → RCE(“Ni8mare”) | CVE-2026-21858(Cyera) | 2026-01-07 | CVSS 10.0;content-type 混淆,已在 1.121.0(2025 年 11 月)修复 |
| 表达式求值逃逸 → RCE | CVE-2025-68613 及后续 | 2026(多次修补) | 已认证的工作流编辑者;表达式被当作代码 |
| 原型污染 → RCE | CVE-2026-44789 | 2026-06 | CVSS 9.4;HTTP Request 节点中未校验的分页参数 |
| Python 代码节点沙箱逃逸 | CVE-2026-49444 | 2026-06-23 | CWE-20;已认证编辑者逃逸至 task runner 容器;已在 1.123.48 / 2.21.8 / 2.22.4 修复 |
| 暴露面 | eSecurity Planet | 2026 | 约 103,000 个实例可达且受某个近期漏洞影响 |
诚实的结论是:这些漏洞没有一个是全新的攻击。它们是 Web 软件里最古老的失败模式——解析器混淆、被求值的输入、脆弱的沙箱、原型污染——落在了一套其全部职责就是保管你的密钥并代你行事的基础设施之上。这正是它们一次次登上新闻的原因,也正是自动化枢纽值得你像对待域控制器那样加以戒备的原因。
Sources
- → https://nvd.nist.gov/vuln/detail/CVE-2026-49444
- → https://github.com/n8n-io/n8n/security/advisories/GHSA-9pq8-m8gp-4p53
- → https://community.n8n.io/t/security-advisory-additional-exploits-of-expression-escape-vulnerability-leading-to-rce/257941
- → https://www.cyera.com/research/ni8mare-unauthenticated-remote-code-execution-in-n8n-cve-2026-21858
- → https://www.esecurityplanet.com/threats/103k-n8n-automation-instances-at-risk-from-rce-flaw/