React Server Components Flight 协议远程代码执行检测工具
本扫描器用于识别可能受 CVE-2025-55182(React)和 CVE-2025-66478(Next.js)影响的系统,这两个漏洞是 React Server Components(RSC)"Flight" 协议中的严重未经身份验证的远程代码执行漏洞。
主要风险因素:
React 的 Server Components 实现中存在一个严重的非安全反序列化漏洞。RSC "Flight" 协议未能正确验证传入负载的结构和类型,允许攻击者注入恶意数据,从而影响服务器端执行。
攻击者 → 精心构造的 HTTP POST → RSC 端点 → 反序列化 → RCE
该攻击仅需向任意 Server Function 端点发送一个精心构造的 HTTP 请求,无需身份验证,且默认配置即可利用。
本扫描器采用被动指纹识别和协议探测来识别可能受影响的系统。它不会尝试实际利用。
┌─────────────────────────────────────────────────────────────────┐
│ 检测流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. 框架检测 │
│ ├── HTTP 响应头(X-Powered-By: Next.js) │
│ ├── 页面源码(__NEXT_DATA__、react 产物) │
│ └── 构建清单 │
│ │
│ 2. 版本指纹识别 │
│ ├── JS 包中的内嵌版本字符串 │
│ ├── 包版本模式 │
│ └── 构建清单分析 │
│ │
│ 3. RSC 端点发现 │
│ ├── 发送 RSC 头部(RSC: 1, Accept: text/x-component) │
│ ├── 分析响应 Content-Type │
│ └── 检测响应中的 Flight 协议标记 │
│ │
│ 4. 服务端操作探测 │
│ ├── 携带最小 Flight 负载的 POST 请求 │
│ ├── 检查反序列化处理 │
│ └── 识别操作端点 │
│ │
│ 5. 漏洞评估 │
│ ├── 将版本与已知受影响范围关联 │
│ ├── RSC 端点存在性加权 │
│ └── 生成置信度评分结果 │
│ │
└─────────────────────────────────────────────────────────────────┘
Flight 协议使用特定的有线格式:
0:["$","div",null,{"children":"Hello"}]
1:["$","$L1",null,{}]
2:{"name":"ServerComponent"}
扫描器寻找以下内容:
text/x-component Content-Type{编号}:{负载}$, $L, $F, $@, $undefined在以下位置搜索版本模式:
/_next/static/chunks/)[email protected])requests 库# 克隆或下载扫描器文件
# 安装依赖
pip install -r requirements.txt
# 验证安装
python3 cve-2025-55182-scanner.py --help
# 单个目标
python3 cve-2025-55182-scanner.py -t https://example.com
# 详细输出
python3 cve-2025-55182-scanner.py -t https://example.com -v
# 创建目标文件(每行一个 URL)
echo "https://app1.example.com" > targets.txt
echo "https://app2.example.com" >> targets.txt
# 扫描所有目标
python3 cve-2025-55182-scanner.py -f targets.txt -o results.json
python3 cve-2025-55182-scanner.py -t https://example.com \
--timeout 15 \
--threads 10 \
--user-agent "SecurityAudit/1.0" \
-v \
-o scan_results.json
用于更深入的协议分析:
python3 rsc_analyzer.py https://example.com 2>/dev/null
这将提供详细的 Flight 协议分析和组件枚举。
======================================================================
目标: https://app.example.com
状态: VULNERABLE
框架: Next.js
版本: 19.1.0
RSC 端点: /, /_next/data
证据:
- X-Powered-By 头部: Next.js
- 检测到 React 版本: 19.1.0
- 在 / 处有 RSC Flight 响应 (Content-Type: text/x-component)
- 在 / 处检测到 Flight 协议标记
建议:
→ 紧急: 需要立即修补!
→ 将 React 升级至 19.0.1、19.1.2 或 19.2.1
→ 将 Next.js 升级至最新修补版本 (15.0.5+, 16.0.7)
→ 启用 WAF 规则以阻止恶意 RSC 负载
→ 监控对 RSC 端点的异常 POST 请求
======================================================================
{
"target": "https://app.example.com",
"status": "VULNERABLE",
"framework": "Next.js",
"version": "19.1.0",
"rsc_endpoints": ["/", "/_next/data"],
"evidence": [
"X-Powered-By header: Next.js",
"React version detected: 19.1.0",
"RSC Flight response at / (Content-Type: text/x-component)"
],
"recommendations": [
"CRITICAL: Immediate patching required!",
"Upgrade React to 19.0.1, 19.1.2, or 19.2.1"
]
}
✅ 在包中找到明确的版本字符串
✅ X-Powered-By 头部暴露版本
✅ 存在多个 RSC 指示器
✅ Flight 协议响应已确认
✅ 服务器接受 RSC POST 请求
❌ 未暴露版本信息
❌ WAF/CDN 屏蔽响应
❌ 自定义框架实现
❌ 大量缓存阻止探测
❌ 速率限制阻止检测
| 场景 | 原因 | 缓解措施 |
|---|---|---|
| 缓存的旧版本字符串 | CDN/构建缓存 | 检查多个端点 |
| 更新后 RSC 已禁用 | 配置更改但未重新构建 | 验证构建日期 |
| 非标准 RSC 实现 | 自定义框架 | 手动验证 |
| 场景 | 原因 |
|---|
| 因素 | 对检测的影响 |
|---|---|
| Cloudflare/WAF | 可能阻止探测、屏蔽头部 |
| CDN 缓存 | 可能提供过时的版本信息 |
| 负载均衡器 | 可能路由到不同的应用版本 |
| Kubernetes/容器 | 每个 Pod 可能不同 |
对于关键发现,始终通过以下方式验证:
npm audit 或 yarn audit立即采取行动(0-24 小时):
立即修补
npm install [email protected] [email protected]
npm install [email protected] # 或最新修补版本
启用 WAF 规则 - Cloudflare、Akamai 和 AWS WAF 已部署保护性规则
监控日志 - 检查对 RSC 端点的可疑 POST 请求
短期行动(24-72 小时):
package.json 中的 React/Next.js 版本# 批量扫描所有公司资产
cat domains.txt | while read domain; do
python3 cve-2025-55182-scanner.py -t "$domain" -o "results_${domain//\//_}.json"
done
# 汇总结果
jq -s '[.[] | select(.status == "VULNERABLE" or .status == "LIKELY_VULNERABLE")]' results_*.json > critical_findings.json
# GitHub Actions 示例
- name: CVE-2025-55182 Check
run: |
python3 cve-2025-55182-scanner.py -t ${{ env.APP_URL }} -o results.json
if grep -q '"status": "VULNERABLE"' results.json; then
echo "::error::Critical vulnerability detected!"
exit 1
fi
| 版本 | 日期 | 变更说明 |
|---|---|---|
| 1.0.0 | 2025-12-03 | 初始版本发布 |
本工具仅用于经授权的安全测试。仅限在您拥有或已获得明确书面许可的系统上使用。作者不对因使用本工具而产生的误用或损害承担任何责任。
| 包名 | 受影响版本 | 已修复版本 |
|---|
| react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| Next.js | 14.3.0-canary.77+, 15.x, 16.0.0-16.0.6 | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
| 指标 | 检测方法 | 置信度 |
|---|
X-Powered-By: Next.js | HTTP 头部检查 | 高 |
__NEXT_DATA__ script 标签 | HTML 源码解析 | 高 |
/_next/ 资源路径 | HTML 源码解析 | 中 |
| React 水合标记 | HTML 源码解析 | 中 |
| 选项 | 描述 | 默认值 |
|---|
-t, --target | 单个目标 URL | - |
-f, --file | 包含目标列表的文件 | - |
-o, --output | JSON 输出文件 | - |
-v, --verbose | 显示详细证据 | False |
--timeout | 请求超时(秒) | 10 |
--threads | 并发线程数 | 5 |
--verify-ssl | 验证 SSL 证书 | False |
--user-agent | 自定义 User-Agent | Mozilla/5.0... |
--no-banner | 隐藏横幅 | False |
| 状态 | 含义 | 需采取的措施 |
|---|
| 🔴 VULNERABLE | 检测到已确认的受影响版本 | 立即修补 |
| 🔴 LIKELY_VULNERABLE | React 19.x + RSC,版本在受影响范围内 | 紧急修补 |
| 🟡 POTENTIALLY_VULNERABLE | 发现 RSC 端点,版本未知 | 调查并及时修补 |
| 🟢 NOT_VULNERABLE | 已确认修补版本 | 关注更新 |
| 🔵 UNKNOWN | 无法确定状态 | 需要手动验证 |
| ⚪ ERROR | 扫描失败 | 重试或手动检查 |
| 结果类型 | 置信度 | 解释 |
|---|
| VULNERABLE(含版本) | 高(90%+) | 版本字符串匹配已知受影响版本 |
| VULNERABLE(通过头部) | 高(85%+) | X-Powered-By 暴露了受影响版本 |
| LIKELY_VULNERABLE | 中高(70-85%) | 检测到 React 19.x,RSC 激活,版本未明确修补 |
| POTENTIALLY_VULNERABLE | 中(50-70%) | RSC 端点响应,但版本未知 |
| NOT_VULNERABLE | 高(85%+) | 明确检测到修补版本 |
| UNKNOWN | 低(<50%) | 收集的信息不足 |
| 缓解措施 |
|---|
| 版本从包中被剔除 | 生产环境优化 | 检查构建清单 |
| WAF 阻止探测 | 安全控制 | 从允许的 IP 测试 |
| RSC 在非标准路径 | 自定义路由 | 扩展路径字典 |
| 无 SSR 指示器的 SPA | 仅客户端渲染 | 检查 API 端点 |
| 功能开关 | RSC 可能按条件启用 |