这是一个示例 Next.js 项目,通过 [create-next-app] (https://nextjs.org/docs/app/api-reference/cli/create-next-app) 初始化,用于实际演示 cve-2025-29927 的工作原理。
首先,运行开发服务器:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
在浏览器中打开 http://localhost:3000 查看结果。
现在,您可以使用 Burp 或其他浏览器扩展来修改请求头,并利用 payload 攻击中间件。

当一个 Next.js 应用程序使用中间件时,会调用 runMiddleware 函数。该函数除了其主要功能外,还会检索 x-middleware-subrequest 请求头的值,并用它来判断是否应应用中间件。请求头的值通过冒号(:)分隔成一个列表,然后检查该列表是否包含 middlewareInfo.name 的值。
这意味着,如果我们向请求中添加带有正确值的 x-middleware-subrequest 请求头,那么无论中间件的目的是什么,它都会被完全忽略,请求将通过 NextResponse.next() 转发,并完成到原始目的地的旅程,而中间件不会对其产生任何影响。该请求头及其值充当了一把万能钥匙,允许覆盖规则。至此,我们已经知道,我们刚刚发现了一些疯狂的东西。
Uploading next-middleware-2.png…
请注意,我们这里使用的是 "next": "14.0.4"。