严重性:严重 | CVSS v3.1:10.0(最高) | 状态:正在被积极利用
React2Shell 是 React 服务器组件 (RSC) 中的一个关键安全漏洞——RSC 是一项现代功能,允许 React 在服务器而非浏览器上运行部分 Web 应用。
该漏洞使得互联网上的任何攻击者——无需登录、无需特殊访问权限、也无需事先了解你的系统——只需向你的服务器发送一个恶意 HTTP 请求,即可在其上运行任意代码。这意味着攻击者可以窃取数据、安装恶意软件、用勒索软件锁定你的文件,或者完全控制你的服务器。
打个比方:你的服务器有一扇门,本应只为受信任的访客打开,但事实证明——任何人都可以通过特定的敲门方式进入。
| 属性 | 值 |
|---|---|
| CVE 编号 | CVE-2025-55182(也称为 React2Shell) |
| 严重性 | 严重 — 远程代码执行 (RCE) |
| CVSS v3.1 评分 | 10.0 / 10.0(最高可能分数) |
| CVSS v4 评分 | 9.3 / 10.0 |
| 弱点类型 | CWE-502 — 不可信数据的反序列化 |
| 攻击方法 | 单个 HTTP POST 请求,无需身份验证 |
| 发现者 | Lachlan Davidson(安全研究员) |
| 披露日期 | 2025 年 12 月 3 日 |
| 漏洞利用状态 | 公开可用 — 正在被攻击者积极利用 |
| 相关 CVE | CVE-2025-66478(Next.js — 确认为重复漏洞) |
react-server-dom-webpack — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0 react-server-dom-parcel — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0 react-server-dom-turbopack — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0
### 受影响框架
| 框架 / 工具 | 影响范围 |
|--------------------------|--------------------------------------------------|
| **Next.js 15.x – 16.x** | 仅 App Router — Pages Router **不受**影响 |
| **React Router RSC** | 仅 unstable / preview 频道 |
| **Redwood SDK** | 仅 RSC 模式 |
| **Waku** | 所有启用 RSC 的版本 |
| **Expo** | 仅 RSC 预览构建 |
| **Vite RSC 插件** | 所有集成方式 |
| **Parcel RSC 插件** | 所有集成方式 |
| **任何自定义 RSC 设置** | 任何使用 RSC Flight 反序列化的服务器 |
> ⚠️ **重要:** 即使您在应用中未显式使用 Server Actions 或 Server Functions,只要启用了 React Server Components,您仍然存在漏洞。
> ✅ **不受影响:** 仅使用 Pages Router 的应用,或完全无服务端 React 的应用。
---
## 为什么这个漏洞如此危险?
三个原因使 React2Shell 异常严重:
1. **无需身份验证。** 互联网上的任何人都可以尝试此攻击。无需账户、令牌或事先访问权限。
2. **在默认安装下即可触发。** 一个使用 `create-next-app` 创建的全新 Next.js 应用——零自定义配置——可立即被利用。开发者无需做任何错误操作就会产生漏洞。
3. **近乎 100% 的可靠性。** 安全研究人员确认,在未打补丁的服务器上,该漏洞几乎每次都能成功利用。
---
## 攻击是如何运作的?
### 根本原因——通俗解释
当您的 React 服务器从客户端接收数据时,它会处理(反序列化)这些数据以了解下一步操作。问题在于 React **从不检查数据是否安全或合法**——它盲目信任任何到达的数据。
攻击者通过发送精心构造的数据来利用这一点,劫持服务器内部的 JavaScript 行为,最终注入并执行自己的代码。
### 技术解释
该漏洞利用了一种称为**原型污染**的技术:
1. 攻击者向任意 RSC 端点发送一个精心构造的 HTTP POST 请求(无需特定 URL)。
2. React Flight 协议解析器在没有任何结构验证的情况下处理该载荷。
3. 恶意载荷污染了 `Object.prototype.then`——这是所有其他对象继承的基础 JavaScript 对象。
4. 这使攻击者能够访问 JavaScript 的 `Function` 构造函数。
5. 攻击者利用 `Function` 构造函数以 Node.js 服务器进程的权限执行任意代码。```
Step 1 — Attacker sends crafted HTTP POST
↓
Step 2 — React deserializes payload blindly
↓
Step 3 — Object.prototype.then is hijacked (prototype pollution)
↓
Step 4 — Function constructor is accessed
↓
Step 5 — Attacker's code runs on the server
↓
Step 6 — Attacker has full server control
// This is a simplified version of the vulnerable code path inside React function parseFlightRequest(req) { const flight = req.body;
// ❌ NO validation — the server trusts whatever arrives
const decoded = dangerousDeserialize(flight); // Attack happens here
// If the attacker controls decoded.action → RCE
return executeServerReference(decoded.action);
}
### 攻击示例```http
POST /?flight=1 HTTP/1.1
Content-Type: text/plain
{
"status": "resolved_model",
"$1:__proto__:then": "node:process.mainModule.require('child_process').execSync('id > /tmp/rce')",
"_formData.get": "$1:constructor:constructor"
}
| 参数 | 类型 | 默认 | 范围 | 描述 |
|---|---|---|---|---|
SHELL_NAME | string | revshell | 重命名 | 逆向 Shell 文件名 |
INVERT_EXE_NAME | bool | true | 切换开关 | 以 explorer.exe 模式重命名 EXE |
INVERT_SHELL_NAME | bool | true | 切换开关 | 以 svchost 模式重命名 Shell |
ENABLE_SCRIPTS | bool | true | 切换开关 | 通过 PowerShell 登录脚本 (PERSIST) |
ENABLE_EXE | bool | true | 切换开关 | 通过禁用反病毒软件的 EXE 实现持久化 (PERSIST) |
| 规则 | 作者 | 描述 | 来源 |
|---|---|---|---|
| Turned on all lights | @angry-bender | 通过登录脚本实现持久化 | SIGMA |
| Turned on EXE | @angry-bender | 通过禁用反病毒软件的 EXE 实现持久化 | SIGMA |
🛠️ 待完成
logdate Beacon 间隔,如果启用,流量将以固定时间间隔发生,长度不同,带有随机抖动。本项目仅用于教育/研究目的。禁止将此代码用于任何违法行为。使用风险由您自行承担。请勿用于任何未经授权的系统/网络。```bash
curl -X POST https://target.com/react?flight=1
-H "Content-Type: text/plain"
--data '["$ACTION_REF","proto","constructor","<attacker_payload>"]'
> 🚫 **法律警告:** 请勿将此工具用于任何您不拥有或未经明确书面授权测试的系统。
---
## 已修复版本 — 立即更新
### React RSC 包
| 包 | 已修补版本 |
|-------------------------------|--------------------------------|
| `react-server-dom-webpack` | 19.0.1, 19.1.2, **19.2.1+** |
| `react-server-dom-parcel` | 19.0.1, 19.1.2, **19.2.1+** |
| `react-server-dom-turbopack` | 19.0.1, 19.1.2, **19.2.1+** |
> 💡 **建议:** 升级至 **19.2.3** 还可修复相关的后续漏洞(CVE-2025-55183、CVE-2025-55184、CVE-2025-67779)。
### Next.js
| 您的版本 | 升级至 |
|----------|--------------|
| 13.x / 14.x | **14.2.35** |
| 15.0.x | **15.0.5** |
| 15.1.x | **15.1.9** |
| 15.2.x | **15.2.6** |
| 15.3.x | **15.3.6** |
| 15.4.x | **15.4.8** |
| 15.5.x | **15.5.7** |
| 16.0.x | **16.0.7** |
---
## 如何保护自己 — 分步指南
**按顺序**执行以下步骤。步骤 1 和 2 是必须的,其余步骤可增加额外的防御层。
### 第 1 步 — 升级 React 包(最重要)```bash
# Check your current version
npm list react-server-dom-webpack
# Upgrade to the latest patched version
npm install react-server-dom-webpack@latest
npm install react-server-dom-parcel@latest
npm install react-server-dom-turbopack@latest
npm install next@X
### 第三步 — 添加 WAF 防护(纵深防御)
| 云服务提供商 | 需执行的操作 |
|-------------------------|-------------------------------------------------------------------------------------------|
| **AWS WAF** | 启用 `AWSManagedRulesKnownBadInputsRuleSet` v1.24+ — 包含 React2Shell 规则 |
| **AWS Network Firewall** | 启用主动威胁防御托管规则(通过 MadPot 自动更新) |
| **Google Cloud Armor** | 通过控制台部署 React2Shell 规则集 |
| **Cloudflare** | WAF 规则 `react2shell-cve-2025-55182` — Pro+ 计划自动应用 |
> ⚠️ **仅靠 WAF 规则是不够的。** 它们无法阻止所有载荷变种。修补软件包才是唯一彻底的修复方案。
### 第四步 — 如无法立即修补
- 临时**禁用服务器上的 RSC Flight 端点**。
- 这将在您应用补丁前减少攻击面。
### 第五步 — 检查是否已遭攻击
- **审计服务器日志**,查找在打补丁日期前发往 RSC/Flight 端点的可疑 POST 请求。
- 查找异常的外发连接、新用户账户或意外进程。
### 第六步 — 假设已被入侵的预防措施
- **轮换所有机密信息** — API 密钥、数据库凭据、会话令牌、环境变量。
- 将所有运行过易受攻击版本的服务器视为可能已被攻陷。
---
## 真实世界的攻击活动
### 规模(截至 2026 年 4 月)
| 指标 | 数值 |
|------------------------|-------------------------------------|
| 总攻击会话数 | **超过 810 万**(GreyNoise) |
| 每日攻击量 | **每天 300,000 – 400,000** 次请求 |
| 峰值日攻击量 | **超过 430,000**(2025 年 12 月下旬) |
| 唯一攻击者 IP | **8,163** 个,遍及 101 个国家 |
| 首次感染时间 | 服务器暴露后 **2 分钟** |