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, 不安全的反序列化, 原型污染, 安全防御评估, 无后门, 暴力破解, 漏洞复现, 编程工具, 网络安全, 请求拦截, 远程代码执行, 逆向工具, 隐私保护, 靶场