CVE-2025-55182 (React2Shell) 安全研究报告
React2Shell(CVE-2025-55182)是一个影响React Server Components的高危远程代码执行漏洞(CVSS 10.0),允许攻击者通过恶意HTTP请求在服务器上执行任意代码。该漏洞影响Next.js等框架和多个版本。修复方案已发布,建议立即升级并实施多层防护措施以应对潜在威胁。 2026-1-9 07:30:53 Author: www.freebuf.com(查看原文) 阅读量:15 收藏

CVE-2025-55182 (React2Shell) 安全研究报告

执行摘要

CVE-2025-55182,也被称为"React2Shell",是一个影响React Server Components的严重远程代码执行漏洞。该漏洞的CVSS评分为10.0(满分),属于最高危级别。攻击者无需任何身份验证即可通过发送单个恶意HTTP请求在目标服务器上执行任意代码。

关键信息:

  • CVE编号:CVE-2025-55182

  • 披露时间:2025年12月3日

  • 严重程度:Critical (CVSS 10.0)

  • 漏洞类型:未授权远程代码执行 (Unauthenticated RCE)

  • 影响范围:React Server Components 19.0.0, 19.1.0, 19.1.1, 19.2.0

  • 受影响框架:Next.js 15.x/16.x, React Router, Waku, Parcel RSC, Vite RSC等


1. 漏洞背景

1.1 React Server Components简介

React Server Components (RSC) 是React 19引入的一项新特性,允许组件在服务器端渲染并通过React Flight协议与客户端通信。这种架构模式旨在提高性能并减少客户端JavaScript包的大小。

1.2 React Flight协议

React Flight协议是RSC架构中用于服务器和客户端之间通信的二进制序列化协议。它负责:

  • 序列化服务器端组件树

  • 传输组件数据到客户端

  • 反序列化客户端接收的数据

  • 处理Server Actions的请求和响应

1.3 漏洞发现时间线

  • 2025年12月3日:漏洞公开披露

  • 2025年12月3日:React团队发布安全公告

  • 2025年12月5日:观察到野外利用活动

  • 2025年12月:CISA将其加入已知被利用漏洞目录(KEV)


2. 漏洞技术分析

2.1 漏洞根本原因

CVE-2025-55182的根本原因在于React Flight协议的服务器端反序列化逻辑存在严重缺陷,具体体现在ReactFlightReplyServer.js文件中的reviveModel函数。

核心问题:

  1. 缺乏输入验证:服务器端在反序列化Flight协议payload时,未对传入数据进行充分的验证和清理。

  2. 信任客户端数据:React Flight协议的设计假设所有Flight payload都来自可信的React客户端,但实际上攻击者可以构造任意payload。

  3. 不安全的对象属性扩展:反序列化过程中,React会直接展开对象属性而不检查是否包含危险的属性名(如__proto__constructor等)。

  4. 原型污染漏洞:攻击者可以通过精心构造的payload污染JavaScript对象的原型链,进而控制程序执行流程。

2.2 漏洞利用机制

CVE-2025-55182的利用过程涉及多个精心设计的步骤,利用JavaScript的动态特性和React Flight协议的反序列化机制。

利用链分析:

阶段1:构造恶意Chunk对象

  • 攻击者通过$@x语法访问React内部的Chunk对象

  • 构造一个伪造的Chunk对象,包含恶意的.then方法

  • 利用React对Promise和thenable对象的自动解析机制

阶段2:触发Promise解析

  • JavaScript运行时自动解析嵌套的Promise和thenable对象

  • 当React尝试解析伪造的Chunk时,会调用攻击者控制的.then方法

  • 这导致重新进入解析器,并使用攻击者控制的伪造Chunk对象

阶段3:操纵内部状态

  • 通过.then方法的执行,攻击者获得对_response对象的控制权

  • _response对象上植入恶意属性

  • 利用多个gadget链路径实现代码执行

阶段4:执行任意代码

  • 最常用的gadget是_formData.get方法

  • 通过原型污染,将_formData.get替换为Function构造函数

  • 构造包含constructor.constructor的链式调用

  • 最终通过Function构造函数执行任意JavaScript代码

2.3 Payload结构分析

典型的exploit payload包含以下关键元素:

'0': '$1'                    // 入口点引用
'1': {                       // 主payload对象
  'status': 'resolved_model',
  'value': {
    'then': '$2'            // 指向恶意then方法
  }
}
'2': '$@3'                  // 数组引用
'3': []                     // 空数组
'4': {                      // 响应对象,包含gadget链
  '_prefix': '',
  '_formData': {
    'get': {
      'constructor': {
        'constructor': '恶意代码'
      }
    }
  },
  '_chunks': '$@3'
}

关键技术点:

  • 使用循环引用创建复杂的对象图

  • 利用$前缀语法引用React内部对象

  • 通过constructor.constructor访问Function构造函数

  • 绕过常规的安全检查机制

2.4 受影响的软件版本

React Server Components:

  • react-server-dom-webpack: 19.0.0, 19.1.0, 19.1.1, 19.2.0

  • react-server-dom-parcel: 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框架:

  • Next.js 15.0.0 - 15.0.4

  • Next.js 15.1.0 - 15.1.8

  • Next.js 15.2.0 - 15.2.5

  • Next.js 15.3.0 - 15.3.5

  • Next.js 15.4.0 - 15.4.7

  • Next.js 15.5.0 - 15.5.6

  • Next.js 16.0.0 - 16.0.6

其他受影响框架:

  • React Router (使用RSC的版本)

  • Waku

  • RedwoodSDK (rwsdk)

  • Vite RSC Plugin (@vitejs/plugin-rsc)

  • Parcel RSC Plugin (@parcel/rsc)

重要说明:即使应用没有显式使用Server Functions,只要支持React Server Components,就可能受到影响。


3. 野外利用情况

3.1 攻击活动时间线

根据多家安全厂商的报告,CVE-2025-55182在披露后迅速被多个威胁组织利用:

  • 2025年12月3日:漏洞公开披露

  • 2025年12月5日:首次观察到野外利用活动

  • 2025年12月中旬:多个威胁组织开始大规模扫描和利用

3.2 攻击者画像

中国关联威胁组织:

  • Earth Lamia

  • Jackpot Panda

  • 其他APT组织

经济动机攻击者:

  • 加密货币挖矿团伙

  • 勒索软件组织

  • 僵尸网络运营者

3.3 攻击载荷类型

观察到的恶意活动包括:

  • 部署加密货币挖矿程序(XMRig等)

  • 安装远程访问木马(RAT)和后门

  • 部署网络隧道工具(如frp, ngrok)

  • 窃取云服务凭证(AWS, Azure, GCP)

  • 横向移动和持久化


4. 官方修复方案

4.1 React官方补丁

React团队在2025年12月3日发布了修复补丁,修复版本如下:

React Server Components修复版本:

  • react-server-dom-webpack: 19.0.1, 19.1.2, 19.2.1

  • react-server-dom-parcel: 19.0.1, 19.1.2, 19.2.1

  • react-server-dom-turbopack: 19.0.1, 19.1.2, 19.2.1

关键修复提交:

  • Commit Hash:bbed0b0ee64b89353a40d6313037bbc80221bc3d

  • Commit Hash:7dc903cd29dac55efb4424853fd0442fef3a8700

  • 修复文件:ReactFlightReplyServer.js

  • 代码变更: +592行, -223行

4.2 修复原理

官方补丁主要通过以下方式修复漏洞:

  1. 增强hasOwnProperty检查:在反序列化过程中严格验证对象属性

  2. 防止原型污染:阻止攻击者控制的value对象注入恶意代码

  3. 输入验证增强:对Flight协议payload进行更严格的验证

  4. 限制危险属性:禁止反序列化包含__proto__constructor等危险属性的对象

4.3 Next.js修复版本

Next.js团队同步发布了修复版本(CVE-2025-66478后合并到CVE-2025-55182):

修复版本列表:

  • Next.js 15.0.5+

  • Next.js 15.1.9+

  • Next.js 15.2.6+

  • Next.js 15.3.6+

  • Next.js 15.4.8+

  • Next.js 15.5.7+

  • Next.js 16.0.7+

升级命令:

npm update next react react-dom
# 或
yarn upgrade next react react-dom
# 或
pnpm update next react react-dom

5. 防护建议与最佳实践

5.1 立即行动项

优先级1 - 紧急(24小时内):

  1. 版本升级

    • 立即升级React到19.0.1、19.1.2或19.2.1

    • 升级Next.js到对应的修复版本

    • 升级所有使用RSC的框架和工具

  2. 漏洞扫描

    • 使用官方扫描工具检测是否受影响

    • 检查依赖树中的所有React相关包

    • 验证生产环境的版本号

  3. 应急响应

    • 检查服务器日志,查找可疑的POST请求

    • 检查是否有异常进程(挖矿程序、未知服务)

    • 审查最近的文件修改和新增文件

    • 检查网络连接,识别可疑的外连行为

优先级2 - 重要(72小时内):

  1. 安全加固

    • 实施Web应用防火墙(WAF)规则

    • 启用入侵检测系统(IDS/IPS)

    • 配置网络分段和访问控制

    • 实施最小权限原则

  2. 监控增强

    • 部署安全监控和日志分析

    • 设置异常行为告警

    • 监控Server Action端点的访问模式

    • 建立基线并检测偏离

5.2 检测方法

版本检查命令:

# 检查package.json中的版本
cat package.json | grep -E "(react|next)"

# 检查已安装的版本
npm list react react-dom next

# 检查整个依赖树
npm list react-server-dom-webpack

日志检测特征:

  • 包含next-action头的POST请求

  • 请求体包含序列化的React Flight payload

  • 异常大小的FormData请求

  • 包含$@constructor等关键字的请求

5.3 WAF防护规则示例

ModSecurity规则:

SecRule REQUEST_HEADERS:next-action "@rx ." \
    "id:1001,\
    phase:2,\
    block,\
    t:none,\
    msg:'Potential React2Shell exploit attempt',\
    logdata:'Matched Data: %{MATCHED_VAR}',\
    severity:'CRITICAL'"

SecRule REQUEST_BODY "@rx (\$@|\$1|constructor.*constructor)" \
    "id:1002,\
    phase:2,\
    block,\
    t:none,\
    msg:'Suspicious React Flight payload detected',\
    severity:'CRITICAL'"

注意:这些规则可能产生误报,需要根据实际环境调整。

5.4 长期安全建议

  1. 依赖管理

    • 建立依赖版本管理流程

    • 定期审计和更新依赖包

    • 使用自动化工具监控安全漏洞

    • 实施依赖锁定策略

  2. 安全开发实践

    • 对所有外部输入进行验证

    • 实施深度防御策略

    • 定期进行安全代码审查

    • 开展安全培训和意识提升

  3. 架构安全

    • 考虑使用容器隔离

    • 实施网络分段

    • 限制服务器权限

    • 部署蜜罐和欺骗技术


6. 相关CVE漏洞

6.1 CVE-2025-66478

关系:最初作为Next.js独立漏洞披露,后合并到CVE-2025-55182

原因:两个CVE源于同一个React Flight协议的反序列化缺陷

6.2 CVE-2025-55183

漏洞类型:源代码泄露

严重程度:Medium

描述:允许攻击者泄露服务器端函数的源代码

6.3 CVE-2025-55184

漏洞类型:拒绝服务 (DoS)

严重程度:Medium

描述:通过恶意构造的payload导致React Server Function崩溃


7. 技术深度分析

7.1 ReactFlightReplyServer.js漏洞代码分析

漏洞函数:reviveModel

问题代码模式:

// 漏洞版本的简化示例
function reviveModel(response, value) {
  // 缺乏对value对象的验证
  for (let key in value) {
    // 直接使用key而不检查是否为危险属性
    obj[key] = value[key];
  }
}

攻击者利用方式:

  • 传入包含constructor属性的value对象

  • 通过constructor.constructor访问Function构造函数

  • 执行任意JavaScript代码

7.2 JavaScript原型污染原理

原型链攻击:

// 正常对象
let obj = {};

// 原型污染攻击
obj.__proto__.polluted = true;

// 影响所有对象
let newObj = {};
console.log(newObj.polluted); // true

在React2Shell中的应用:

  • 攻击者通过Flight payload注入constructor属性

  • 污染对象原型链

  • 劫持内部方法调用

  • 实现代码执行

7.3 修复后的代码模式

安全版本的改进:

// 修复后的简化示例
function reviveModel(response, value) {
  for (let key in value) {
    // 添加hasOwnProperty检查
    if (Object.prototype.hasOwnProperty.call(value, key)) {
      // 检查危险属性名
      if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
        throw new Error('Dangerous property detected');
      }
      obj[key] = value[key];
    }
  }
}

8. 影响评估

8.1 全球影响范围

受影响的应用类型:

  • 企业级Web应用

  • 电子商务平台

  • SaaS服务

  • 政府网站

  • 金融科技应用

潜在受害者数量:

  • Next.js是最流行的React框架之一

  • 数百万个网站使用Next.js

  • 大量企业级应用受影响

8.2 业务影响

直接影响:

  • 服务器完全被控制

  • 数据泄露和窃取

  • 服务中断和停机

  • 声誉损害

间接影响:

  • 合规性违规(GDPR、PCI-DSS等)

  • 法律责任和罚款

  • 客户信任丧失

  • 业务连续性中断

8.3 CVSS评分详解

CVSS v3.1: 10.0 (Critical)

评分依据:

  • 攻击向量(AV): Network - 可通过网络远程利用

  • 攻击复杂度(AC): Low - 不需要特殊条件

  • 权限要求(PR): None - 无需身份验证

  • 用户交互(UI): None - 无需用户交互

  • 影响范围(S): Changed - 影响超出漏洞组件

  • 机密性影响(C): High - 完全泄露

  • 完整性影响(I): High - 完全修改

  • 可用性影响(A): High - 完全拒绝服务


9. 研究总结

9.1 关键发现

  1. 漏洞严重性极高

    • CVSS 10.0满分评级

    • 无需身份验证即可利用

    • 可实现完全的服务器控制

  2. 利用难度低

    • 公开POC广泛可用

    • 攻击工具易于获取

    • 默认配置即存在漏洞

  3. 影响范围广泛

    • 所有使用React 19 RSC的应用

    • Next.js 15.x和16.x版本

    • 数百万潜在受影响网站

  4. 野外利用活跃

    • 披露后48小时内即被利用

    • 多个威胁组织参与

    • 已被CISA列入KEV目录

9.2 根本原因总结

CVE-2025-55182的根本原因可归结为:

  1. 设计缺陷:React Flight协议假设所有输入来自可信客户端

  2. 实现缺陷:反序列化过程缺乏充分的输入验证

  3. 语言特性:JavaScript原型链的动态特性被滥用

  4. 安全意识:未充分考虑反序列化攻击的风险

9.3 经验教训

  1. 永远不要信任客户端输入

    • 所有来自客户端的数据都应视为不可信

    • 必须进行严格的验证和清理

    • 实施白名单而非黑名单策略

  2. 反序列化是高风险操作

    • 避免反序列化不可信数据

    • 使用安全的序列化格式

    • 实施严格的类型检查

  3. 深度防御的重要性

    • 单一防护措施不足以保护系统

    • 需要多层安全控制

    • 监控和检测同样重要

  4. 及时更新的必要性

    • 建立快速响应机制

    • 自动化补丁管理

    • 定期安全审计


10. 参考资料

10.1 官方公告和补丁

  1. React官方安全公告

    • React Security Advisory (2025-12-03)

    • GitHub Commit: bbed0b0ee64b89353a40d6313037bbc80221bc3d

    • GitHub Commit: 7dc903cd29dac55efb4424853fd0442fef3a8700

  2. Next.js官方公告

    • Next.js Security Advisory

    • CVE-2025-66478 (后合并到CVE-2025-55182)

  3. NIST NVD数据库

    • https://nvd.nist.gov/vuln/detail/CVE-2025-55182

  4. CISA KEV目录

    • Known Exploited Vulnerabilities Catalog

10.2 技术分析文章

  1. Wiz Security Research

    • React2Shell深度技术分析

    • 漏洞发现和披露过程

  2. 安全厂商报告

    • Trend Micro威胁分析

    • Palo Alto Networks威胁情报

    • Cloudflare安全研究

  3. 公开POC仓库

    • https://github.com/lachlan2k/React2Shell-CVE-2025-55182-original-poc

    • https://github.com/kondukto-io/vulnerable-next-js-poc

    • https://github.com/msanft/CVE-2025-55182

10.3 检测和扫描工具

  1. 漏洞扫描器

    • https://github.com/gensecaihq/react2shell-scanner

    • https://github.com/assetnote/react2shell-scanner

  2. 依赖检查工具

    • npm audit

    • Snyk

    • Dependabot


11. 附录

11.1 快速检查清单

立即检查项:

  • 确认当前React版本号

  • 确认当前Next.js版本号

  • 检查是否使用React Server Components

  • 检查是否有Server Actions

  • 审查最近的服务器日志

  • 检查异常进程和网络连接

升级清单:

  • 备份当前代码和配置

  • 更新package.json中的依赖版本

  • 运行npm/yarn/pnpm update

  • 执行完整的测试套件

  • 在staging环境验证

  • 部署到生产环境

  • 验证补丁已生效

监控清单:

  • 配置WAF规则

  • 启用安全日志记录

  • 设置异常告警

  • 建立事件响应流程

  • 定期审查安全状态

11.2 术语表

RSC (React Server Components)

  • React 19引入的服务器端组件架构

Flight Protocol

  • React用于RSC通信的序列化协议

Server Actions

  • 在服务器端执行的React函数

Prototype Pollution

  • 通过修改JavaScript对象原型链实现的攻击

Deserialization

  • 将序列化数据转换回对象的过程

RCE (Remote Code Execution)

  • 远程代码执行漏洞

Gadget Chain

  • 利用链,通过串联多个代码片段实现攻击

CVSS

  • 通用漏洞评分系统

KEV (Known Exploited Vulnerabilities)

  • CISA维护的已知被利用漏洞目录


12. 结论

CVE-2025-55182 (React2Shell) 是2025年最严重的Web应用安全漏洞之一。其CVSS 10.0的评分反映了该漏洞的极端危险性:无需身份验证、易于利用、影响广泛,且已被积极利用。

关键要点:

  1. 立即行动:所有使用React 19 Server Components或Next.js 15.x/16.x的组织必须立即升级到修复版本。

  2. 深度防御:仅依赖补丁是不够的,需要实施多层防护措施,包括WAF、监控、日志分析等。

  3. 持续警惕:即使已经打补丁,也应该检查是否已被入侵,审查日志,检查异常活动。

  4. 经验教训:这个漏洞再次证明了反序列化攻击的危险性,以及"永远不要信任客户端输入"这一基本安全原则的重要性。

最后建议:

对于使用受影响版本的组织,这不是"是否升级"的问题,而是"多快升级"的问题。鉴于该漏洞已被广泛利用,延迟修复将使组织面临严重的安全风险。


研究方法:本报告基于公开的安全公告、技术分析文章、官方补丁代码、公开POC以及Docker环境下的技术验证。所有信息均来自可靠来源,未进行虚构或猜测。

免责声明:本报告仅用于教育和防御目的。任何利用本报告中的信息进行未经授权的攻击活动都是违法的。


END OF REPORT


文章来源: https://www.freebuf.com/articles/vuls/465695.html
如有侵权请联系:admin#unsafe.sh