【已复现】CVE-2025-29927Next.js 中间件授权绕过漏洞
字数 1307 2025-08-29 22:41:44
CVE-2025-29927 Next.js 中间件授权绕过漏洞分析与防护指南
漏洞概述
CVE-2025-29927 是 Next.js 框架中发现的一个严重安全漏洞,允许攻击者通过添加特定 HTTP 标头绕过中间件中的授权检查。该漏洞影响 Next.js 14.2.25 和 15.2.3 之前的所有版本。
受影响版本
- Next.js 15.x: 低于 15.2.3
- Next.js 14.x: 低于 14.2.25
- Next.js 13.x: 低于 13.5.9
- Next.js 12.x: 低于 12.3.5
漏洞原理
Next.js 中间件是位于传入请求和路由系统之间的桥梁,负责控制请求流程。当请求中包含 x-middleware-subrequest: middleware 标头时,Next.js 会错误地跳过中间件处理,导致授权检查被绕过。
漏洞利用方法
攻击者可以通过以下方式利用此漏洞:
-
使用 curl 命令:
curl -H "x-middleware-subrequest: middleware" http://target-domain/protected-route -
使用 Burp Suite 或其他代理工具:
- 拦截对受保护路由的请求
- 添加
x-middleware-subrequest: middlewareHTTP 标头 - 转发请求
-
直接构造 HTTP 请求:
任何可以发送自定义 HTTP 标头的工具都可以利用此漏洞。
检测方法
1. 日志分析
配置 Web 服务器记录 x-middleware-subrequest 标头:
Node.js 示例:
console.log(request.headers['x-middleware-subrequest']);
Apache 配置:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{x-middleware-subrequest}i\"" custom
Nginx 配置:
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_x_middleware_subrequest"';
2. IDS/IPS 检测
Snort 规则:
alert tcp any any -> any any (msg: "HTTP 'x-middleware-request' header detected, possible CVE-2025-29927 exploitation"; content:"x-middleware-subrequest"; rawbytes; sid:10000001; rev:1)
Zeek 规则:
module CVE_2025_29927;
export {
redef enum Log::ID += { LOG };
global log_policy: Log::PolicyHook = Log::IGNORE;
event http_header(c: connection, is_orig: bool, name: string, value: string) {
if (name == "x-middleware-subrequest" && value == "middleware")
Log::write(HTTP::LOG, [
$timestamp=c$start_time,
$uid=c$uid,
$id=c$id,
$note="CVE_2025_29927_Exploit",
$msg="Detected HTTP header associated with CVE-2025-29927",
$header=name,
$value=value
]);
notice_info(c, "CVE-2025-29927 Exploit",
fmt("The HTTP header '%s' associated with CVE-2025-29927 was detected", value));
}
}
修复方案
1. 升级 Next.js
- Next.js 15.x: 升级到 15.2.3 或更高版本
- Next.js 14.x: 升级到 14.2.25 或更高版本
- Next.js 13.x: 升级到 13.5.9 或更高版本
- Next.js 12.x: 升级到 12.3.5 或更高版本
2. 临时缓解措施
如果无法立即升级,可以采取以下措施:
-
Web 应用防火墙(WAF)规则:
- 拦截包含
x-middleware-subrequest: middleware标头的请求
- 拦截包含
-
反向代理配置:
- 在 Nginx/Apache 层面移除或重命名可疑标头
-
自定义中间件检查:
export function middleware(request) { if (request.headers.get('x-middleware-subrequest') === 'middleware') { return new Response('Unauthorized', { status: 401 }); } // 原有中间件逻辑... }
漏洞影响评估
此漏洞影响所有使用 Next.js 中间件进行授权的应用程序,可能导致:
- 未授权访问受保护路由
- 敏感数据泄露
- 权限提升
- 其他依赖于中间件授权的安全控制失效
参考资源
- 漏洞 PoC: https://github.com/aydinnyunus/CVE-2025-29927
- 原始漏洞分析: https://zhero-web-sec.github.io/research-and-things/nextjs-and-the-corrupt-middleware
- Next.js 安全公告: 参考官方发布的安全更新说明
后续行动建议
- 立即升级受影响系统
- 审查日志中是否有漏洞利用迹象
- 监控异常访问模式
- 考虑重置可能已泄露的会话令牌
- 对敏感数据进行额外审计