CVE-2026-22037@fastify/express是Fastify框架的Express兼容性中间件插件,为Fastify应用提供完整的Express中间件支持。该插件在4.0.3之前的版本中存在严重的访问控制绕过漏洞,攻击者可以通过URL编码字符绕过中间件路径限制,访问受保护的端点而无需经过预期的中间件验证流程。漏洞源于中间件路径匹配逻辑与底层Fastify路由解码逻辑的不一致。当中间件注册在特定路径前缀(如/admin)下时,攻击者可以使用URL编码字符(如/%61dmin,其中%61代表字符'a')构造请求。中间件引擎无法识别编码后的路径而跳过执行,但Fastify路由会正确解码路径并匹配对应的路由处理器,导致访问控制中间件被绕过。此漏洞可能使攻击者获取未授权访问权限,危及应用程序的安全性。
漏洞的核心问题在于URL路径解码时机的不一致。@fastify/express在注册Express风格中间件时,使用路径前缀匹配来决定哪些请求需要经过中间件处理。然而,其路径匹配逻辑在比较时不进行URL解码,直接将请求路径与注册的中间件路径进行字符串比较。当攻击者发送请求路径为`/%61dmin`(对应`/admin`)时,中间件引擎尝试匹配`/%61dmin`与注册的`/admin`路径,由于字符串不匹配,中间件被跳过。但Fastify的底层路由在接收到请求后,会先对路径进行URL解码,然后再进行路由匹配,因此`/%61dmin`被解码为`/admin`,成功匹配到`/admin`路由处理器。这种解码时机差异导致了安全检查的绕过。攻击者可以通过系统地替换路径中的关键字符为URL编码形式(如%2e代替.,%2f代替/),绕过各种基于路径的访问控制中间件,包括认证、授权、输入验证等。修复版本4.0.3通过统一路径解码时机解决了此问题。