深入解析Next.js中间件授权绕过漏洞(CVE-2025-29927)

本文详细分析了Next.js框架中的高危漏洞CVE-2025-29927,该漏洞允许攻击者通过操纵HTTP头绕过中间件安全控制。文章涵盖受影响版本、漏洞原理、检测方法和缓解措施,为开发者和安全团队提供实用指南。

Next.js中间件授权绕过漏洞(CVE-2025-29927)

Bogdan Calin | 2025年3月25日

Next.js框架于2025年3月21日正式披露了一个严重漏洞,攻击者可通过简单的头部操作绕过中间件安全控制。本文将总结关于CVE-2025-29927的已知信息、如何缓解该漏洞,以及Acunetix如何帮助您检测和确认组织的风险。

关于CVE-2025-29927需要了解的关键信息

  • 被标识为CVE-2025-29927的远程授权绕过漏洞已在Next.js中得到确认,Next.js是用于构建Web应用程序的最流行的React框架之一
  • 该漏洞允许攻击者完全绕过应用程序中的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中间件绕过攻击?

如果您对以下两个问题的回答都是"是",则您的应用程序在未打补丁的情况下易受攻击:

  1. 您是否依赖Next.js中间件进行安全控制?
  2. 您是否使用next startoutput: 'standalone'运行自托管的Next.js应用程序?

如果满足以下条件,应用程序尤其面临风险:

  • 您使用中间件进行身份验证或授权检查
  • 您依赖中间件实施安全头,如内容安全策略(CSP),用于定义资源加载位置的限制
  • 您使用中间件进行路径重写以限制对某些路由的访问

托管在Vercel或Netlify上的应用程序不受影响,因为这些平台已在其边缘层实施了缓解措施。部署为静态导出的应用程序(不执行中间件)也不受影响。

如果您不了解Next.js使用的详细信息或希望独立评估,运行自动化DAST工具来确认漏洞是一个很好的起点。

Next.js中间件漏洞的工作原理

Next.js中间件使用名为x-middleware-subrequest的内部头来防止递归请求触发无限循环。此安全漏洞允许攻击者操纵此头,诱骗Next.js应用程序完全跳过中间件执行。

对于不同版本的Next.js,漏洞利用方式略有不同:

  • 对于旧版本(12.2之前):
    1
    
    x-middleware-subrequest: pages/_middleware
    
  • 对于现代版本:
    1
    
    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客户上线。

以下是主动检查逐步工作原理:

  1. 识别Next.js中间件使用情况:检查首先寻找Next.js中间件的明显迹象,特别是响应体等于位置头值的307重定向。此模式是Next.js中间件重定向所独有的。
  2. 确认Next.js框架存在:通过检查响应中的x-powered-by: Next.js头来确认应用程序正在使用Next.js。
  3. 使用绕过负载进行测试:检测机制根据潜在的Next.js版本尝试不同的绕过负载:
    • 对于较新版本(13.2.0+):middleware:middleware:middleware:middleware:middleware(及其src变体)
    • 对于旧版本(12.2之前):pages/_middleware
    • 对于中间版本(12.2至13.2.0):middleware
  4. 通过对比进行验证:为避免误报,测试执行多个验证检查:
    • 发送带有潜在绕过头的请求并检查是否返回200 OK。
    • 发送带有稍微修改的头部(如Y-Middleware-Subrequest)的控制请求,以确认它仍然重定向(307)。
    • 发送另一个带有无效值的请求以确认行为正确。
    • 重复成功的绕过以确保一致性。
  5. 确认漏洞:只有在所有验证步骤通过后,漏洞才被确认,从而降低误报风险。

通过动态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的原始研究和发现报告,以及我们的内部团队表示致谢,他们在单个工作日内为客户推出了检查功能。

我们的安全团队正在持续监控此情况,并将在获得更多信息时更新。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计