CVE-2025-29927: Next.js 中间件授权绕过 
时间线 
- 2025-02-27T06:03Z: 通过- GitHub私人漏洞报告向- Next.js团队披露。
- 2025-03-14T17:13Z:- Next.js团队开始对报告进行分类。
- 2025-03-14T19:08Z: 为- Next.js 15.x版本推送补丁。
- 2025-03-14T19:26Z: 为- Next.js 14.x版本推送补丁。
- 2025-03-17T22:44Z:- Next.js 14.2.25版本发布。
- 2025-03-18T00:23Z:- Next.js 15.2.3版本发布。
- 2025-03-18T18:03Z:- GitHub发布了- CVE-2025-29927报告。
- 2025-03-21T10:17Z: 已发布安全公告。
- 2025-03-22T21:21Z:- Next.js 13.5.9版本发布。
- 2025-03-23T06:44Z:- Next.js 12.3.5版本发布。
概述 
2025.3.21 披露了一个严重的安全漏洞 CVE-2025-29927,该漏洞的 CVSS(Common Vulnerability Scoring System) 综合评分为 9.1 / 10.0,被评为 严重级别。主要影响使用 middleware 进行 授权检查 的应用程序。攻击者可以通过设置 x-middleware-subrequest 头部,欺骗系统将外部请求视为内部子请求,从而绕过授权检查。
Next.js 团队在漏洞披露后迅速发布了补丁,并与云服务提供商(如 Vercel、Cloudflare)合作,提供了网络层面的缓解措施。
影响版本 
该漏洞影响几乎所有 Next.js 版本,并已在 Next.js 的 14.2.25 和 15.2.3 版本中得到修补。
修复版本
- 14.2.25:于- 2025.3.17发布了- 14.2.25
- 15.2.3:于- 2025.3.18发布了- 15.2.3
使用旧版本 Next.js( 11.1.4 ~ 13.5.6 )的用户尚未获得可用的修补程序。特别是,任何使用这些早期版本并依赖 Middleware 进行授权检查的应用程序都可能受到影响。
修复策略 
- 升级到最新版本 - 推荐升级到 - Next.js的- 14.2.25或- 15.2.3以上版本,这些版本包含针对- CVE-2025-29927的补丁。
- 过滤 - x-middleware-subrequest头部- 若无法立即升级,可通过服务器或代理配置过滤该头部,阻止外部请求携带 - x-middleware-subrequest。例如,可以使用反向代理(如- Nginx)或- WAF规则(如- Cloudflare WAF)来实现此功能。
修复细节 
Related Materials
const randomBytes = new Uint8Array(8); 
crypto.getRandomValues(randomBytes); 
const middlewareSubrequestId = Buffer.from(randomBytes).toString('hex'); 
(globalThis as any)[Symbol.for('@next/middleware-subrequest-id')] =
  middlewareSubrequestId; // If this request didn't origin from this session we filter
// out the "x-middleware-subrequest" header so we don't skip
// middleware incorrectly
if (
  header === 'x-middleware-subrequest' &&
  headers['x-middleware-subrequest-id'] !==
    (globalThis as any)[Symbol.for('@next/middleware-subrequest-id')] 
) {
  delete headers['x-middleware-subrequest']; 
}Next.js 为每个会话生成唯一的中间件 子请求标识符,并将其存储在 globalThis 对象的 Symbol.for('@next/middleware-subrequest-id') 属性中,只有当前会话的子请求才能使用特殊标记跳过中间件,防止来自其他会话的请求通过 伪造标头 绕过中间件处理流程。
后续 
Next.js 官方 
Related Materials
Next.js 团队在发布补丁后,还 更新了 docs 文档,明确说明了 Next.js 的 middleware 并不适合用于 授权检查。
Some common scenarios where Middleware is effective include:
- Quick redirects after reading parts of the incoming request
- Rewriting to different pages based on A/B tests or experiments
- Modifying headers for all pages or a subet of pages
Middleware is _not_ a good fit for:
- Slow data fetching
- Session management社区 
中间件的设计更适合简单的请求预处理,而非核心安全逻辑,CVE-2025-29927 暴露了其在头部验证上的不足。
| 观点类别 | 具体内容 | 支持来源 | 
|---|---|---|
| 中间件设计局限性 | 不适合复杂权限校验,易受头部操纵攻击 | Reddit Discussion, Medium Article | 
| 建议转向路由或 API 层 | 在后端路由中实施更严格的验证,中间件仅用于简单拦截 | ZeroPath Blog, ProjectDiscovery Blog | 
| 多层防御必要性 | 结合 WAF 和服务器端校验,确保安全 | Hacker News, ProjectDiscovery Blog | 
| 中间件正确的用途 | 全局认证的规范性 | GitHub Pull Request Comment | 
 XiSenao
 XiSenao