CVE-2025-29927: Next.js 中间件授权绕过
Related Materials
Authorization Bypass in Next.js Middleware
时间线
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 |