NextJS CVE-2025-29927 安全漏洞

NextJS CVE-2025-29927 安全漏洞

CVE-2025-29927 是一个存在于 Next.js 框架中的关键安全漏洞。该漏洞允许攻击者通过伪造或篡改 x-middleware-subrequest 请求头,绕过中间件(Middleware)的安全检查,从而访问到原本受保护的路由或 API,进而导致授权绕过(Authorization Bypass)以及潜在的更深层次安全风险。本篇文章将对漏洞成因、受影响范围、修复版本及临时缓解方案进行详细说明。


一、漏洞概述

1. 漏洞原理

Next.js 在内部通过一个名为 x-middleware-subrequest 的请求头,来防止自身中间件的递归调用或无限循环。但研究者发现,攻击者可以在外部请求中人为加上 此请求头,并使用特定格式,使 Next.js 中间件以为 这是一个"子请求",从而跳过原本应执行的认证或安全检查。

2. 漏洞影响

2.1. 授权绕过 (Auth Bypass):

应用依赖中间件进行的登录态或权限校验会被忽略,攻击者可能在未登录状态下访问需要管理员或高级权限的 API/页面。

2.2. 潜在安全头绕过:

如果应用通过 Middleware 注入安全头(CSP、HSTS 等),也可能被绕过,导致浏览器端的防护失效。

2.3. 改写路径 (Rewrite) 失效:

某些场景中,Next.js 中间件会根据路径做改写或重定向。攻击者可利用漏洞跳过改写,访问内部路由或私有接口。


二、受影响范围

1. 影响版本

根据官方与社区披露,受影响的版本范围及对应修复版本如下:

  • Next.js 11.1.4 ~ 13.5.6:未修补版本
  • Next.js 14.x:在 14.2.25 之前均受影响
  • Next.js 15.x:在 15.2.3 之前均受影响

2. 修复版本

最新修复版本:

  • 15.2.3 (针对 15.x)
  • 14.2.25 (针对 14.x)
  • 13.5.9 (针对 13.x)
  • 12.3.5 (针对 12.x)

其中,Next.js 13 和 12 的对应修补版也已发布:13.5.9、12.3.5。请确认你的项目版本,并及时更新到安全版本或更高版本。

3. 受影响部署方式

  • 自托管 (self-hosted) Next.js:使用 next start 运行、启用了 Middleware 的应用会在请求进入时依赖该中间件进行认证/安全检查,因此容易受影响。
  • Standalone 输出:同样受影响。

4. 不受影响场景

  • 托管在 Vercel:官方托管环境默认会对 x-middleware-subrequest 有额外处理,通常不会受此漏洞影响。
  • Netlify 或纯静态部署(next export):因为 Middleware 不会被执行或无条件禁用,所以不受本漏洞影响。
  • Cloudflare Managed WAF:若打开了相关规则可阻拦可疑请求头,也可能减轻风险。
  • 作为静态导出部署的应用程序(未执行中间件)

三、漏洞成因

Next.js 在处理用户请求时,会检查 x-middleware-subrequest 以识别内部子请求,防止中间件递归调用。但在受影响版本中,对该头的来源与拼接方式缺乏严格校验 ,导致外部恶意请求也能带上此头,从而骗过 Next.js 判断逻辑,完全绕过中间件安全机制。

在老版本(如 12.2 以下)时,攻击者可使用:

html 复制代码
x-middleware-subrequest: pages/_middleware

在较新版本中(如 13.x、14.x、15.x),需使用更复杂的字符串,例如:

html 复制代码
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

html 复制代码
x-middleware-subrequest: src/middleware:middleware:middleware

来触发绕过行为。


四、漏洞利用示例

假设应用在 /middleware.ts 中实施了以下逻辑,用于验证用户是否登录,若未登录则阻止访问 /admin 路由:

typescript 复制代码
export function middleware(req: NextRequest) {
  const token = req.cookies.get('session');
  if (!token && req.nextUrl.pathname.startsWith('/admin')) {
    return NextResponse.redirect('/login');
  }
  return NextResponse.next();
}

攻击者若在请求头里附加伪造的:

html 复制代码
GET /admin/dashboard HTTP/1.1
Host: example.com
x-middleware-subrequest: middleware:middleware:middleware

可能让 Next.js 判定该请求是内部中间件调用,从而直接跳过此验证,成功访问 /admin/dashboard。


五、修复与缓解

1. 升级到安全版本

最直接与安全 的方案是升级到官方发布的带安全补丁的版本:

  • 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

2. 临时措施:拦截 x-middleware-subrequest 在 Edge/Proxy 层

如果在短期内无法进行升级,可在反向代理或负载均衡层(如 Nginx、Cloudflare、AWS ALB)直接丢弃或重写来自外部的 x-middleware-subrequest,确保只有真正的内部请求头能通过。示例 Nginx 配置:

html 复制代码
proxy_set_header x-middleware-subrequest "";

或使用 ACL 拦截任何外部请求带有该头的情况。但要注意,这种做法需要在Next.js 中间件以外的地方实现,否则也可能被绕过。

3. 二次校验

如果你在中间件中做了授权校验,也可以在 API 路由或页面层再次检测权限,避免因为单点绕过导致严重后果。


六、时间线 (示例)

  • 2025-02-27:研究人员通过 GitHub 私有漏洞通道向 Next.js 官方报告
  • 2025-03-14:官方开始确认和修复
  • 2025-03-17 ~ 03-18:相继发布修复版本 14.2.25, 15.2.3
  • 2025-03-21:正式公开安全公告,并分配 CVE-2025-29927
  • 2025-03-22~03-23:向后续的 13.x、12.x 回滚补丁 (13.5.9, 12.3.5)

七、总结

Next.js 早在 2016 年就开始发布安全通告;随着使用者增多,官方也不断完善漏洞收集、补丁发布及社区通知流程。本次 CVE-2025-29927 也再次提醒:关键安全逻辑不要只依赖前置中间件,需多层校验;更要及时跟进框架升级和安全通报,避免类似漏洞造成严重影响。

若你的项目尚无法升级或缺乏安全策略,务必尽快采取临时措施(如阻止该头外部传入),并在第一时间完成更新。对于依赖 Next.js 进行权限校验或路径重写的团队,强烈建议定期进行安全审计和渗透测试,以防范后续类似风险。


参考链接

  1. Next.js 官方安全公告: CVE-2025-29927
  2. ZeroPath Blog: Next.js Middleware CVE-2025-29927 Auth Bypass
  3. CVE-2025-29927
相关推荐
软件技术NINI3 分钟前
html css 网页制作成品——HTML+CSS非遗文化扎染网页设计(5页)附源码
前端·css·html
fangcaojushi4 分钟前
npm常用的命令
前端·npm·node.js
阿丽塔~16 分钟前
新手小白 react-useEffect 使用场景
前端·react.js·前端框架
鱼樱前端34 分钟前
Rollup 在前端工程化中的核心应用解析-重新认识下Rollup
前端·javascript
m0_7401546739 分钟前
SpringMVC 请求和响应
java·服务器·前端
加减法原则42 分钟前
探索 RAG(检索增强生成)
前端
禁止摆烂_才浅1 小时前
前端开发小技巧 - 【CSS】- 表单控件的 placeholder 如何控制换行显示?
前端·css·html
rookie fish1 小时前
websocket结合promise的通信协议
javascript·python·websocket·网络协议
烂蜻蜓1 小时前
深度解读 C 语言运算符:编程运算的核心工具
java·c语言·前端
PsG喵喵1 小时前
用 Pinia 点燃 Vue 3 应用:状态管理革新之旅
前端·javascript·vue.js