本文探索了 Next.js 中间件中的关键漏洞 CVE-2025-29927,该漏洞允许攻击者绕过授权检查并获取未经授权的访问权限。
2025-03-21 日,在知名的 nvd 官网上发布了一则 Nextjs 框架高危漏洞的信息,这个框架在前端 SSR 场景下的使用率极高,因此笔者决定将本文翻译并且分析给大家。
美国国家漏洞数据库(National Vulnerability Database, NVD) 的官方网站。它由美国国家标准与技术研究院(NIST, National Institute of Standards and Technology)维护,是一个公开的漏洞信息资源库。
原文链接如下:Next.js Middleware Exploit: Deep Dive into CVE-2025-29927 Authorization Bypass - ZeroPath Blog
Next.js中间件,现代Web应用程序的基石,正面临严重的安全威胁。CVE-2025-29927暴露了一个重大的授权绕过漏洞,允许攻击者通过操纵x-middleware-subrequest头来绕过基于中间件的保护。此漏洞对依赖中间件进行身份验证和授权的应用构成了重大威胁,可能会授予未授权访问敏感资源。
受影响的系统和版本:
利用中间件进行授权检查的应用程序,如果没有做好头部验证,就特别容易受到攻击。
核心问题来源于Next.js中间件中x-middleware-subrequest报头的过滤不足。中间件通常会拦截HTTP请求以实施安全策略。然而,攻击者可以通过在请求中注入x-middleware-subrequest报头来利用这一漏洞,从而绕过这些安全检查并获取未授权访问。
攻击面:
GET /protected-route HTTP/1.1
Host: vulnerable-app.com
x-middleware-subrequest: true
中间件逻辑如果无法验证或阻止该标头,会无意中授予访问权限。如果在安全版本上打补丁不可行,则建议阻止包含x-middleware-subrequest标头的外部用户请求到达您的Next.js应用。此漏洞在14.2.25和15.2.3中得到修复。
至此,后续为非翻译内容。
根据 github issue 的一些信息来看,这个漏洞的起因是 Vercel 的开发人员为了防止中间件内部发起的请求可能导致再次进入中间件导致的循环问题而想到的解决方案:在请求头中添加标识 x-middleware-subrequest: true
。
🤣
如果你使用的某些库将授权逻辑封装在中间件中,那么就可能会收到这个漏洞的影响,攻击者可以绕过通过中间件保护的接口和服务。
如果升级困难的话,其实也可以在 Nginx 或者 WAF 这种网关设备直接将带有这个请求头标识的外部请求拦截掉即可。
上周比较忙,周刊稍等片刻~先允许我🕊一会
Bye