前端技术新闻(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 更新说明

相关推荐
炫饭第一名33 分钟前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫1 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊1 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter1 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折1 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_1 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
不会敲代码11 小时前
前端组件化样式隔离实战:React CSS Modules、styled-components 与 Vue scoped 对比
css·vue.js·react.js
Angelial1 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu2 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端
jiayu2 小时前
Angular6学习笔记13:HTTP(3)
前端