React Server Components 系列安全漏洞深度解析:从 React2Shell 到 DoS 攻击

2025 年 12 月,React 官方披露了一系列影响 React Server Components (RSC) 的严重安全漏洞,其中 CVE-2025-55182(又名 React2Shell)被评为 CVSS 10.0 满分,是 React 历史上最严重的安全事件。本文将深入分析这些漏洞的技术原理、影响范围,并提供完整的修复方案。
一、漏洞概览
| CVE 编号 | 名称 | 严重程度 | CVSS | 类型 |
|---|---|---|---|---|
| CVE-2025-55182 | React2Shell | 严重 | 10.0 | 远程代码执行 (RCE) |
| CVE-2025-55184 | — | 高危 | 7.5 | 拒绝服务 (DoS) |
| CVE-2025-67779 | — | 高危 | 7.5 | 拒绝服务 (DoS) |
| CVE-2025-55183 | — | 中危 | 5.3 | 源码泄露 |
| CVE-2026-23864 | — | 高危 | 7.5 | 内存耗尽 DoS |
二、CVE-2025-55182:React2Shell(CVSS 10.0)
漏洞原理
React Server Functions 允许客户端通过 HTTP 请求调用服务端函数。漏洞存在于 React 反序列化 Flight 协议载荷的过程中:
- 客户端向 Server Function 端点发送 HTTP 请求
- React 将 HTTP 请求转换为服务端函数调用
- 问题核心:攻击者可以构造恶意 HTTP 请求,React 在反序列化时会将攻击载荷当作可信数据处理
- 由于 RSC 组件之间存在默认信任机制,恶意输入被反序列化后直接在 Node.js 运行时执行
关键特征
- 无需认证:攻击者无需登录即可发起攻击
- 隐式暴露:即使应用没有显式定义 Server Functions,只要支持 RSC 就可能受影响
- 远程执行:攻击者可以在服务器上执行任意代码,获取完全控制权
攻击示意
攻击者 → 构造恶意 POST 请求 → Server Function 端点
↓
React Flight 反序列化
↓
恶意代码在 Node.js 执行
↓
服务器完全沦陷
真实利用情况
据 Palo Alto Unit 42 和 Cloudflare 报告,漏洞公开后已被广泛利用:
- 多个自动化扫描工具在互联网上批量探测漏洞
- RondoDox 僵尸网络利用此漏洞劫持 IoT 设备和 Web 服务器
- 攻击者使用 Base64 编码命令进行后渗透活动
- 已观察到挖矿程序部署、反向 Shell 建立等恶意行为
三、CVE-2025-55184 & CVE-2025-67779:拒绝服务攻击
漏洞原理
攻击者构造特殊的 HTTP 请求发送到 Server Functions 端点,React 在反序列化时触发无限循环,导致:
- 服务器进程挂起
- CPU 资源被完全耗尽
- 后续所有 HTTP 请求无法响应
- 可能导致内存溢出 (OOM) 崩溃
注意事项
CVE-2025-55184 的初始修复不完整,后续通过 CVE-2025-67779 发布了完整修复。如果你已经升级过一次,请确认是否升级到了最终修复版本。
四、CVE-2025-55183:源码泄露
漏洞原理
当 Server Function 对参数进行字符串化操作时(显式或隐式),攻击者可以通过恶意请求获取 Server Function 的编译后源代码。
泄露示例
假设有以下 Server Function:
'use server';
export async function createUser(name) {
const conn = db.createConnection('SECRET_KEY');
const user = await conn.createUser(name);
return {
id: user.id,
message: `Hello, ${name}!`
};
}
攻击者可能获取到:
Hello, async function(a){
let b=i.createConnection("SECRET_KEY");
return{id:(await b.createUser(a)).id, message:`Hello, ${a}!`}
}
影响范围
- 编译后的 Server Function 源码可被窃取
- 硬编码在代码中的密钥会被暴露(如数据库连接字符串、API Key)
process.env.SECRET等运行时环境变量不受影响
五、受影响范围
受影响的 React 包
react-server-dom-webpackreact-server-dom-parcelreact-server-dom-turbopack
受影响的框架和工具
| 框架/工具 | 受影响 |
|---|---|
| Next.js (App Router) | 受影响 |
| React Router (RSC APIs) | 受影响 |
| Waku | 受影响 |
| @parcel/rsc | 受影响 |
| @vitejs/plugin-rsc | 受影响 |
| rwsdk (Redwood SDK) | 受影响 |
| Next.js Pages Router | 不受影响 |
| React Native(非 monorepo) | 不受影响 |
| 纯客户端 React 应用 (CRA/Vite SPA) | 不受影响 |
React 受影响版本
| 漏洞 | 受影响版本 | 修复版本 |
|---|---|---|
| CVE-2025-55182 (RCE) | 19.0, 19.1.0-19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| CVE-2025-55183 (源码泄露) | 19.0.0-19.0.3, 19.1.0-19.1.3, 19.2.0-19.2.3 | 19.0.4, 19.1.5, 19.2.4 |
| CVE-2025-55184 (DoS) | 19.0.0-19.0.3, 19.1.0-19.1.3, 19.2.0-19.2.3 | 19.0.4, 19.1.5, 19.2.4 |
Next.js 受影响版本
| Next.js 版本线 | 修复 RCE 的版本 | 修复 DoS + 源码泄露的版本 |
|---|---|---|
| 13.3.x - 14.x | 14.2.35 | 14.2.35 |
| 15.0.x | 15.0.8 | 15.0.7+ |
| 15.1.x | 15.1.12 | 15.1.11+ |
| 15.2.x | 15.2.9 | 15.2.8+ |
| 15.3.x | 15.3.9 | 15.3.8+ |
| 15.4.x | 15.4.11 | 15.4.10+ |
| 15.5.x | 15.5.10 | 15.5.9+ |
| 16.0.x | 16.0.11 | 16.0.10+ |
| 16.1.x | 16.1.5+ | 16.1.5+ |
六、修复方案
1. 升级 React(推荐升级到最新修复版本)
# 如果你使用 React 19.2.x 系列
npm install react@19.2.4 react-dom@19.2.4
# 如果你使用 React 19.1.x 系列
npm install react@19.1.5 react-dom@19.1.5
# 如果你使用 React 19.0.x 系列
npm install react@19.0.4 react-dom@19.0.4
2. 升级 Next.js
# 根据你的版本线选择对应的修复版本
npm install next@16.1.5 # for 16.1.x
npm install next@16.0.11 # for 16.0.x
npm install next@15.5.10 # for 15.5.x
npm install next@15.4.11 # for 15.4.x
npm install next@14.2.35 # for 14.x
3. 使用自动修复工具
Next.js 官方提供了自动检测和修复工具:
npx fix-react2shell-next
该工具会自动检测你的 Next.js 版本并执行确定性的版本升级。
4. 验证修复
升级后,确认 package-lock.json 或 pnpm-lock.yaml 中的版本号:
# 检查 React 版本
npm ls react
# 检查 Next.js 版本
npm ls next
# 检查 server-dom 包版本
npm ls react-server-dom-webpack
npm ls react-server-dom-turbopack
七、安全加固建议
除了升级版本外,建议采取以下措施加强应用安全:
代码层面
- 不要在代码中硬编码密钥,使用环境变量 (
process.env.XXX) - 对 Server Functions 的输入进行校验,不要盲目信任客户端数据
- 实施最小权限原则,Server Functions 只暴露必要的功能
基础设施层面
- 启用 WAF 规则,主流云平台(AWS、Cloudflare、Vercel)已更新规则库
- 配置速率限制,防止自动化扫描和 DoS 攻击
- 监控异常请求,关注 POST 到 Server Function 端点的异常流量
- 使用容器化部署,限制被入侵后的横向移动能力
运维层面
- 建立依赖更新机制,使用 Dependabot 或 Renovate 自动跟踪安全更新
- 定期执行
npm audit,及时发现已知漏洞 - 制定安全事件响应计划,确保团队能快速响应类似事件
八、时间线
| 日期 | 事件 |
|---|---|
| 2025-11-29 | 安全研究员 Lachlan Davidson 通过 Meta Bug Bounty 报告 RCE 漏洞 |
| 2025-11-30 | Meta 安全团队确认漏洞并开始修复 |
| 2025-12-01 | 修复完成,开始与托管商和开源项目协调 |
| 2025-12-03 | React 发布修复版本,公开披露 CVE-2025-55182 |
| 2025-12-11 | React 披露 DoS 和源码泄露漏洞(CVE-2025-55183、CVE-2025-55184) |
| 2025-12-11 | Next.js 发布安全更新,修复所有已知漏洞 |
| 2025-12-15 | 微软发布 React2Shell 防御指南 |
| 2026-01 | RondoDox 僵尸网络利用漏洞发起大规模攻击 |
| 2026-01-26 | 新增 CVE-2026-23864 内存耗尽 DoS 漏洞 |
九、总结
React2Shell 系列漏洞是 React 生态系统历史上最严重的安全事件。CVE-2025-55182 的 CVSS 10.0 满分评级意味着它具有最大的破坏力——无需认证、远程可利用、影响面广。
如果你的应用使用了 React Server Components(包括 Next.js App Router),请立即检查并升级到最新的修复版本。 这不是一个可以延后处理的问题——漏洞已经被大规模利用。
参考来源: