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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2025-55182-analysis — 浅谈React Server Components RCE 漏洞分析 | Kitploit
工具/GitHubGitHub/airis101/cve-2025-55182-analysis
漏洞分析代码分析漏洞利用Web应用程序漏洞利用论文与研究学习与教育
GitHubairis101/cve-2025-55182-analysis

CVE-2025-55182-analysis

浅谈React Server Components RCE 漏洞分析

查看仓库
126个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

一、漏洞概述

这两天有被React的一个反序列化RCE漏洞刷屏,官方CVSS直接拉满10.0分,和当年的Log4j持平。一时间不少传闻声称其为现代前端的Log4j,引起了不少公司开发者恐慌,于是乎大家一觉起来就是各种的查文献打补丁...。在此同时,网上也有传出不少质疑声,有人测试后发现该漏洞并宣传的那样,相反漏洞利用是需要一定条件的。于是我决定抽时间深入研究一下这个漏洞。

1.1 漏洞信息

  • CVE编号: CVE-2025-55182
  • CVSS评分: 10.0 (Critical)
  • 漏洞类型: 原型链污染 → 远程代码执行
  • 受影响版本: react-server-dom-webpack < 19.2.0、react-server-dom-turbopack < 19.2.0
  • 影响范围: 使用 React Server Components 的应用

二、漏洞原理分析

2.1 漏洞根本原因

该漏洞产生的原因如下,在 [email protected] 中,服务端解析 Server Action 的关键函数是 requireModule(伪代码):

root@kitploit:~
function requireModule(metadata) {
  var moduleExports = __webpack_require__(metadata[0]);
  // ...
  return "*" === metadata[2]
    ? moduleExports
    : "" === metadata[2]
      ? moduleExports.__esModule
        ? moduleExports.default
        : moduleExports
      : moduleExports[metadata[2]];  // ← 漏洞点
}

2.2 漏洞核心问题

漏洞产生的核心是 moduleExports[metadata[2]] 这部分,没有对 metadata[2] 这部分进行校验,导致攻击者不仅能访问模块自己的导出属性,还可以访问原型链上的属性(如 constructor、__proto__ 等),当攻击者构造 metadata[0] 后(如将其指向为 vm),便可再次构造 metadata[2] 进而实现导出指定模块中的危险方法,如 vm.runInThisContext,进而造成漏洞利用。


三、漏洞利用分析

我在分析时候,参考了 ejpir 提供的测试环境以及漏洞利用,以 vm_runInThisContext 这条 Code Execution gadget 为例进行了分析,过程如下(注意,真实环境下漏洞利用过程会有一定区别!):

步骤 1: 接收请求

首先,发送带有 payload 的请求后,断点到获取请求位置如下:

步骤 2: 解析表单数据

随后程序执行到 const formData = parseMultipart(buffer, boundaryMatch[1]); 位置,跟入 parseMultipart

parseMultipart 将请求体数据提取后返回给 formData

步骤 3: 调用 decodeAction(漏洞入口)

跟入 const actionFn = await decodeAction(formData, serverManifest); 漏洞产生位置

跟入 loadServerReference

步骤 4: 漏洞核心代码 requireModule

下面就到了漏洞产生核心代码位置 requireModule,跟入

返回将 id 值以 # 的前后作为模块方法,并将 bound 参数值作为方法参数返回

步骤 5: 执行 Payload

跟入 actionFn,执行最终 payload

至此,漏洞利用结束!


四、总结&&防御

这个漏洞本身仍是对输入校验不严格导致的,这点和Log4j、fastjson如出一辙。我在上面测试的是vm_runInThisContext,实际该漏洞有多个gadget可利用,如

  • vm#runInThisContext
  • vm#runInNewContext
  • child_process#execSync
  • child_process#execFileSync
  • child_process#spawnSync
  • fs#readFileSync
  • fs#writeFileSync
  • #constructor
  • #__proto__
  • #prototype

攻击者可以利用此漏洞实现:

  • 远程代码执行(RCE):通过 vm#runInThisContext 或 child_process#execSync 执行任意系统命令
  • 文件系统操作:通过 fs#readFileSync、fs#writeFileSync 读取/写入任意文件
  • 持久化攻击:写入 SSH 公钥、修改 .bashrc、覆盖应用文件等
  • 信息泄露:读取敏感配置文件(.env、私钥、数据库凭证等)

基于此,可以给出相关的防御措施,如下

1、临时防御

基于此,临时防御可以从这些角度出发,可以在waf上配置拦截这些危险字段的规则,进而及时拦截恶意攻击。另外也可以在nginx上进行匹配拦截,如下

root@kitploit:~
# Nginx 配置示例
location /formaction {
    # 拦截包含危险模块引用的请求
    if ($request_body ~* "(vm#|child_process#|fs#|module#)") {
        return 403;
    }
    # 拦截原型链污染尝试
    if ($request_body ~* "(#constructor|#__proto__|#prototype)") {
        return 403;
    }
}

2、尽快更新

目前官方已发布安全更新,立即升级到安全版本!:

root@kitploit:~
# 升级 react-server-dom-webpack
npm install react-server-dom-webpack@>=19.2.0

# 升级 react-server-dom-turbopack
npm install react-server-dom-turbopack@>=19.2.0

# Next.js 用户
npm install next@>=15.0.5

修复版本:

  • react-server-dom-webpack: >= 19.2.0
  • react-server-dom-turbopack: >= 19.2.0
  • next.js: >= 15.0.5

我在分析上面漏洞时候,参考了 whiteov3rflow 的相关exp,进一步编写了测试环境的漏洞检测工具,并放在了github仓库当中 需要自检的同学访问即可获取(注意,由于原作者测试环境缘故,目前可能仅适用于原测试环境,待后续完善,需要的同学也可以拿去自改...),注意需要合法授权使用,禁止进行未授权破坏!

3、慎言、慎行!

截至当下,2025.12.5 ,我在网上看到的情况是,该漏洞"风声"如过山车般起起伏伏,时而"核弹",时而"水洞",没一会儿又转变为"核弹"...,相关的漏洞利用方式更是层出不穷。目前根据相关消息来看,"核弹"可能会坐实,只不过影响范围相对与log4j小而已,但无论如何,所有涉及朋友都应尽快更新,以绝后患!!!

另外给开发朋友一个安全忠告,永远不要相信用户的输入,log4j、fastjson以及当下的ReactRCE均是因为这一点躺枪了,因此在实际业务开发时候对于危险位置一定要采用沙箱或者白名单等方式进行严格校验,避免悲剧发生!!!

纸上得来终觉浅,绝知此事要慎行。


参考资料

  • CVE-2025-55182 官方公告
  • React Security Advisory
  • GitHub PoC by ejpir
  • React Server Components 文档
下载工具