React Server Components 远程代码执行漏洞复现验证和修复【CVE-2025-55182】

一、前言

       近日,Next.js生态曝出最高级别安全漏洞CVE-2025-55182,其CVSS评分达10.0(严重程度最高),攻击者可通过特制请求实现远程代码执行(RCE),对使用相关技术栈的生产环境构成极大威胁。作为当前前端开发领域最流行的服务端渲染框架之一,Next.js的该漏洞覆盖范围广、攻击门槛低,需要高度关注并及时处置,因此这篇文章将会讲解介绍并验证修复该漏洞。

1.1、受影响范围

       关于CVE-2025-55182漏洞Next.js 是已确认受影响的主要框架,但所有基于 RSC 的实现都可能受影响,同时核心受影响场景需同时满足使用App Router和启用React Server Components(RSC)两大条件,具体覆盖情况如下:

  • 受影响版本:Next.js 15.x全系列、Next.js 16.x全系列、14.3.0-canary.77及之后的测试版本;
  • 涉及核心包:react-server-dom-turbopack、react-server-dom-webpack,覆盖浏览器、边缘计算、Node.js全环境及开发/生产全构建模式;
  • 安全场景:使用Pages Router的项目、运行于Edge Runtime的应用、14.3.0-canary.77之前的测试版本,均不受该漏洞影响。

1.2、通过下面几点确认是否在漏洞影响范围:

  • 框架版本是否在受影响范围内:检查是否使用 Next.js 15.x 或 16.x,或任何依赖 React 19 + RSC 的框架。
  • 是否启用了 React Server Components(RSC):包括 Next.js App Router 默认启用的 RSC 机制;如果项目使用此功能,则风险较高。
  • 依赖组件中是否包含 react-server 系列包:如 react-server、react-server-dom-webpack、react-server-dom-turbopack 等,只要存在这些包,就可能受影响。
  • 是否部署在可被外部访问的环境中:公开 Web 服务会暴露攻击面,即使是默认模板项目也可能开箱即存在风险。
  • 是否使用基于 RSC 的第三方方案:如 RedwoodJS、React Router 预览版、Vite/Parcel RSC 插件等,它们如果引用受影响依赖,同样属于风险范围。

    开发者只要逐项核对以上点,即可快速判断自己的系统是否需要修补或升级。

二、漏洞核心信息速览

       CVE-2025-55182是存在于Next.js编译后React Server DOM相关包中的原型污染漏洞,其核心风险点聚焦于requireModule函数的逻辑缺陷。该漏洞打破了JavaScript对象的属性访问边界,为攻击者提供了注入恶意代码的可乘之机。

       从漏洞基础属性来看,其具备三大显著特征:一是危害等级极高,CVSS 10.0的评分意味着攻击者无需复杂前置条件即可完成攻击;二是影响范围广泛,覆盖Next.js 15.x全系列、16.x部分版本及14.3.0-canary.77之后的测试版本;三是利用成本低,仅需构造特制请求即可触发,无需获取额外权限。

三、漏洞根源:原型污染的“链式攻击”

       要理解CVE-2025-55182的危害,首先需明确其技术本质——原型污染漏洞。JavaScript作为基于原型的编程语言,所有对象都通过“原型链”实现属性继承,最终指向Object.prototype。当程序未对对象属性的访问权限进行严格校验时,攻击者便可通过操纵__proto__等特殊属性污染原型,进而影响所有继承自该原型的对象。

       该漏洞的触发链路十分清晰:Next.js的requireModule函数负责模块属性的请求与加载,但在核心逻辑中缺少关键的hasOwnProperty校验步骤。这意味着当攻击者请求模块属性时,函数会直接遍历原型链查找属性,而非仅局限于模块自身的直接属性。攻击者可利用这一缺陷,通过构造包含__proto__的恶意请求参数,向Object.prototype注入恶意属性。

       例如,攻击者可通过请求注入类似__proto__.maliciousFunc=xxx的恶意代码,由于原型链的继承特性,该恶意属性会被所有JavaScript对象继承。当应用程序后续调用相关对象属性时,便会触发恶意代码执行,最终实现远程服务器的权限控制,形成完整的攻击闭环。这种攻击方式无需破坏现有代码结构,隐蔽性极强,难以被常规日志监控发现。

技术细节

漏洞本质: 逻辑反序列化漏洞

触发条件: 处理攻击者控制的 RSC 负载

攻击路径: 通过特制 HTTP 请求触发

利用方式: 构造恶意请求实现远程代码执行

四、漏洞验证与复现

4.1、验证环境

      这次使用的设备是天枢平台的两台 openEuler 22.03sp4 服务器和一台交换机模拟企业级虚拟专用网络场景。

本漏洞验证与复现基于以下环境配置:​

操作系统: Openeuler 22.03 sp4

验证平台: 天枢一体化虚拟仿真平台

       本次复现选用OpenEuler 22.03 SP4作为服务器系统,整体环境依赖 Git、NVM、Node.js 等工具,具体搭建步骤如下:

4.2、环境搭建

  • 验证poc

git clone https://github.com/0xHyperia/CVE-2025-55182-poc.git

cd CVE-2025-55182-poc

  • 安装依赖

dnf install git

  • 安装 nvm

[root@localhost~]#curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100 16631  100 16631    0     0  32586      0 --:--:-- --:--:-- --:--:-- 32545

=> Downloading nvm from git to '/root/.nvm'

=> 正克隆到 '/root/.nvm'...

remote: Enumerating objects: 384, done.

remote: Counting objects: 100% (384/384), done.

remote: Compressing objects: 100% (328/328), done.

remote: Total 384 (delta 42), reused 178 (delta 28), pack-reused 0 (from 0)

接收对象中: 100% (384/384), 392.46 KiB | 565.00 KiB/s, 完成.

处理 delta 中: 100% (42/42), 完成.

* (头指针在 FETCH_HEAD 分离)

  master

=> Compressing and cleaning up git repository

=> Appending nvm source string to /root/.bashrc

=> Appending bash_completion source string to /root/.bashrc

=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

  • 配置 nvm 环境变量

  • 检查 nvm 版本

[root@localhost ~]# nvm --version

0.40.3

  • 安装 node

[root@localhost ~]# nvm install 24

  • 验证 Node 版本

[root@localhost ~]# node -v

v24.11.1

[root@localhost ~]# npm -v

11.6.2

  • 进入验证项目

[root@localhost ~]# cd CVE-2025-55182-poc/

  • 安装依赖

[root@localhost CVE-2025-55182-poc]# npm install

npm warn deprecated react-server-dom-webpack@19.0.0: Critical Security Vulnerability in React Server Components

added 131 packages, and audited 132 packages in 3s

21 packages are looking for funding

  run `npm fund` for details

1 critical severity vulnerability

To address all issues, run:

  npm audit fix --force

Run `npm audit` for details.

npm notice

npm notice New patch version of npm available! 11.6.2 -> 11.6.4

npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.6.4

npm notice To update run: npm install -g npm@11.6.4

npm notice

  • 启动漏洞环境端口 3002

 Start vulnerable server (port 3002)

 [root@localhost CVE-2025-55182-poc]# node --conditions react-server --conditions webpack src/server.js

Loading: /root/CVE-2025-55182-poc/node_modules/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js

decodeAction: function

Server at http://localhost:3002

Manifest: [ 'fs', 'child_process', 'vm', 'util' ]

  • 访问漏洞页面

4.3、漏洞验证

利用条件

  • 无需身份验证:攻击者不需要任何账号权限
  • 无需用户交互:无需受害者点击或操作
  • 网络可达性:只要服务器对外可访问即可
  • 本地拉取 poc 执行验证

4.4、 漏洞修复

紧急处理步骤

  • 立即升级:优先升级到修复版本
  • 全面扫描:检查所有 Next.js 应用的版本
  • 安全审计:审查服务器日志,检查是否有异常访问
  • 凭证重置:如果怀疑被攻击,重置所有敏感凭证

4.5、官方修复版本

Next.js 官方已发布修复版本,建议按版本线升级:

# Next.js 15.x 系列升级

npm install next@15.0.5  # 15.0.x

npm install next@15.1.9  # 15.1.x

npm install next@15.2.6  # 15.2.x

npm install next@15.3.6  # 15.3.x

npm install next@15.4.8  # 15.4.x

npm install next@15.5.7  # 15.5.x

# Next.js 16.x 系列升级

npm install next@16.0.7  # 16.0.x

# Canary版本降级

npm install next@14  # 降级到14.x稳定版

4.6、临时缓解措施

如果无法立即升级,可以考虑以下临时措施:

// 临时WAF规则示例

function wafMiddleware(req, res, next) {

  const forbiddenPatterns = [

    /eval\(/,

    /new Function/,

    /require\(/,

    /process\./,

    /global\./

  ];

  

  if (req.body && typeof req.body === 'string') {

    for (const pattern of forbiddenPatterns) {

      if (pattern.test(req.body)) {

        return res.status(403).send('Forbidden');

      }

    }

  }

  next();

}

五、总结

       VE-2025-55182 是一个典型的框架级高危漏洞,暴露了现代 Web 开发中依赖管理的重要性。

该漏洞的严重性在于:

影响范围广: 几乎所有使用 Next.js App Router 的现代 Web 应用

攻击门槛低: 无需身份验证,无需用户交互

危害程度高: 可导致完全的服务器控制权丢失

建议所有 Next.js 开发者立即行动,检查并升级到安全版本,确保应用安全。

参考资料

React 官方安全公告

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值