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 ### 📄 许可证及使用条款 本项目仅用于安全研究、审计和测试目的,
未经授权用于真实系统是非法的。 因使用本工具而产生的所有法律责任均由用户本人承担。
标签:Cutter, Go语言工具, Maven, MITM代理, 漏洞验证, 编程工具, 远程代码执行, 逆向工具