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.2515.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 |