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

108 阅读3分钟

官网: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 与正常流量几乎无异

按回车或点击查看原图

图片由 AI 生成


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.jsonyarn.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)