CVE-2025-64765Astro是一个流行的web框架,用于构建现代化的网站和web应用程序。该漏洞存在于Astro 5.15.8之前的版本中,源于Astro框架在处理HTTP请求路径时的规范化不一致问题。具体而言,Astro内部在路由匹配和渲染阶段会对请求路径应用decodeURI()进行规范化处理,但应用程序的中间件在读取路径进行验证时,使用的是context.url.pathname而没有应用相同的decodeURI()规范化。这种实现上的差异创造了一个安全漏洞,允许攻击者通过使用URL编码的路径变体来绕过访问控制验证。攻击者可以构造特殊编码的URL请求,这些请求在路由匹配阶段会被正确处理(因为Astro内部会解码),但在中间件验证阶段却因为未解码而被视为不同的路径,从而可能绕过基于路径的访问控制检查,访问本应受保护的资源。该漏洞无需认证即可利用,对机密性有一定影响。
漏洞的核心在于Astro框架处理URL路径时的双重标准。Astro在internally使用decodeURI()来处理请求路径以确定要渲染的路由,这意味着一旦请求到达路由匹配阶段,编码的路径字符会被正确解码。然而,当开发者在中间件中使用context.url.pathname进行访问控制验证时,获取到的是未经decodeURI()处理的原始编码路径。这导致路径匹配和路径验证使用不同的路径表示形式。攻击者可以利用这一差异,例如尝试访问受保护的/admin路由时,可以使用%2Fadmin(编码的斜杠)或%65%64%6D%69%6E(编码的'admin'字符)来绕过中间件的路径检查,因为中间件会将这些编码路径视为不同的路径字符串,而Astro的路由系统会将其正确解码为/admin进行路由匹配。这种规范化不匹配问题属于CWE-178:大小写敏感/路径规范化问题(CWE-178: Improper Handling of Case Sensitivity/Path Normalization)的范畴。