React远程代码执行漏洞(CVE-2025-55182)详解及复现
[TOC]
名词解释
react是什么?
简单来说,React 是一个 JavaScript 库(注意,它不是框架)。
它用于构建用户界面,也就是 UI 部分,很多人认为 React 是 MVC 中的 V(视图)。
React 起源于 Facebook 的内部项目,于 2013 年 5 月开源。
图标如下:
Next.js是什么?
一个基于React的全栈Web开发框架。React本身只是一个库,要构建一个完整的生产级应用(需要考虑路由、服务端渲染、打包优化、API 等)需要搭配很多其他工具进行复杂配置。Next.js 把这些最佳实践和工具都整合好了,提供了一套开箱即用的解决方案。
React Server Components (RSC)是什么?
React的一种新架构模型,它允许开发者将组件明确地分为两种:
客户端组件:传统的 React 组件,在浏览器中运行,可以处理交互、使用 useState、useEffect 等。
服务器组件:默认在服务器端运行的组件。它们不在客户端打包,因此可以安全、直接地访问数据库、文件系统等后端资源,并且不会增加客户端 JavaScript 包的大小。
这样做的好处:提升性能(减少客户端代码)、改善开发体验(直接从组件访问数据)、增强安全性(敏感逻辑和密钥保留在服务器)。
为了支持RSC,React 团队定义了一种特殊的"协议"(Flight协议),用于在服务器端和客户端之间传输RSC的渲染结果(不是HTML,而是一种紧凑的、可序列化的数据流格式)。
react-server-dom-webpack是什么?
这是RSC最早的官方实现,与 Webpack 打包工具深度集成。它告诉Webpack如何区分服务器组件和客户端组件,并如何打包它们。
react-server-dom-turbopack是什么?
这是为了支持Turbopack (由 Webpack 原作者开发、Vercel 推出的新一代增量打包工具,速度极快)而提供的RSC绑定器。Next.js 13+ 开始,当你在next.config.js中启用 experimental.turbopack = true 时,就会使用这个包(通过 --turbopack 标志启动开发服务器)。
react-server-dom-parcel是什么?
这是为了支持Parcel(另一个零配置的打包工具)而提供的 RSC 绑定器。如果你使用 Parcel 打包工具来构建你的React应用,并且想使用RSC特性,就需要用到这个包。它让Parcel具备了理解 RSC 的能力。
漏洞原因
根本原因存在于 react-server-dom-webpack 的 requireModule 函数中
1 | // 有漏洞的代码 |
因metadata[2]可控,这个函数在访问对象属性时使用了方括号表示法,但没有进行 hasOwnProperty 检查,这允许攻击者通过原型链遍历访问危险的 Node.js 内置模块,如 vm、child_process 和 fs
漏洞影响范围
受影响的React包:
react-server-dom-parcel:19.0.0、19.1.0、19.1.1和19.2.0
react-server-dom-webpack:19.0.0、19.1.0、19.1.1和19.2.0
react-server-dom-turbopack:19.0.0、19.1.0、19.1.1和19.2.0
受影响的框架和工具:
Next.js版本 ≥14.3.0-canary.77、≥15 和 ≥16
Vite、Parcel、React Router、RedwoodSDK、Waku等嵌入或依赖于React Server Components实现的框架和插件
利用条件
受影响条件:
-
如果您的应用只是纯前端页面(没有服务器端代码),则不受此漏洞影响
-
如果您的应用没有使用React服务端组件(RSC)功能,则不受此漏洞影响
-
前后端分离项目:如果您使用React仅作为前端开发,后端是独立的API服务,则不受此漏洞影响
-
如果您没有使用Next.js进行全栈开发项目,则不受此影响
-
如果您的Next.js使用Pages Router而非App Router架构模型,则不受此影响。
漏洞环境搭建
因为 react 实际上就是 JavaScript 类库,只要引用了这个类库,就可以使用它。
在实际操作中,有两种方式可选:
-
通过 npm 创建 react 项目:create-react-app
-
通过 CDN 引用 react 库
搭建一
我们使用第一种方式搭建:
-
确保安装了 Node.js 和 npm
1
2node -v
npm -v -
安装 create-react-app
React 提供了官方工具 Create React App,用于快速搭建 React 项目。
通过该命令我们无需配置就能构建 React 开发项目。
create-react-app创建的项目是基于 Webpack + ES6 。1
npm install -g create-react-app
-
创建项目
在本地目录下选择一个目录准备放置 react 项目。
然后执行以下命令创建第一个 react 项目。
1
create-react-app 项目名
比如:
1
create-react-app react-01
然后启动项目
1
2cd react-01
npm startreact 默认使用 3000 端口作为本地开发环境,它自动使用浏览器打开,就能看到如下界面:
搭建二:命令一键搭建
或者使用如下命令一键部署:
1 | npm install |
在线环境
1 | https://www.ddpoc.com/DVB-2025-10412.html |
环境包
1 | https://www.xsssql.com/wp-content/uploads/2025/12/CVE-2025-55182-test.zip |
漏洞复现
poc如下:
1 | POST /formaction HTTP/1.1 |
- 或者使用网上脚本一把梭
1 | 网址:https://github.com/whiteov3rflow/CVE-2025-55182-poc |
- 也可以自己理解编写poc
利用原理
这个漏洞的核心在于 React Server Components 的 Server Actions 功能实现中存在的原型链污染问题。具体攻击流程如下:
- 请求格式构造:
利用特殊格式的参数名 $ACTION_REF_0 和 $ACTION_0:0
这些参数名对应 React Server Actions 中特定的数据处理方式
- 原型链污染利用:
当参数中的 id 设置为 vm#runInThisContext 等特殊值时
由于 requireModule 函数缺少属性检查,会尝试通过原型链查找并访问这些模块
这样就绕过了正常的模块访问限制
- 命令执行路径:
攻击者可以选择多种方式执行代码或命令
vm 方法最强大,允许执行任意 JavaScript 代码
child_process 方法直接执行系统命令
fs 方法用于读取文件内容
修复方式
Next.js修复方案:
• Next.js 14.3.0-canary.77 或更高版本的 canary 版本,请降级到最新的稳定版 14.x
• 15.0.x修复方案:npm install next@15.0.5
• 15.1.x修复方案:npm install next@15.1.9
• 15.2.x修复方案:npm install next@15.2.6
• 15.3.x修复方案:npm install next@15.3.6
• 15.4.x修复方案:npm install next@15.4.8
• 15.5.x修复方案:npm install next@15.5.7
• 16.0.x修复方案:npm install next@16.0.7
React修复方案:
• react-server-dom-parcel
• react-server-dom-turbopack
• react-server-dom-webpack
请升级至 19.2.1或19.1.2或19.0.1版本
总结
CVE-2025-55182 是一个极其严重的漏洞,允许未授权远程攻击者在使用易受攻击版本的 React 应用中执行任意代码。该漏洞利用了原型链污染技术,绕过了 React Server Components 中的安全机制。此漏洞证明了即使是主流前端框架也可能存在严重的后端安全问题,特别是在实现服务器端功能时。







