前言 最近n8n的漏洞挺多的,恰好看到https://xz.aliyun.com/news/91090这篇25年的Git 节点 RCE 漏洞分析,一查发现还有个CVE-2026-21877,于是来了兴趣 1. 漏洞概述 N8N 是一个开源的工作流程自动化平台。在0.121.2及以下版本中,经过认证的攻击者可能能够使用n8n服务执行恶意代码。这可能导致全面入侵,并可能影响自托管和n8n云实例。这个问题在1.121.3版本中修复了。


2. 漏洞分析
在受影响的版本中,Git节点的文件写入功能存在根本性的路径验证缺陷:

Plain Text

复制代码
const repositoryPath = this.getNodeParameter('repositoryPath', itemIndex, '') as string;

这里直接获取了用户完全控制的路径,且没有任何安全检查

Plain Text

复制代码
if (operation === 'clone') {
try {
await access(repositoryPath);
} catch (error) {
await mkdir(repositoryPath);
}
}

根据用户输入的路径创建目录,从而创建恶意目录结构,直接将我们的文件不用经过检验上传至.git/hook/目录下执行 该漏洞最精妙之处在于它与n8n早期安全加固措施的对抗。在2025年,n8n曾修复一个类似的Git节点漏洞(CVE-2025-65964),并在1.119.2版本中引入了默认禁用Git钩子执行的防护机制。 修复原理

然而,CVE-2026-21877完全绕过了这一防护。原因在于: Git钩子执行优先级:Git在执行钩子时,会优先检查仓库本地.git/hooks/目录,然后才会考虑core.hooksPath配置。直接写入.git/hooks/的脚本具有最高优先级。 配置作用域差异core.hooksPath配置通常作用于全局或系统级,但Git在仓库本地执行操作时,对.git/hooks/的检查是硬编码行为,不受该配置影响。 信任边界差异core.hooksPath机制允许重定向钩子位置,是Git的安全特性之一。但攻击者直接写入.git/hooks/,这是Git最原始的钩子机制,享有最高级别的信任。
5. 修复方案分析 5.1 官方修复(n8n 1.121.3)

在Git节点操作前新增调用,利用现有通用函数检查仓库路径,若越权则阻断,以此修复漏洞。
参考: https://github.com/Ashwesker/Ashwesker-CVE-2026-21877 https://www.venusgroup.com.cn/new_type/aqtg/20260108/29069.html
https://xz.aliyun.com/news/91090

标签: 远程代码执行, n8n, 漏洞分析, CVE-2026-21877, Git节点

添加新评论