深入解析与应对CVE-2025-55182 (React2Shell) 漏洞

本文详细剖析了影响React Server Components和Next.js的Critical级未认证远程代码执行漏洞CVE-2025-55182(React2Shell),包括其机制、相关DoS和源代码泄露漏洞(CVE-2025-55183/55184/67779),并提供了全面的补丁升级、检测指标与缓解方案。

理解与缓解 CVE-2025-55182 (React2Shell) | UpGuard

指定为CVE-2025-55182并被广泛称为"React2Shell"的此漏洞,代表了现代Web应用程序的最坏情况:在默认配置下即可实现未认证的远程代码执行。

自最初披露和初始补丁发布以来,安全研究人员在同一受影响包中还发现了两个相关的漏洞——一个拒绝服务漏洞和一个源代码泄露漏洞。必须注意的是,为修复RCE而发布的初始补丁并不完整,使得系统仍然暴露于新的DoS和代码泄露漏洞之下。 需要立即行动,更新到最新的补丁版本,以保护您的应用程序免受所有已知威胁。

什么是 CVE-2025-55182?

1. 严重:远程代码执行 (CVE-2025-55182 / “React2Shell”)

CVE-2025-55182的核心是一个不安全反序列化漏洞,被评定为严重级别。它允许攻击者仅通过发送一个恶意的HTTP请求,就可在服务器上执行任意代码,而无需任何登录凭证或特殊权限。

注意: 虽然核心漏洞是 CVE-2025-55182 (React),但在上下文中,与 Next.js 相关的追踪通常被引用为 CVE-2025-66478。两者指的是相同的根本原因。

机制

该漏洞存在于 React Server Components 架构中,具体是在用于客户端与服务器之间通信的 “Flight” RPC 协议内部。

当用户与 Next.js 或 React 19 应用程序交互时——例如通过 Server Action 提交表单——数据会被序列化以发送到服务器。服务器随后反序列化这些数据以处理请求。

缺陷

React 安全团队和 Vercel 披露,服务器端的反序列化器未能严格验证传入的对象键。

这一具体失败允许攻击者在负载中注入被禁止的 JavaScript 属性——例如 __proto__constructorprototype。这种服务器端原型污染 有效地"毒化"了应用程序状态。当服务器处理这个被污染的对象时,会在无意中触发一个"小工具链",从而执行攻击者的系统命令。

2. 高严重性:拒绝服务 (CVE-2025-55184 和 CVE-2025-67779)

在尝试利用初始的 RCE 补丁时发现,这组漏洞允许攻击者成功导致服务器进程崩溃或冻结,从而拒绝向合法用户提供服务。

严重性:高

缺陷

安全研究人员发现,可以制作恶意 HTTP 请求并将其发送到任何 Server Functions 端点。当 React 反序列化此请求时,会触发一个无限循环,导致服务器进程挂起并消耗过多 CPU 资源,从而影响性能并有效拒绝用户访问产品。CVE-2025-67779 是为解决初始 DoS 漏洞补丁不完整而发布的后续修复。

3. 中严重性:源代码泄露 (CVE-2025-55183)

此漏洞允许攻击者直接从您的 Server Function 代码中泄露敏感信息。

严重性:中

缺陷

发送到易受攻击的 Server Function 的恶意 HTTP 请求可能会不安全地返回该函数的源代码。如果您的 Server Function 内硬编码了任何秘密,它们可能会被暴露。当 Server Function 显式或隐式暴露字符串化的参数时,就会触发此漏洞。

受影响的生态

由于此漏洞存在于处理 Server Components 的核心 React 库中,其影响范围巨大。它不仅影响特定框架,还影响任何利用 RSC 的工具链。

主要目标:

  • React Core: 版本 19.0.0 至 19.2.0。
  • Next.js:
    • v16.x (早于 v16.0.7 的版本)
    • v15.x (早于 v15.5.7 的版本)
    • 使用 App Router 的旧版 v14.x Canary 版本。
  • RSC 支持框架: Waku, RedwoodJS,以及使用 Vite RSC 插件的自定义实现。

为什么 React2Shell 特别危险

与之前需要特定、非标准配置才能利用的漏洞不同,CVE-2025-55182 在默认安装上即可利用。

注意: 安全研究人员已确认攻击向量是一个简单的 HTTP POST 请求。如果您的应用程序向公共互联网公开了 Server Action 或 RSC 端点,则在打补丁之前实际上是脆弱的。

如何缓解 CVE-2025-55182 的影响

鉴于其"严重"级别以及利用代码的公开可用性,需要立即采取行动。缓解策略分为两类:补救(打补丁),这是唯一的永久性修复;以及缓解(WAF规则),作为临时防护。

1. 立即打补丁

React 团队和 Vercel 已协调同步发布了修复版本。您必须将依赖项升级到下文列出的版本或更高版本。

初始补丁:

  • React: 如果您直接使用 React 或依赖 React 19 的非 Next.js 框架,请确保 reactreact-dom 更新到以下初始补丁版本之一:
    • v19.0.1
    • v19.1.2
    • v19.2.1
  • Next.js: Next.js 用户应升级到其主版本的最新补丁版本。安全版本包括:
    • Next.js 16: 升级到 v16.0.7 或更高版本。
    • Next.js 15: 升级到 v15.5.7, v15.4.8, v15.3.6, v15.2.6, v15.1.9, 或 v15.0.5。

最终补丁

上面列出的初始补丁版本并不充分,仍然容易受到后续的拒绝服务和源代码泄露问题的影响。

为确保您的应用程序免受所有四个已知漏洞的影响,您必须更新到以下最终补丁版本或更高版本:

最低安全版本
react 和 react-dom v19.0.3 或更高
react 和 react-dom v19.1.4 或更高
react 和 react-dom v19.2.3 或更高

依赖警告: 如果您正在使用像 Waku、RedwoodJS 或 Parcel 这样的框架,您可能不会立即看到框架级别的更新。您必须检查您的 package-lock.jsonyarn.lock 文件,以确保嵌套的 react 版本已解析为上述列出的修复版本之一。

如何检测您是否已受到影响

打补丁为未来的攻击关上了门,但它并不能告诉您是否已经有人闯了进来。要确定在缓解措施实施之前您的基础设施是否已被攻击或入侵,您必须同时分析您的网络日志和主机行为。

网络流量分析

检测的第一道防线是审查 HTTP 访问日志中与 “React2Shell” 利用相关的特定模式。

  • 可疑请求头: 在日志中筛选包含 next-actionrsc-action-id 请求头的 HTTP POST 请求。虽然这些是 Next.js 和 React 使用的合法请求头,但这些请求的异常高流量——特别是来自单个 IP 地址的流量——可能表明存在扫描活动。
  • 负载特征: 最可靠的指标在请求体中。在您的 WAF 或负载均衡器日志中搜索以下字符串:
    • "$@":利用负载结构中使用的序列(通常在 JSON 数组内部)。
    • "status":"resolved_model":用于欺骗服务器处理恶意对象的特定 JSON 模式。
    • __proto__, constructor, 或 prototype:试图污染对象原型的 JSON 键。
  • 错误率异常: 在您的 RSC 端点上查找 500 内部服务器错误的突然激增。因为利用负载通常不稳定或基于试错,攻击者在成功实现代码执行之前经常多次导致服务器进程崩溃。
    • 持续突然的 CPU 使用率飙升可能表明成功的 DoS 攻击。

基于主机的指标

如果攻击者成功绕过您的网络防御,证据将驻留在服务器本身上。此处的检测依赖于发现技术上可能但在操作上对于 Web 服务器异常的行为,从应用程序如何与底层操作系统交互开始。

  • 意外的进程生成: 这是泄露的最高保真度指标。在标准的 React/Next.js 环境中,Node 进程几乎不应该生成 shell 命令。在您的端点检测与响应工具中监控 Node 进程是否生成了:
    • Shell: sh, bash, cmd.exe, powershell
    • 网络工具: curl, wget
    • 侦察工具: whoami, id, uname
  • 文件系统痕迹: 扫描器和攻击者通常在临时目录中留下证据。检查 /tmp (Linux) 或 %TEMP% (Windows) 是否存在:
    • 名为 pwned.txt, test.txt 或随机字母数字字符串的文件。
    • 为测试写入权限而创建的零字节文件。
    • 此外,监控对敏感系统文件的未经授权读取尝试,例如 /etc/passwd 或环境变量文件,攻击者通常在获得访问权限后立即瞄准这些文件。

自动化扫描和验证

要确认您的应用程序是否仍然暴露,而无需手动制作利用程序,请使用已更新其 CVE-2025-55182 定义的漏洞扫描器。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计