Next.js 的哪些版本受到影响?
Next.js 15.x – 从版本 15.0.0 到 15.2.2(含)。
Next.js 14.x – 从版本 14.0.0 到 14.2.24(含)。
早期的 Next.js 版本 - 从版本 11.1.4 到版本 13.5.6。
CVE-2025-29927 的攻击场景
为了充分利用此漏洞,受害的 Next.js 服务器必须使用 Next.js 中间件。这包括包含一个middleware.js
或middleware.ts
文件( 对于旧版本的 Next.js,_middleware.js
则为 或)。该文件定义并导出函数,该函数用于保存收到每个 HTTP 请求时运行的逻辑。_middleware.ts``middleware
授权绕过
这是 CVE-2025-29927 最有可能的利用场景。
当受害者 Next.js 服务器使用中间件功能执行授权(并且底层应用程序不使用任何其他授权层)时,这种情况是相关的。
未利用 CVE-2025-29927 的授权中间件场景
存在 CVE-2025-29927 漏洞的授权中间件场景
通过缓存投毒实现拒绝服务
Next.js 中间件还可以帮助网站本地化。例如,该中间件可以根据用户位置自动重定向用户,例如,/en
为英语用户或/fr
法语用户添加重定向。如果有人利用 CVE-2025-29927 漏洞并绕过执行这些重定向的中间件,他们将无法进入本地化页面,而是进入网站根目录 ( /
),而开发人员从未为其构建过页面。结果如何?根据配置,会出现 404 错误或 500 服务器错误。
如果网站使用 CDN 或其他缓存层,这些错误响应可能会被存储并提供给未来的访问者。一旦被缓存,合法用户可能会在全球范围内看到损坏的页面。这会造成自身造成的中断,无需更改任何代码即可严重影响可用性。
未利用 CVE-2025-29927 的重定向器中间件场景
存在 CVE-2025-29927 漏洞的重定向器中间件场景
了解 Next.js 中间件
Next.js 中间件是 Next.js v12 中引入的一项强大功能,允许开发者在请求完成之前执行代码。中间件在边缘运行,比传统的服务器端代码更靠近用户,可以修改响应标头、重写或重定向请求,最重要的是,可以实现身份验证和授权检查。
Next.js 中的中间件在渲染之前运行,并且可以通过匹配器配置配置为在特定路径上执行。
Next.js 中间件的一些示例用例如下:
- 验证身份验证令牌
- 实施基于角色的访问控制
- 重定向未经身份验证的用户
执行身份验证的典型 Next.js 中间件实现可能如下所示:
import {
NextResponse } from 'next/server'
import type {
NextRequest } from 'next/server'
export function middleware(request: NextRequest) {
// Get the user token from the cookies
const token = request.cookies.get('token').value
// Validate the user is authenticated
const isAuthenticated = validateToken(token)
<