React2Shell解剖:深入理解CVE-2025–55182

admin 2025-12-25 03:03:18 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: CVE-2025-55182(React2Shell)是一个影响React19生态系统的严重无需认证远程代码执行漏洞,CVSS评分10.0。漏洞存在于Flight协议中,由于React服务端在反序列化客户端数据时过于信任输入,允许攻击者构造恶意thenable对象执行任意代码。影响所有使用ReactServerComponents的应用,尤其是Next.jsAppRouter架构。修复需升级至React≥19.2.3和Next.js≥15.5.7,中间版本存在新漏洞。 综合评分: 86 文章分类: 漏洞分析,WEB安全


cover_image

React2Shell 解剖:深入理解 CVE-2025–55182

hai dragon

安全狗的自我修养

2025年12月23日 12:11 湖南

官网:http://securitytech.cc/

React2Shell 解剖:深入理解 CVE-2025–55182 这一致命 RCE 漏洞

一个足以把你服务器“钥匙”交给黑客的漏洞

#


在 2025 年第四季度,Web 开发社区遭遇了自 Log4Shell 以来最严重的一次安全危机。 该漏洞被编号为 CVE-2025–55182,并被广泛称为 React2Shell

这是一个发生在现代 Web 架构中的“完美风暴”级漏洞,CVSS 评分高达 10.0,直指 React 19 生态系统的核心:React Server Components(RSC)

多年来,整个行业不断向 “Server-First(服务端优先)”渲染模式迁移,以提升性能和 SEO 表现。 然而,React2Shell 暴露了一个根本性问题:这些框架在处理序列化数据时存在致命缺陷

本文将从技术层面深入解析该漏洞的利用机制、受影响的框架,以及保障基础设施安全所需采取的完整措施

别再为安全问题失眠:了解顶级 CTO 都在使用的 SecureSlate 安全策略,确保系统完整性。


什么是 CVE-2025–55182?

CVE-2025–55182 是一个严重的、无需认证的远程代码执行(RCE)漏洞

该漏洞存在于 Flight 协议中 —— 这是 React 在基于 RSC 的应用中,用于在 服务端与客户端之间传输数据的内部序列化格式

与传统针对数据库或错误配置云存储(如 S3)的漏洞不同, React2Shell 直接攻击的是“序列化逻辑本身”

由于这套逻辑深度嵌入在 react-server-dom 相关包中, 任何使用 Next.js App Router 或类似 RSC 实现、且未打补丁的应用,天然处于高危状态


向 React Server Components 的转变

要理解这个漏洞的危险性,必须先理解 React 19 的架构设计。

在 React 19 中,组件被分为两类:

  • 客户端组件(Client Components) 传统 React 组件,在浏览器中执行。
  • 服务端组件(Server Components) 仅在服务器上执行,可以直接访问数据库、文件系统,而不将这些逻辑暴露给客户端。

连接这两者的桥梁正是 Flight 协议

当客户端请求页面或触发 Server Action 时, 服务器会以一种特殊的文本流格式返回数据,在网络日志中常见如下片段:

1:I{...}
$@

技术深挖:为什么 React2Shell 如此危险?

“React2Shell”这个名字并非夸张。

该漏洞允许攻击者:

  • 绕过所有认证机制
  • 在宿主操作系统上执行任意命令
  • 执行权限等同于 Node.js 进程本身

Thenable 反序列化缺陷

漏洞的根源在于: React 服务端在“反序列化(rehydration)”客户端数据时过于信任输入

当客户端触发 Server Action 时,会向服务器发送一个 POST 请求, 服务器需要解析其中的 Flight 数据负载。

在 JavaScript 中,任何拥有 .then() 方法的对象,都会被视为 “thenable”。 Node.js 运行时和大量库都会把 thenable 当作 Promise 处理。

一旦对其 await.then() 方法就会被自动调用。

问题就在这里:

RSC 解析器(尤其是 react-server-dom-webpack)对 thenable 的处理过于宽松。

攻击者可以构造一个恶意的 Flight payload, 在其中伪造一个“看起来合法”的 Chunk,但本质上是恶意 thenable 对象。

当服务端解析组件树时, 就会触发该恶意对象的 .then() 方法,从而执行攻击者控制的代码


原型污染与逻辑注入

由于攻击者完全控制序列化数据, 他们可以将 JavaScript 代码直接注入到 thenable 结构中。

// 示例(原文展示)

当 React 服务端运行时解析到这一结构时, 它看到的不再是“数据”,而是一条待执行的指令

而且,这一切发生在 Node.js 环境中, 攻击者可以直接使用:

  • fs(文件系统)
  • child_process
  • 以及所有 Node.js 原生 API

为什么 React2Shell 被称为“JavaScript 世界的 Log4Shell”

安全研究人员将 CVE-2025–55182 与 Log4j 做类比,原因主要有以下几点:


1. 影响范围极其广泛

React 是全球最流行的前端框架。

随着 React 19 发布、Next.js 成为事实上的行业标准, App Router 架构被广泛采用

这意味着:

从个人博客到财富 500 强企业门户,数百万应用在一夜之间暴露在攻击面前。


2. 极难被检测

传统的基于特征的 WAF(Web 应用防火墙) 最初几乎无法识别 React2Shell 攻击

原因是 Flight 协议:

  • 不是 JSON
  • 是 React 私有的流式格式
  • 在防火墙看来,恶意 payload 与正常流量几乎无异

按回车或点击查看原图


3. 无需认证

这是最令人恐惧的一点:

攻击完全不需要任何账号或凭证。

攻击者只需找到一个接受 Server Action 或 RSC 请求的端点即可。


4. 可建立持久控制(反弹 Shell)

一旦 RCE 成功,攻击者通常会:

  • 启动 反弹 Shell
  • 从内部绕过防火墙
  • 在企业内网中横向移动

受影响的框架与版本

该漏洞并不仅限于 React 本身, 而是影响了整个 基于 React 19 RSC 架构构建的元框架生态

按回车或点击查看原图

⚠️ 重要警告:

  • RCE(CVE-2025–55182)虽在 React 19.2.1 中被修复
  • 但该补丁引入了新的漏洞 CVE-2025–55184(DoS)
  • 只有 React 19.2.3 及以上版本才被认为是完全安全的

检测与利用验证

如果你是开发者或安全工程师, 在证明安全之前,应默认你的应用是脆弱的


步骤 1:依赖审计

检查 package-lock.json 或 yarn.lock, 即使 package.json 中没有直接声明, react-server-dom-webpack 很可能是 Next.js 的间接依赖。


步骤 2:查找攻击指纹

在服务器日志中重点关注:

  • 大量 POST 请求指向 /_next/data/...
  • 包含 Next-Action 请求头的请求

攻击者通常会向这些端点发送畸形 Flight 数据进行探测。


修复与缓解策略

打补丁是唯一彻底的解决方案, 但在企业环境中,并不总是能立刻升级。


立即升级(强烈推荐)

Next.js 用户应升级至:

  • Next.js ≥ 15.5.7
  • React ≥ 19.2.3

升级后请务必:

rm -rf .next

然后重新部署。


WAF / 边缘防护

如果暂时无法升级:

  • 按请求头过滤:拦截 Next-Action

  • Payload 检测

  • 出现 $@ 且数据异常庞大

  • Flight 数据中包含 then 关键字


环境变量与运行权限加固

由于漏洞发生在 Node.js 进程内:

  • 不要使用 root 运行 Node 服务
  • 使用权限受限的专用用户
  • 使用 Vault / Secrets Manager 管理密钥
  • 避免 .env 明文暴露敏感信息

“第二波”漏洞:CVE-2025–55183 / 55184

如同许多重大漏洞一样,补丁本身引出了新的问题:

  • CVE-2025–55183:服务端源码泄露
  • CVE-2025–55184:递归 thenable 导致事件循环死转(DoS)

👉 仅停留在 19.2.1 是不够的,必须升级到 19.2.3。


总结

React2Shell 是一次严肃的警示:

当我们不断抽象 Web 的复杂性时,也在无意中引入新的攻击面。

Server Components 是 Web 的一次巨大进步, 但它要求我们重新思考 “数据” 与 “代码” 的安全边界

2025 年的这次事件,将长期影响 JavaScript 安全观念。

  • 公众号:安全狗的自我修养
  • vx:2207344074
  • http://gitee.com/haidragon
  • http://github.com/haidragon
  • bilibili:haidragonx

#


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:安全狗的自我修养 hai dragon《React2Shell 解剖:深入理解 CVE-2025–55182》

评论:0   参与:  0