`CVE-2023-27564` 是 Synacktiv 在 n8n `<= 0.215.2` 中披露的认证绕过漏洞。该问题单独看是一个中间件放行条件过宽的逻辑缺陷,若进一步结合 `CVE-2023-27562` 中的文件读取接口,则可以将“已认证文件读取”升级为“未认证任意文件读取”。
也就是说,本漏洞的危险性不仅在于匿名访问保护失效,更在于它能与路径穿越漏洞串联,直接形成完整的未授权读取利用链。

虽然现有材料没有提供完整补丁对比,但从漏洞描述可以归纳出修复重点:
漏洞核心位于 `packages/cli/src/middlewares/auth.ts` 中的鉴权逻辑。
复现该漏洞建议沿用前一个漏洞的环境:
由于该漏洞本质是鉴权绕过,因此重点不在数据库类型,而在于目标实例是否仍使用存在缺陷的认证中间件。
根据公告,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` 的路径片段,从而获得匿名访问权限。
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
这里利用了两个特性:
尾部的 `:.svg` 虽然参与了路由字符串,但不会影响最终文件路径构造,于是服务端仍然会去读取 `/etc/passwd`。
GET /rest/data/filesystem:../../../../../../../../../etc/passwd:.svg HTTP/1.1
Host: target
这个漏洞本质上是一个“鉴权豁免规则过宽”问题。开发者的原始意图可能是放行某些前端静态资源,但实际实现却退化为简单的子串匹配,导致任何包含 `.svg` 的路径都可以跳过认证。
在安全设计上,鉴权绕过往往不一定直接导致高危结果,但一旦与另一个存在文件读取、命令执行或敏感信息泄露的问题组合,就会迅速升级为严重漏洞。本案例正是这种典型组合利用。
结合 `CVE-2023-27562` 后,攻击者无需账号即可:
`CVE-2023-27564` 单独看是一个逻辑型认证绕过,但其价值在于能与文件读取漏洞稳定串联,直接把攻击门槛从“需要登录”降到“完全未授权”。这说明在 Web 系统中,任何“匿名放行规则”都应尽量采用最小权限设计,避免使用宽泛的字符串匹配。
从修复思路上看,除了收紧 `.svg` 放行逻辑外,还应同步梳理所有匿名接口的边界,并对底层危险功能如文件读取接口增加独立权限校验,避免单点鉴权失守后造成链式突破。