tanvirahmedcs/CVE-2025-55182
GitHub: tanvirahmedcs/CVE-2025-55182
针对 CVE-2025-55182 React Server Components 未授权 RCE 漏洞的 Nuclei 检测模板,支持网络探测与本地依赖版本被动扫描。
Stars: 0 | Forks: 0
# CVE-2025-55182 — React Server Components 未授权 RCE
## 概述
CVE-2025-55182 是 React Server Components (RSC) 中一个极其严重的未授权远程代码执行 (RCE) 漏洞,被称为 **React2Shell**。该缺陷存在于 React 通过 **Flight 协议** 解码发送到 React Server Function endpoint 的 payload 的方式中。攻击者可以向受漏洞影响的服务器发送单个特制的 HTTP POST 请求来执行任意代码——不需要任何凭证,也不需要用户交互。
即使应用程序没有暴露显式的 Server Function endpoint,只要它们支持 React Server Components,就仍然容易受到攻击。
## 受影响的包和版本
| 包名 | 受漏洞影响的版本 | 已修复版本 |
|---|---|---|
| `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 |
**受影响的框架**(当使用受漏洞影响的 React 包时):Next.js 15.x / 16.x (App Router)、React Router、Waku、RedwoodSDK、Parcel RSC、Vite RSC 插件。
## CVSS v3.1 评分明细
| 评估指标 | 值 |
|---|---|
| 攻击向量 | 网络 |
| 攻击复杂度 | 低 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 影响范围 | 改变 |
| 机密性 | 高 |
| 完整性 | 高 |
| 可用性 | 高 |
| **总分** | **10.0(严重)** |
向量字符串:`CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H`
## 漏洞原理
React Server Components 使用一种称为 **Flight 协议** 的二进制传输格式,将组件树从服务器流式传输到客户端。该协议也处理 *Server Functions*(以前称为 Server Actions)——即接受来自浏览器的序列化参数的可调用 endpoint。
漏洞存在于 **反序列化器** 中:当 React 处理 Flight payload 时,可能会被诱骗实例化任意的服务器端对象,从而导致完整的 RCE。由于只要启用了 RSC,Flight endpoint 默认就会暴露,并且协议级别不存在身份验证网关,因此利用此漏洞只需要访问服务器的网络权限。
## Nuclei 模板
包含的模板 `CVE-2025-55182.yaml` 使用了三种互补的检测方法。
### 请求 1 — 通用 RSC Flight Endpoint 探测
向根路径发送一个带有 `Content-Type: text/x-component` 的最小化 POST 请求。受漏洞影响的(或可达的)RSC 服务器会以相同的内容类型进行响应,并且其 Flight 流主体的行以字母数字行 ID 加冒号(例如 `0:`、`1:`)或 React 引用标记(`$L`、`$S`、`$I`、`$@`)开头。
```
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
```
**匹配条件:** HTTP 200 + `text/x-component` 标头 + 主体中的 Flight 流正则匹配。
### 请求 2 — Next.js App Router RSC 探测
Next.js 通过 `RSC: 1` 标头和 `?_rsc=` 查询参数来标识 RSC 请求。此请求模拟浏览器的预取行为,以确认 App Router Flight endpoint 是可达的。
```
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
```
**匹配条件:** HTTP 200 + `text/x-component` 标头。
### 请求 3 — Server Function (Action) Endpoint 探测
在发送最小化格式错误的 Flight payload 的同时附带一个 `Next-Action` 标头(用于调用 Server Functions 的机制)。受漏洞影响的服务器会尝试反序列化该 payload;即使是包含 RSC 特定标头的错误响应,也能确认该 endpoint 的存在。
```
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
```
**匹配条件:** HTTP 200/400/500 + `text/x-component` 或 `x-action-revalidated` 标头。
### 基于文件的(被动)检测
扫描本地的 `*.json` 文件(例如 `package-lock.json`、`yarn.lock`),查找易受攻击的包名以及匹配 `19.0.0`、`19.1.0`、`19.1.1` 或 `19.2.0` 的版本正则表达式。这对于在不发送任何网络流量的情况下审计代码仓库或 CI 流水线非常有用。
## 用法
### 前置条件
- [Nuclei](https://github.com/projectdiscovery/nuclei) v3.x 或更高版本
```
# 安装 / 更新 Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
```
### 主动扫描 — 单个目标
```
nuclei -target CVE-2025-55182.yaml -u https://target.example.com
```
### 主动扫描 — 目标列表
```
nuclei -target CVE-2025-55182.yaml -l targets.txt
```
### 被动扫描 — 本地项目目录
```
nuclei -target CVE-2025-55182.yaml -target ./path/to/project
```
### 带有 JSON 报告的详细输出
```
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -v -je results.json
```
### 限速扫描(推荐用于生产环境目标)
```
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -rl 10 -timeout 10
```
## 修复方案
**立即升级** 至已修复版本:
```
# npm
npm install react-server-dom-webpack@latest
# yarn
yarn upgrade react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# pnpm
pnpm update react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
```
每个分支的最低安全版本:
| 分支 | 最低安全版本 |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
**临时缓解措施**(如果无法立即升级):
- 在 WAF 或反向代理层阻止发往 RSC/Flight endpoint 的 HTTP POST 请求。
- 在应用补丁之前完全禁用 React Server Components。
- 部署针对入站 POST 请求中 `text/x-component` 内容类型的 WAF 规则(针对此 CVE 的 Google Cloud Armor 规则已公开提供)。
## 注意事项与局限性
- HTTP 探测匹配成功确认了 **Flight endpoint 是可达的**,这是漏洞存在的一个强烈指标。确切的版本确认需要检查 `package-lock.json`、`node_modules` 或 SBOM。
- 该模板**不会**发送攻击性 payload;它仅用于检测,可安全地在生产系统上运行。
- 不使用 React Server Components 的应用程序(纯客户端 React 应用)**不受**影响。
## 参考文献
- [React 官方安全公告 — react.dev](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)
- [GitHub 安全公告 — GHSA-fv66-9v8q-g76r](https://github.com/facebook/react/security/advisories/GHSA-fv66-9v8q-g76r)
- [NVD — CVE-2025-55182](https://nvd.nist.gov/vuln/detail/CVE-2025-55182)
- [Zscaler ThreatLabz — React2Shell](https://www.zscaler.com/blogs/security-research/react2shell-remote-code-execution-vulnerability-cve-2025-55182)
- [Google Cloud 博客 — 威胁行为者利用 React2Shell](https://cloud.google.com/blog/topics/threat-intelligence/threat-actors-exploit-react2shell-cve-2025-55182)
- [Palo Alto Unit 42 — CVE-2025-55182 漏洞利用](https://unit42.paloaltonetworks.com/cve-2025-55182-react-and-cve-2025-66478-next/)
## 免责声明
此模板仅供授权的安全测试和漏洞评估使用。对您不拥有或未获得明确书面测试许可的系统运行此模板可能是违法的。作者对任何滥用行为不承担责任。
标签:CISA项目, PoC, RCE, React, Syscalls, Web安全, 暴力破解, 蓝队分析