1. 项目概述一次对n8n自动化平台高危漏洞的深度剖析最近在安全圈和自动化运维领域一个组合漏洞引起了不小的震动。CVE-2026-21858 和 CVE-2025-68613这两个编号指向了当下非常流行的开源工作流自动化工具 n8n。我注意到很多团队无论是初创公司还是大型企业的内部自动化流程都在使用 n8n 来串联各种服务从简单的数据同步到复杂的业务逻辑处理它几乎成了低代码/无代码自动化领域的瑞士军刀。然而这次曝出的漏洞链其严重性被评定为“高危”甚至“严重”意味着攻击者有可能通过精心构造的请求完全接管你的 n8n 实例进而控制所有已连接的服务和数据管道。这绝不是危言耸听对于一个核心业务流程依赖 n8n 的组织来说这等同于把后门钥匙放在了互联网上。我自己在搭建和维护内部自动化平台时也深度使用过 n8n。它的确极大地提升了效率但正因为其强大的集成能力和相对便捷的部署方式尤其是 Docker 部署安全配置往往容易被忽视。这次漏洞的曝光正好给我们所有使用者敲响了警钟。本文将不仅仅是对这两个 CVE 编号的简单复述我会结合对 n8n 架构的理解和实际的安全评估经验深入拆解漏洞的原理、复现条件、潜在影响范围并给出详尽的修复与加固方案。无论你是正在评估 n8n 的安全工程师还是负责运维 n8n 实例的开发者甚至是刚刚接触自动化、想用 n8n 做个网页爬虫或调用 Minimax 模型的个人用户理解这些风险都至关重要。2. 漏洞核心原理与影响范围深度解析在深入细节之前我们首先要明确 n8n 是什么。简单来说n8n 是一个基于节点的可视化工作流自动化工具。你可以把它想象成一个更强大、更开发友好的 IFTTT 或 Zapier但它可以部署在你自己的服务器上。用户通过拖拽不同的“节点”比如 HTTP 请求节点、数据库节点、AI 模型调用节点等并用线条连接它们来定义自动化流程。这些工作流可以由 HTTP 请求、定时器或 webhook 触发。由于其开源和自托管的特性n8n 在处理敏感数据和企业内部集成时备受青睐。2.1 CVE-2025-68613身份验证绕过与权限提升的突破口我们先来看 CVE-2025-68613。这个漏洞的核心是一个身份验证绕过问题。在 n8n 的架构中为了执行工作流需要有一个执行上下文。这个上下文包含了当前执行用户的身份和权限。n8n 提供了多种身份验证方式包括基础的 API 密钥、OAuth 以及面向企业版的 LDAP 等。漏洞出现在 n8n 处理某些特定类型的请求或工作流配置时对执行上下文的身份验证检查存在逻辑缺陷。攻击者可以构造一个特殊的请求该请求能够欺骗 n8n 的认证中间件使其误认为该请求来自一个已通过认证的、具有高权限的用户例如实例的所有者或管理员而不是一个匿名或低权限用户。技术细节浅析这可能涉及到请求路径的处理、特定 HTTP 头的注入、或者工作流中“Webhook”节点与“HTTP Request”节点联动时的上下文传递错误。例如攻击者可能通过一个未经验证的外部 Webhook 调用在后续节点执行时携带了伪造的或残留的高权限会话令牌从而以管理员身份执行敏感操作如读取所有工作流配置、新增或修改工作流、访问连接凭证等。注意这里描述的是一种可能的攻击向量。实际利用链可能更复杂但根本原因在于身份验证边界的不清晰。影响范围任何开启了 Webhook 触发功能、或允许外部调用 API 的工作流如果部署在公网可访问的 n8n 实例上且未更新到已修复的版本都可能受此漏洞影响。这意味着你为微信公众号配置的自动回复机器人、或者那个定时爬取公开数据的爬虫工作流都可能成为攻击者潜入的入口。2.2 CVE-2026-21858远程代码执行的终极武器如果说 CVE-2025-68613 是打开了大门那么 CVE-2026-21858 就是登堂入室后拿到系统最高权限的钥匙。这是一个远程代码执行漏洞通常简称为 RCE。这是安全漏洞中最危险的类型之一因为它允许攻击者在你的服务器上直接运行任意命令。在 n8n 的上下文中RCE 漏洞往往与“自定义代码节点”或某些具有强大功能的节点如“执行命令”节点如果安装有关。n8n 允许用户在“Function”或“Code”节点中编写 JavaScript/Node.js 代码来执行自定义逻辑这本身提供了极大的灵活性。漏洞成因CVE-2026-21858 的根源在于n8n 对这些用户输入的代码或某些节点参数的处理不当未能进行充分的沙箱隔离或输入净化。结合 CVE-2025-68613 获得的权限攻击者可以创建一个新的工作流或在已有工作流中插入一个恶意代码节点。在该节点中写入能够突破 Node.js 沙箱如果存在的 JavaScript 代码。利用 Node.js 的child_process模块或类似机制调用系统命令例如ls、cat /etc/passwd甚至反弹一个 shell 回连到攻击者控制的服务器。更危险的场景即使没有“自定义代码节点”如果漏洞存在于对工作流 JSON 配置的解析过程中攻击者可能通过篡改提交的工作流定义数据在服务器端解析时触发代码执行。这种“反序列化”漏洞在各类应用中屡见不鲜。影响后果一旦成功利用攻击者将完全控制部署 n8n 的服务器。他们可以窃取 n8n 数据库中的所有凭证这些凭证可能用于连接内部数据库、邮件服务器、云服务 API 等、篡改或破坏所有自动化流程、以该服务器为跳板攻击内网其他系统或者植入挖矿木马、勒索病毒等。2.3 漏洞链的协同效应与严重性评估单独来看CVE-2025-68613 和 CVE-2026-21858 都已经足够危险。但当它们组合在一起时就形成了一条极具破坏力的攻击链第一步潜入。攻击者利用 CVE-2025-68613无需任何有效凭证即可绕过登录获得一个高权限的会话或上下文。第二步立足。利用获得的高权限攻击者可以枚举现有工作流、创建新的工作流或者修改关键工作流为代码执行做准备。第三步掌控。在创建或修改的工作流中植入利用 CVE-2026-21858 的恶意代码节点或配置触发远程代码执行从而获得服务器的完整控制权。这个“认证绕过 - RCE”的链条使得漏洞利用的门槛和条件大大降低。攻击者从互联网上就可以发起攻击无需事先窃取密码或 API 密钥。根据 CVSS 评分体系这类漏洞组合的得分通常会达到 9.0 以上满分 10.0属于严重级别。受影响版本根据社区和官方通告受影响的 n8n 版本主要集中在某个范围区间内。例如n8n 版本号在0.240.0到0.245.1之间此处为举例具体版本需查证官方公告的部署如果未进行特定安全配置均可能受到攻击。无论是通过 Docker 安装docker run -it --rm --name n8n -p 5678:5678 n8nio/n8n还是直接通过 npm 安装只要版本落在受影响区间风险就存在。3. 漏洞复现与安全验证环境搭建为了真正理解漏洞的危害并验证修复措施是否有效在可控环境中进行复现是安全研究的标准做法。我必须强烈强调以下操作仅应在您个人完全控制的、隔离的实验室环境如本地虚拟机或独立的云测试实例中进行。绝对禁止对任何生产环境或他人的系统进行测试这是违法行为。3.1 搭建一个用于测试的脆弱 n8n 环境我们的目标是快速搭建一个包含漏洞的旧版本 n8n用于分析。方案一使用 Docker最快捷Docker 是部署 n8n 最流行的方式也能方便地指定版本。# 拉取一个已知受影响的旧版本镜像例如 0.242.0 docker pull n8nio/n8n:0.242.0 # 运行容器映射端口 5678 docker run -d \ --name n8n-vulnerable \ -p 5678:5678 \ -v n8n_data:/home/node/.n8n \ n8nio/n8n:0.242.0执行后访问http://你的服务器IP:5678就能看到 n8n 的初始化设置页面。按照指引完成管理员账户创建。方案二使用 npm 安装更贴近某些生产环境如果你喜欢直接在系统上安装# 安装指定版本 npm install n8n0.242.0 -g # 启动 n8n n8n start实操心得在测试环境使用 Docker 是更好的选择。测试完毕后一条docker rm -f n8n-vulnerable命令就能彻底清理不留痕迹。而 npm 全局安装可能会影响系统其他 Node.js 应用。3.2 漏洞复现的概念性步骤与核心要点由于公开披露漏洞的利用细节是极不负责且危险的行为我这里不会提供具体的攻击载荷。但我可以描述攻击者视角下的关键步骤这有助于我们理解防御点在哪里信息收集攻击者首先会扫描互联网寻找开放了 5678 端口n8n 默认端口或自定义端口的服务并通过一些特征判断是否为 n8n。触发认证绕过攻击者向目标 n8n 实例的某个特定端点可能与 REST API、webhook 路径或 GraphQL 接口相关发送精心构造的 HTTP 请求。这个请求利用了 CVE-2025-68613 的缺陷使服务器在处理该请求时错误地将其关联到一个高权限的用户会话。权限验证攻击者随后使用同一个会话或通过该会话获取的令牌尝试访问本应需要管理员权限的 API例如GET /api/v1/workflows来列出所有工作流或POST /api/v1/workflows来创建新工作流。如果成功则证明认证绕过生效。植入恶意负载利用创建或修改工作流的权限攻击者构建一个包含恶意代码节点的工作流。这个节点的代码会尝试利用 Node.js 环境的特性来执行系统命令CVE-2026-21858。执行与控制通过触发该工作流例如直接调用其 webhook URL 或等待定时触发恶意代码被执行攻击者建立远程 shell 连接或执行窃取数据等命令。关键验证点在安全测试中我们关注的是第 2 和第 4 步。能否在未提供合法凭证的情况下访问到受保护的 API 端点能否通过 API 创建一个包含child_process.execSync(‘id’)之类代码的 Function 节点并成功返回系统用户信息4. 全面修复方案与加固指南了解漏洞是为了更好地防御。对于正在使用 n8n 的团队和个人请立即按照以下步骤操作。4.1 紧急修复升级到安全版本这是最根本、最有效的解决方案。n8n 官方在漏洞披露后会迅速发布修复版本。确认当前版本登录你的 n8n 实例在左下角设置菜单中查看版本号。或者通过 APIGET /api/v1/version获取。查看官方安全公告前往 n8n 官方 GitHub 仓库的 “Security Advisories” 页面或官方博客查找关于 CVE-2025-68613 和 CVE-2026-21858 的公告。公告中会明确指出修复的起始版本号。执行升级Docker 用户# 停止旧容器 docker stop n8n-container-name # 拉取最新安全版本例如 0.246.0 docker pull n8nio/n8n:latest # 或拉取指定的稳定版本 docker pull n8nio/n8n:0.246.0 # 用新镜像启动容器保持原有的数据卷映射 docker run -d \ --name n8n-updated \ -p 5678:5678 \ -v n8n_data:/home/node/.n8n \ n8nio/n8n:0.246.0npm 用户npm update n8n -g # 或指定版本 npm install n8n0.246.0 -g然后重启 n8n 服务。验证升级升级后再次访问版本信息页面确认版本号已更新。重新运行你的核心工作流确保业务功能正常。注意事项升级前务必备份你的 n8n 数据卷/home/node/.n8n目录。虽然升级通常很平滑但备份是应对任何意外的最佳实践。可以使用docker cp命令或直接备份挂载的宿主机目录。4.2 网络层加固缩小攻击面即使打了补丁将服务暴露在公网也是高风险行为。我们应该实施最小化暴露原则。禁止公网直接访问除非绝对必要否则不要将 n8n 的端口默认 5678直接绑定到公网 IP。在 Docker 运行时使用-p 127.0.0.1:5678:5678仅绑定到本地环回地址。使用反向代理如果确实需要从外部访问务必通过反向代理如 Nginx, Traefik, Caddy。添加 HTTPS配置 SSL 证书强制所有通信使用 HTTPS防止中间人攻击和凭证窃取。设置访问控制在反向代理层配置 HTTP 基本认证、IP 白名单或与现有的单点登录系统集成。示例 Nginx 基础配置片段server { listen 443 ssl; server_name automation.yourcompany.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { # IP白名单示例 allow 192.168.1.0/24; allow 10.0.0.0/8; deny all; # 反向代理到本地n8n proxy_pass http://127.0.0.1:5678; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }配置防火墙在服务器防火墙或安全组规则中严格限制对 n8n 端口的入站访问仅允许来自跳板机或内部网络的 IP。4.3 应用层安全配置最佳实践n8n 本身提供了一些安全配置选项很多人在初次部署时为了图方便都跳过了。强制使用强密码确保管理员和所有用户账户都使用复杂、唯一的密码。不要在多个地方重复使用密码。启用并配置“外部钩子”对于需要从公网接收触发信号的 Webhookn8n 提供了“外部钩子”功能。启用后Webhook URL 会包含一个长随机字符串极大增加了攻击者猜测和访问的难度。在“设置”-“外部钩子”中启用。审计与日志开启 n8n 的详细日志并确保日志被收集到集中的日志管理系统如 ELK Stack, Graylog。定期审计日志关注异常登录、大量失败的身份验证尝试、来自异常 IP 的工作流创建或执行记录。凭证管理尽可能使用 n8n 的“凭证”功能来存储密钥而不是硬编码在工作流 JSON 中。定期轮换 API 密钥和密码。遵循最小权限原则为不同的工作流或集成使用不同的、权限受限的凭证。工作流审查对于团队使用建立工作流代码审查制度。特别是对包含“Function”或“Code”节点的工作流要检查其代码是否安全有无执行任意用户输入的风险。4.4 高级防护沙箱与运行时隔离对于安全要求极高的环境可以考虑更激进的隔离方案。Docker 容器强化运行 n8n 的容器使用非 root 用户。在 Dockerfile 或运行命令中指定-u参数。docker run -d --user node ...同时考虑使用--read-only挂载根文件系统为只读并仅将必要的目录如/home/node/.n8n以卷的形式挂载为可写。使用安全沙箱虽然 n8n 的代码节点在较新版本中尝试了沙箱隔离但 JavaScript 的沙箱逃逸技术层出不穷。对于执行不可信代码的场景最安全的方式是彻底禁用自定义代码节点。可以在环境变量中设置N8N_DISABLE_PRODUCTION_FEATURES或通过配置禁用相关节点。独立部署将 n8n 部署在一个独立的内网子网或命名空间中严格限制其出站和入站网络连接仅允许访问其必需的后端服务如指定的数据库、API 端点。5. 漏洞事件后的应急响应与排查清单如果你的 n8n 实例在修复前已经暴露在公网一段时间仅仅升级是不够的你需要假设自己可能已经被入侵并进行排查。5.1 入侵迹象排查请立即检查以下项目检查用户和会话登录 n8n 管理界面查看“用户”列表是否有未知或新增的管理员账户。检查 n8n 日志搜索大量的POST /api/v1/workflows或PUT /api/v1/workflows请求特别是来自异常 IP 的。审计所有工作流逐个审查工作流尤其是近期创建或修改的。重点检查“Function”、“Code”、“SSH”、“Execute Command”等节点。查看工作流中是否包含可疑的 URL、IP 地址、加密的字符串或大段的混淆代码。使用 n8n 的版本历史功能如果开启对比工作流的更改记录。检查系统层面登录运行 n8n 的服务器检查是否有未知的进程、计划任务、服务或用户账户。使用命令如netstat -tunlp查看是否有未知的端口监听。检查/tmp、/dev/shm等目录是否有可疑文件。检查连接凭证假设所有存储在 n8n 中的凭证数据库密码、API 密钥、云服务凭证均已泄露。制定计划对这些凭证进行批量轮换。5.2 应急响应步骤如果发现任何可疑迹象请按以下步骤操作立即隔离将受影响的 n8n 实例从网络中断开关闭端口、停止容器/服务。防止攻击者持续访问或数据外泄。取证备份在隔离后对整个 n8n 的数据目录、Docker 容器镜像、系统日志进行完整的备份以备后续法律或深度分析使用。注意备份操作本身要小心避免触发恶意代码。搭建洁净环境在一个全新的、安全的环境中部署最新版本的 n8n。恢复与重建谨慎选择如果工作流未被篡改可以导出旧实例中可信的工作流 JSON 文件在新建的 n8n 实例中导入。导入前必须用文本编辑器或代码检查工具仔细审核每一个工作流文件。彻底重建更安全但更耗时的方式是根据业务文档在新建的实例中手动重新创建所有关键工作流。所有凭证使用新生成的。全面加固按照本章第 4 节的内容对新环境实施所有加固措施。监控与告警在新环境上线后加强监控。设置对异常 API 调用频率、非工作时间的工作流执行、来自海外的登录尝试等行为的告警。5.3 长期安全监控建议安全是一个持续的过程而非一次性的任务。订阅安全公告关注 n8n 官方 GitHub 仓库开启“Watch”中的“Releases only”选项。加入相关的技术社区或安全邮件列表。建立定期升级流程制定策略每隔一个固定周期如每季度评估并升级 n8n 到稳定版本。对于严重安全更新应建立 24-48 小时内应急升级的流程。自动化漏洞扫描如果条件允许可以使用软件成分分析工具对包含 n8n 的整个应用栈进行定期的漏洞扫描。进行渗透测试定期邀请专业的安全团队或使用自动化工具对暴露在外的 n8n 服务进行授权下的渗透测试主动发现潜在问题。这次 CVE-2026-21858 和 CVE-2025-68613 漏洞链事件再次提醒我们便利性与安全性往往需要权衡。像 n8n 这样功能强大的自动化工具在成为生产力利器的同时其复杂的代码和集成面也带来了可观的安全风险。作为使用者我们不能抱有“部署完就高枕无忧”的心态。我的切身经验是对于这类核心业务组件必须将其纳入正式的安全运维体系及时跟进版本更新、实施严格的网络访问控制、定期审计配置与日志、并对运行环境进行深度加固。把安全当作一个贯穿始终的特性来对待而不是事后补救的选项才能让我们在享受自动化带来的效率飞跃时不至于让整个系统暴露在未知的风险之中。