Next.js 中间件授权绕过漏洞:您是否受影响?
Bogdan Calin | 2025年3月25日
2025年3月21日正式披露的Next.js框架关键漏洞,允许攻击者通过简单的请求头操作绕过中间件安全控制。本文总结了关于CVE-2025-29927的已知信息、缓解措施以及Acunetix如何帮助检测和确认组织风险。
关于CVE-2025-29927需要了解的信息
- 在Next.js(用于构建Web应用程序的最流行React框架之一)中确认存在被标识为CVE-2025-29927的远程授权绕过漏洞
- 该漏洞允许攻击者完全绕过应用程序中的Next.js功能,包括常用的关键安全功能,如认证和授权
- 截至2025年3月24日,Acunetix已有活跃的安全检查来检测和报告可被利用的Next.js版本
- 该漏洞影响以下Next.js版本:
- Next.js 11.1.4至13.5.6(未修补)
- Next.js 14.x早于14.2.25版本
- Next.js 15.x早于15.2.3版本
升级到无漏洞版本是唯一有保证的修复方法。代理级WAF阻止可能暂时有效,但不建议长期使用。
了解Next.js中间件绕过风险
该漏洞允许攻击者通过在请求中包含特制的x-middleware-subrequest头来完全绕过中间件功能。您可以将中间件视为处理链,允许软件模块在HTTP请求到达最终代码处理程序之前检查、修改或重新路由它。这是实现认证等功能的自然位置,一个非常常见的模式是如果没有找到有效的认证cookie,就让中间件重定向到登录页面。
此漏洞特别令人担忧,因为Next.js中间件通常用于关键安全功能,如认证、授权、路径重写和实现安全头。所有这些都可以被攻击者简单地通过使用特殊的HTTP头来轻松绕过。
您是否受Next.js中间件绕过影响?
如果您对以下两个问题的回答都是"是",那么您的应用程序除非已修补,否则易受攻击:
- 您是否依赖Next.js中间件进行安全控制?
- 您是否使用
next start和output: 'standalone'运行自托管的Next.js应用程序?
如果满足以下条件,应用程序尤其面临风险:
- 使用中间件进行认证或授权检查
- 依赖中间件实现安全头,如内容安全策略(CSP),用于定义允许加载资源的限制
- 使用中间件进行路径重写以限制对某些路由的访问
托管在Vercel或Netlify上的应用程序不受影响,因为这些平台已在其边缘层实施了缓解措施。部署为静态导出的应用程序(中间件不执行)也不受影响。
如果您不知道Next.js使用的详细信息或希望独立评估它,运行自动化DAST工具来确认漏洞是一个很好的起点。
Next.js中间件漏洞工作原理
Next.js中间件使用名为x-middleware-subrequest的内部头来防止递归请求触发无限循环。此安全漏洞允许攻击者操纵此头来欺骗Next.js应用程序完全跳过中间件执行。
对于不同版本的Next.js,利用方式略有不同:
- 对于旧版本(12.2之前):
x-middleware-subrequest: pages/_middleware - 对于现代版本:
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware(或如果使用src目录:src/middleware:src/middleware:src/middleware:src/middleware:src/middleware)
当此头存在且具有适当值时,中间件被完全绕过,允许请求到达其原始目的地,而无需任何由中间件应用的安全检查或修改。
Invicti DAST产品如何检测CVE-2025-29927
主动检测逻辑(Acunetix)
Invicti的安全研究团队已为Acunetix引擎开发了检查,以检测您的应用程序是否易受CVE-2025-29927影响。截至2025年3月24日星期一,此检查对所有Acunetix Premium客户生效。
主动检查逐步工作方式:
- 识别Next.js中间件使用:检查首先寻找Next.js中间件的明显迹象,特别是响应体等于location头值的307重定向。此模式是Next.js中间件重定向独有的。
- 验证Next.js框架存在:通过检查响应中的
x-powered-by: Next.js头来确认应用程序使用Next.js。 - 使用绕过payload测试:检测机制根据潜在的Next.js版本尝试不同的绕过payload:
- 对于新版本(13.2.0+):
middleware:middleware:middleware:middleware:middleware(及src变体) - 对于旧版本(12.2之前):
pages/_middleware - 对于中间版本(12.2至13.2.0):
middleware
- 对于新版本(13.2.0+):
- 通过对比验证:为避免误报,测试执行多个验证检查:
- 发送带有潜在绕过头的请求并检查是否返回200 OK
- 发送带有稍微修改头(如
Y-Middleware-Subrequest)的控制请求以确认它仍然重定向(307) - 发送另一个带有无效值的请求以确认正确行为
- 重复成功的绕过以确保一致性
- 确认漏洞:只有在所有验证步骤通过后,漏洞才被确认,降低了误报风险。
通过流量分析的被动检测与动态SCA(Invicti)
通过在安全扫描期间被动监控Web流量而不发出主动请求来检测漏洞。Invicti Enterprise使用此技术与其漏洞数据库一起检测此缺陷。此技术寻找响应中的x-powered-by: Next.js头,确认应用程序使用Next.js。通过评估浏览器JavaScript上下文中的next.version函数以提取精确版本,进一步确认易受攻击版本的存在。
然后将此值与持续更新的已知CVE和网络检测签名数据库进行比较,以确定是否遇到了不安全的Next.js版本。
截至2025年3月25日星期二,此检查对所有Invicti Enterprise、Invicti Standard和Acunetix 360客户生效。
CVE-2025-29927的缓解步骤
立即更新:
- 对于Next.js 15.x:更新到≥ 15.2.3
- 对于Next.js 14.x:更新到≥ 14.2.25
- 对于Next.js 13.x:更新到≥ 13.5.9
- 对于Next.js 12.x:更新到≥ 12.3.5
如果无法立即更新:
- 在边缘/代理级别阻止
x-middleware-subrequest头(不在中间件本身中) - Cloudflare用户可以启用托管WAF规则来阻止此攻击。请注意,在报告第三方认证框架受影响后,Cloudflare已更改此WAF规则为选择加入。我们建议您专注于升级Next.js。
Invicti Security感谢Rachid Allam和Yasser Allam的原始研究和对他们发现的撰写,以及我们的内部团队在单个工作日内为客户提供检查。
我们的安全团队持续监控此情况,并将在有更多信息时更新。