安全研究/和中谈安全/CVE-2023-27564 漏洞复现与分析报告
CVE-2023-27564 漏洞复现与分析报告
2026-05-06 09:57分享

一、前言

`CVE-2023-27564` 是 Synacktiv 在 n8n `<= 0.215.2` 中披露的认证绕过漏洞。该问题单独看是一个中间件放行条件过宽的逻辑缺陷,若进一步结合 `CVE-2023-27562` 中的文件读取接口,则可以将“已认证文件读取”升级为“未认证任意文件读取”。

也就是说,本漏洞的危险性不仅在于匿名访问保护失效,更在于它能与路径穿越漏洞串联,直接形成完整的未授权读取利用链。

二、版本 diff

虽然现有材料没有提供完整补丁对比,但从漏洞描述可以归纳出修复重点:

  1. 鉴权中间件不应以“URL 包含某个字符串”作为匿名放行条件。
  2. 资源豁免策略应当基于明确路由、文件后缀和固定目录,而不是宽泛的 `includes('.svg')` 判断。
  3. 对匿名可访问的静态资源接口与业务接口应进行严格拆分。

漏洞核心位于 `packages/cli/src/middlewares/auth.ts` 中的鉴权逻辑。

三、复现环境

复现该漏洞建议沿用前一个漏洞的环境:

  1. 目标版本:n8n `0.215.2`
  2. 部署方式:Docker
  3. 认证状态:无需登录
  4. 依赖条件:建议同时保留 `CVE-2023-27562` 的第二个读取点 `/rest/data/:path`

由于该漏洞本质是鉴权绕过,因此重点不在数据库类型,而在于目标实例是否仍使用存在缺陷的认证中间件。

四、漏洞分析

4.1 鉴权逻辑缺陷

根据公告,n8n 的认证中间件存在如下判断逻辑:

app.use(async (req, res, next) => {

  if (

    req.method === 'OPTIONS' ||

    req.url.startsWith('/fonts/') ||

    req.url.includes('.svg') ||

    req.url.startsWith(`/${restEndpoint}/settings`)

  ) {

    return next();

  }

});

问题就在于:

req.url.includes('.svg')

这段逻辑的含义不是“只允许访问某个固定的 SVG 静态文件”,而是“只要请求 URL 中包含 `.svg` 字符串,就直接跳过认证”。攻击者因此可以在任意目标接口后面伪造一个包含 `.svg` 的路径片段,从而获得匿名访问权限。

4.2 与路径穿越联动形成未授权文件读取

Synacktiv 给出的利用方式,是将该认证绕过与 `/rest/data/:path` 路径穿越漏洞进行拼接。

`/rest/data/:path` 会按冒号拆分参数:

const [mode, id] = fileId.split(':');

只取前两个值作为 `mode` 和 `id`。因此攻击者可以构造如下请求:

GET /rest/data/filesystem:../../../../../../../../../etc/passwd:.svg HTTP/1.1

Host: target

这里利用了两个特性:

  1. URL 中包含 `.svg`,可以绕过认证中间件。
  2. 参数按 `:` 分割后,只会使用前两个字段,即:
  • `mode = filesystem`
  • `id = ../../../../../../../../../etc/passwd`

尾部的 `:.svg` 虽然参与了路由字符串,但不会影响最终文件路径构造,于是服务端仍然会去读取 `/etc/passwd`。

4.3 复现步骤

  1. 部署 n8n `0.215.2`。
  2. 保证目标实例未启用额外的反向代理访问控制。
  3. 直接向目标发送匿名请求:

GET /rest/data/filesystem:../../../../../../../../../etc/passwd:.svg HTTP/1.1

Host: target

  1. 若漏洞存在,服务端将返回目标文件内容,而不会要求任何登录态或 Cookie。

4.4 漏洞本质

这个漏洞本质上是一个“鉴权豁免规则过宽”问题。开发者的原始意图可能是放行某些前端静态资源,但实际实现却退化为简单的子串匹配,导致任何包含 `.svg` 的路径都可以跳过认证。

在安全设计上,鉴权绕过往往不一定直接导致高危结果,但一旦与另一个存在文件读取、命令执行或敏感信息泄露的问题组合,就会迅速升级为严重漏洞。本案例正是这种典型组合利用。

4.5 影响分析

结合 `CVE-2023-27562` 后,攻击者无需账号即可:

  1. 读取系统敏感文件,如 `/etc/passwd`。
  2. 读取 SQLite 数据库文件,尝试离线破解密码哈希。
  3. 提取密钥、邀请链接、密码重置信息等敏感数据。
  4. 为后续接管 n8n 实例提供条件。

五、总结

`CVE-2023-27564` 单独看是一个逻辑型认证绕过,但其价值在于能与文件读取漏洞稳定串联,直接把攻击门槛从“需要登录”降到“完全未授权”。这说明在 Web 系统中,任何“匿名放行规则”都应尽量采用最小权限设计,避免使用宽泛的字符串匹配。

从修复思路上看,除了收紧 `.svg` 放行逻辑外,还应同步梳理所有匿名接口的边界,并对底层危险功能如文件读取接口增加独立权限校验,避免单点鉴权失守后造成链式突破。