Next.js 和被破坏的中间件:授权工件
Next.js 和被破坏的中间件:授权工件。这是一篇由发现该问题的研究者之一Allam Rachid撰写的关于Next.js漏洞CVE-2025-29927的详细分析文章。
该漏洞可以通过以下代码片段很好地说明:
const subreq = params.request.headers['x-middleware-subrequest'];
const subrequests = typeof subreq === 'string' ? subreq.split(':') : [];
// ...
for (const middleware of this.middleware || []) {
// ...
if (subrequests.includes(middlewareInfo.name)) {
result = {
response: NextResponse.next(),
waitUntil: Promise.resolve(),
};
continue;
}
}
这是Next.js内部用于帮助避免对通过框架重新分发的请求递归应用中间件的一部分。
不幸的是,这也意味着攻击者可以发送一个带有冒号分隔的中间件名称列表的x-middleware-subrequest
HTTP头来跳过中间件。如果一个站点使用中间件来应用身份验证门(正如Next.js文档中建议的那样),攻击者可以使用这个技巧绕过该身份验证。
该漏洞已在Next.js 15.2.3中修复——这里是关于该问题的官方发布声明。