前端技术新闻(WTN-1):React.js & Next.js 爆出 CVSS 10.0 级严重漏洞,历史风险回顾与代码级深度分析

我也将开个新系列,用于整理一些前端/web hybrid相关的具有一定影响的技术新闻

近期,React Server Components 与 Next.js App Router 爆出了 CVSS 10.0 的远程代码执行漏洞(RCE) ,波及 React 19 与 Next.js 15.x/16.x 的大量项目。本篇文章将面向技术人员和架构师,系统回顾 React/Next 的典型历史漏洞,并从 协议层 → 代码层 → 利用链机制 深度分析本次事件,同时给出可落地的工程级安全建议。

这次的影响还算是不小的,不少企业受到了类似攻击。不知道大家是否还记得几个月前,cloudflare因为useEffect导致无限循环出现业务中断呢,这个框架用的时候还是要小心啦~ 越是标榜"安全"、"用户量大" 的技术,出的问题可能越多,有时候纯粹是

"大意了!


一、React.js 历史典型安全事件回顾

1. CVE-2018-6341 ------ SSR 渲染属性名注入导致 XSS

React 16 时代,SSR 渲染存在一个严重漏洞:

攻击者可将恶意字符串作为 属性名 注入,SSR 会错误地输出到 HTML 中,从而触发 XSS。

修复版本:React ≥ 16.4.2


2. CVE-2025-8101 ------ linkify-react 原型污染导致 XSS

第三方生态库 linkify-react 存在原型污染问题:

js 复制代码
import linkifyHtml from 'linkify-html';

const opts = {
  attributes: {
    __proto__: {
      onclick: "alert('XSS via prototype pollution')"
    }
  }
};

console.log(linkifyHtml('victim.com', opts));

最终输出:

html 复制代码
<a href="http://victim.com" onclick="alert('XSS via prototype pollution')">victim.com</a>

允许直接插入事件处理器,引发 XSS。


3. Next.js 中间件 SSRF 事件(CVE-2025-57822)

Next.js 某些版本的中间件中:

js 复制代码
NextResponse.next({ headers: request.headers });

将客户端 header 原样转发触发 SSRF,例如伪造 x-forwarded-host 等头部。

正确方式:

js 复制代码
return NextResponse.next({ req: request });

二、2025 Next.js & React 爆出 CVSS 10.0 RCE 漏洞(重点)

漏洞编号

  • CVE-2025-55182(React Server Components)
  • CVE-2025-66478(Next.js App Router)
  • CVSS 评分:10.0(最高级)

又被成为 React2Shell,因为可以通过提供虚构的框架action,执行shell命令,可参考log4j

受影响范围:

  • Next.js 15.x / 16.x
  • React 19 + RSC(App Router 默认开启)
  • Pages Router 不受影响

三、漏洞利用原理:从协议到代码的完整攻击链剖析

本次漏洞本质是 "不安全反序列化 + 原型污染 → 任意服务器函数调用 → RCE"

1. 攻击入口:伪造的 Flight 协议 Payload

React Server Components 使用 Flight Protocol在客户端和服务端之间传输序列化数据。

攻击者构造恶意 payload,伪造:

  • 服务器函数引用(Server Action ID)
  • 原型链注入字段
  • Promise "then" 回调映射

在未修复版本中,React 会:
➜ 无校验反序列化 ➜ 执行攻击者控制的 promise.then 代码


2. 关键危险点:可控 Promise.then 执行

攻击者可将 payload 解析成:

js 复制代码
Promise.resolve().then(require('child_process').execSync.bind(null, 'cat /etc/passwd'));

服务端解析 Flight 数据 → 自动执行该 promise → RCE。

官方确认这是漏洞的核心成因。


3. Next.js 被攻破的原因

Next.js App Router 默认启用:

  • Server Actions
  • RSC
  • 自动请求路由映射

导致攻击者只需向 任意可访问的 Server Action 路径 发请求,即可触发解析逻辑。


4. 真实攻击后果(已被官方证实)

攻击者可:

  • 读取 .env、DB 密钥
  • 读取/写入任意文件
  • 执行系统命令
  • 注入恶意 SSR HTML
  • 窃取用户信息、Session、API Token

四、修复建议(工程可落地)

1. 立即升级依赖(最关键)

jsonc 复制代码
{
  "dependencies": {
    "react": ">=19.2.1",
    "react-dom": ">=19.2.1",
    "react-server-dom-webpack": ">=19.2.1",
    "next": ">=16.0.7"
  }
}

修复版本添加了:

  • 严格的 hasOwnProperty 检查
  • 禁止 prototype chain 访问
  • 禁止任意函数引用调用

2. 中间件增强(防 SSRF、假冒头部)

避免危险写法:

js 复制代码
NextResponse.next({ headers: request.headers });

改用:

js 复制代码
return NextResponse.next({ req: request });

并加入白名单校验:

js 复制代码
const allowedHosts = ['my.com', 'api.my.com'];
if (!allowedHosts.includes(request.nextUrl.hostname)) {
  return NextResponse.redirect('https://my.com');
}

3. 对 Server Actions 增加允许列表(强烈推荐)

js 复制代码
export async function handleAction(params) {
  const allowed = ['createUser', 'deleteItem'];
  if (!allowed.includes(params.action)) {
    throw new Error('Action not allowed');
  }
}

确保不会意外调用任意 exports。


4. 隔离敏感逻辑(架构级防御)

建议:

  • 业务 API 独立为 纯后端服务
  • RSC 仅用于 UI 数据读取,不执行敏感操作
  • 所有 Server Actions 强制加认证(例如 JWT、HMAC)

5. 持续依赖安全管理

推荐工具:

  • npm audit
  • Snyk
  • Dependabot
  • GitHub Security Alerts

示例:

bash 复制代码
npx snyk test

五、总结:RSC + Next.js 的组合属于"默认危险模式"

React RSC 设计初衷是"零客户端 JS + 服务端逻辑自动化",但这也意味着:

反序列化越来越复杂 → 自动执行链越来越危险 → 漏洞威力呈指数级增长。

这次 CVSS 10.0 漏洞再次证明:

任何自动执行反序列化逻辑的框架,都必须谨慎使用。
默认开启 = 默认高风险。

建议所有团队:

  • 重新审视是否需要使用 RSC / Server Actions
  • 将敏感逻辑移出 Next.js 应用
  • 强制设置 API 白名单与认证
  • 使用工具持续监控依赖风险
  • 第一时间升级到修复版本

最后说一句,全栈开发切记:

务必不要给非开发环境设置万能操作窗口!开发环境也最好少用,尤其是基于前端参数构建操作的那种

使用switch 或者 if 比 直接拼接要安全的多

React Blog 更新说明

相关推荐
1024肥宅2 小时前
JavaScript 原生方法实现:数学与数字处理全解析
前端·javascript·ecmascript 6
烟袅2 小时前
深入理解 JavaScript 内存机制与闭包原理
前端·javascript
烟袅2 小时前
JavaScript 内存三空间协同机制:代码空间、栈空间与堆空间如何联合运行
前端·javascript
lqj_本人2 小时前
DevUI高频组件(Form 组件)深度用法与避坑指南
前端·javascript
live丶2 小时前
从零实现一个低代码 H5 页面编辑器(Vue3 + 拖拽)
前端·vue.js
黑臂麒麟2 小时前
华为云 DevUI初体验:如何快速入门项目搭建
前端·ui·华为云·devui
翔云 OCR API2 小时前
企业工商信息查验API-快速核验企业信息-营业执照文字识别接口
前端·数据库·人工智能·python·mysql
小明记账簿_微信小程序2 小时前
js实现页面全屏展示
前端
wordbaby2 小时前
秒懂 Headless:为什么现在的软件都要“去头”?
前端