trax69/cve-2025-55182-poc
GitHub: trax69/cve-2025-55182-poc
演示 React Server Components 远程代码执行漏洞 CVE-2025-55182 的完整概念验证环境,覆盖原生 RSC 和 Next.js 两种攻击场景。
Stars: 0 | Forks: 0
# CVE-2025-55182 (React2Shell) - 学术概念验证
## 📄 摘要
本项目记录并演示了 **CVE-2025-55182**,这是一个存在于 **React Server Components (RSC)** 架构中的严重远程代码执行 (RCE) 漏洞。该漏洞通常被称为 "React2Shell",它允许未经认证的远程攻击者通过操纵 `react-server` 使用的 "Flight" 序列化协议,在服务器上执行任意代码。
本实验室提供了一个受控的、隔离的 Docker 环境来分析两种不同场景下的漏洞:
1. **原生 RSC:** 使用 `react-server-dom-webpack` 和 Express 的原始实现。
2. **Next.js:** 使用存在漏洞的 Next.js App Router 版本的标准部署。
## 🏗️ 架构
该环境通过 Docker Compose 进行编排,由三个通过私有内部网络 (`research-net`) 连接的隔离容器组成。
| 服务 | 上下文 | 描述 | 易受攻击组件 |
| :--- | :--- | :--- | :--- |
| **`vanilla-target`** | `vanilla-rsc/` | 手动实现 RSC 协议的最小化 Express 服务器。 | `react-server-dom-webpack@19.0.0` |
| **`nextjs-target`** | `nextjs-app/` | 使用 App Router 的标准 Next.js 应用程序。 | `next@15.0.0` (实现 `react-server`) |
| **`attacker`** | `exploit/` | 包含漏洞利用脚本的 Python 环境。 | N/A |
### 技术根本原因
该漏洞源于 Flight 协议解析器中的 **不安全的反序列化 (CWE-502)**。通过注入包含“伪造”块结构的精心构造的 multipart payload,攻击者可以:
1. **污染原型:** 覆盖 promise-like 对象的 `.then` 属性。
2. **触发利用链:** 强制服务器遍历内部利用链(引用 `$B` blobs)。
3. **执行代码:** 到达 `Function()` 构造函数以编译并执行任意 JavaScript(例如 `child_process.execSync`)。
## 🚀 开始使用
### 前置条件
* Docker & Docker Compose
* Git
### 安装与部署
1. **克隆仓库:**
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
2. **构建并启动实验室:**
docker-compose up -d --build
*等待容器完全初始化。Next.js 容器可能需要几分钟来完成首次构建。*
## 💥 漏洞利用
利用逻辑封装在 `exploit/exploit.py` 中。您可以从主机(如果已安装 Python)或直接从 `attacker` 容器运行攻击。
### 方法 A:从 Attacker 容器运行(推荐)
1. 访问 attacker shell:
docker-compose exec attacker bash
2. 安装依赖:
pip install -r requirements.txt
3. **攻击目标 A (原生 React):**
python exploit.py http://vanilla-target:4000/rsc vanilla
4. **攻击目标 B (Next.js):**
python exploit.py http://nextjs-target:3000/ nextjs
### 验证
该漏洞利用尝试在目标服务器的 `/tmp` 目录下创建一个名为 `pwned.txt` 的文件。要验证是否成功:
```
# 检查 Vanilla Server
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# 检查 Next.js Server
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
```
*如果成功,您将看到文件列表。如果利用失败,该文件将不存在。*
## 🛡️ 缓解措施
要在生产环境中修复此漏洞:
1. **React:** 将 `react-server-dom-webpack`(及相关包)升级到版本 **19.0.1**、**19.1.2** 或 **19.2.1+**。
2. **Next.js:** 升级到 **v15.0.5+** 或 **v16.0.7+**。
3. **WAF:** 实施规则以阻止包含诸如 `"$1:__proto__"` 签名或在 multipart body 中异常使用 `"$@"` 的请求。
## 📚 参考资料
* (https://nvd.nist.gov/vuln/detail/CVE-2025-55182)
* (https://github.com/msanft/CVE-2025-55182)
*大学项目 - 安全审计与漏洞研究*
标签:0-day, CISA项目, CMS安全, CVE-2025-55182, CWE-502, Docker, Exploit开发, Express, Flight协议, GNU通用公共许可证, JavaScript, Node.js, OPA, PoC, Python, RCE, React2Shell, React Server Components, RSC, 不安全的反序列化, 原型污染, 安全防御评估, 无后门, 暴力破解, 漏洞复现, 编程工具, 网络安全, 请求拦截, 远程代码执行, 逆向工具, 隐私保护, 靶场