n8n: CVE-2025-68613
好的,我现在需要帮用户总结一篇文章的内容,控制在100字以内,并且不需要特定的开头。首先,我得仔细阅读用户提供的文章内容。 文章主要讲的是n8n这个开源工作流程自动化平台的一个关键漏洞。漏洞存在于表达式求值系统中,允许攻击者执行任意代码,导致严重的安全风险。文章还详细介绍了漏洞的技术细节、利用方法以及修复建议。 接下来,我需要提取关键信息:n8n的功能、漏洞类型、影响、技术细节和修复版本。然后,用简洁的语言把这些内容浓缩到100字以内。 可能的结构是先介绍n8n,然后说明漏洞及其影响,最后提到修复措施。这样既全面又简洁。 最后检查一下字数是否符合要求,并确保没有使用任何不必要的术语或复杂的句子结构。 </think> 文章介绍了开源工作流程自动化平台n8n中的一个关键远程代码执行(RCE)漏洞。该漏洞存在于其表达式求值系统中,允许经过身份验证的攻击者执行任意JavaScript代码,可能导致数据泄露或系统被攻陷。文章详细分析了漏洞的技术细节,并提供了修复建议。 2025-12-29 11:14:57 Author: www.freebuf.com(查看原文) 阅读量:0 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

介绍

n8n 是一个开源工作流程自动化平台,旨在通过可视化方式连接应用程序和服务,实现任务自动化。用户可以构建由节点组成的工作流程,每个节点代表一个操作,例如发出 API 请求、处理数据或发送电子邮件。n8n 经常用于自动化重复性操作任务以及集成安全工具和 SaaS 平台。以下是一个简单的示例工作流程,它允许我们安排向 NVD CVE API 发送 HTTP GET 请求,使用 JavaScript 格式化输出,然后通过电子邮件和 Slack 频道发送报告。

1767004700_69525a1c5b7a4bba997b7.png!small?1767004703976

n8n 平台通常以三种主要配置进行部署:

自托管实例:组织将 n8n 部署在本地或私有云环境中,以实现完全控制和数据主权
云托管 (n8n.cloud):提供共享基础设施的托管服务
内部自动化工具:部署在企业网络内部,用于自动化内部和外部系统之间的业务流程

0.211.0 至 1.120.3 版本包含工作流表达式评估系统中的一个关键远程代码执行 (RCE) 漏洞。如果被利用,此漏洞允许经过身份验证的攻击者执行系统级命令,可能导致数据泄露、服务中断或系统完全被攻陷,所有操作都将以 n8n 进程的权限执行。

我们将讨论此漏洞的技术细节,演示如何通过 Web 浏览器进行漏洞利用,并探讨检测策略。

此漏洞已在 1.120.4、1.121.1 和 1.122.0 版本中修复。为确保系统安全,强烈建议更新到这些已修复的版本之一。

技术背景

在深入探讨漏洞利用之前,我们先来回顾一下 n8n。它基于 Node.js 构建,使用 JavaScript 来实现平台内部逻辑和用户工作流程逻辑。其架构包括:

  • 工作流执行引擎:负责协调基于节点的工作流执行的核心计算组件
  • 表达式求值系统:处理用双花括号括起来的动态表达式,{{ }}​这些表达式在工作流执行期间会被求值为 JavaScript 代码。
  • 代码节点:允许用户编写自定义 JavaScript 或 Python 代码作为工作流步骤,从而扩展平台功能
  • 400 多个原生集成:预构建的连接器,可连接到构成工作流节点的各种 API 和服务。

该漏洞存在于 n8n 的工作流表达式求值系统中。在工作流配置过程中,已认证用户提供的表达式会在不安全的执行环境中进行求值。核心安全缺陷是一个表达式注入漏洞,它允许已认证的攻击者以 n8n 进程的权限执行任意 JavaScript 代码。具体而言:

  • n8n 将用双花括号括起来的用户输入{{ }}​作为 JavaScript 代码进行处理,而没有进行足够的沙箱或输入验证。
  • 表达式求值器缺乏适当的上下文隔离,使得攻击者能够逃逸预期的求值沙箱。
  • 身份验证无法有效防止此漏洞,因为任何经过身份验证的用户都可以利用它。

请考虑来自wioui的以下工作有效载荷。

{{ (function(){ return this.process.mainModule.require('child_process').execSync('id').toString() })() }}

在这些层层叠叠的花括号内,你可以看到…… (function(){ ... })()​。这种模式会创建一个匿名函数并立即执行。攻击者会尝试在保持执行上下文不变的情况下封装一些复杂的逻辑。为了便于阅读,匿名函数如下所示:

function () {
return this.process.mainModule.require('child_process').execSync('id').toString()
}

让我们仔细看看,以便更好地理解这个漏洞。当函数 () { ... } 被调用时,它开始执行 return 语句。如果您不熟悉函数,return 语句会返回一个值,这需要对它后面的表达式进行求值。在这种情况下,求值从 this 开始。

该漏洞利用了 this.process.mainModule。让我们来分解一下:

this 指的是 Node.js 执行上下文中的全局对象
process 是一个 Node.js 全局对象,提供对系统进程的访问
mainModule 引用 Node.js 应用程序的根模块

此方法旨在绕过典型的 JavaScript 沙箱限制,通过访问 Node.js 内部机制(根模块),而这些机制通常对用户表达式是不可用的。需要注意的是,如果沙箱机制配置得当,它应该能够将表达式执行上下文与 Node.js 运行时环境隔离开来。

现在已经访问到了 mainModule 对象,我们可以看到 .require('child_process')。这里使用了 require(),即 Node.js 的模块加载函数,来加载 child_process 模块,这是一个用于执行系统命令的 Node.js 核心模块。需要注意的是,用户表达式不应该

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/vuls/464274.html
如有侵权请联系:admin#unsafe.sh