React Server Components 再曝高危漏洞:拒绝服务与源码泄露接踵而至

如果您的团队刚刚在几天前为了修复那个满分核弹级漏洞 React2Shell (CVE-2025-55182) 而熬夜加班,那么现在可能需要请大家再喝一杯咖啡了。

就在安全社区深入研究上周的 RCE(远程代码执行)漏洞补丁时,剧情出现了反转------研究人员在防御工事中发现了新的裂缝。React 官方和 Next.js 团队刚刚确认了三个新的 CVE 编号,虽然这次不是直接的 RCE,但它们依然能让您的服务器"罢工"或者泄露敏感代码。

别慌,将用最简单的大白话带您看懂发生了什么,以及为什么您之前打的补丁可能已经失效了


一、新威胁登场:不仅是崩溃,还有泄密

这次的主角是两个新发现的漏洞,它们都潜伏在 React Server Components (RSC) 处理网络请求的机制中:

🔥 漏洞一:让服务器"陷入沉思"的 DoS 攻击 (CVE-2025-55184)

  • 严重等级: 高危 (CVSS 7.5)
  • 这是什么? 这是一个"拒绝服务"(Denial of Service)漏洞。
  • 通俗解释: 想象一下,攻击者给您的服务器发了一个特制的"订单"(HTTP 请求)。这个订单里包含了一个死循环逻辑(比如"A依懒于B,B又依懒于A"的循环 Promise 引用)。
  • 后果: 服务器在试图解析这个订单时,会陷入无限循环的深渊。这会导致服务器进程挂起,CPU 狂转,但就是不干活。即使您的应用没有显式使用 Server Functions,只要开启了 RSC 支持,就可能中招。结果就是:真实用户的请求进不来,您的服务相当于"宕机"了

🕵️ 漏洞二:把代码"吐出来"的源码泄露 (CVE-2025-55183)

  • 严重等级: 中危 (CVSS 5.3)
  • 这是什么? 这是一个信息泄露漏洞。
  • 通俗解释: 攻击者通过特定的请求,诱骗服务器将某个 Server Function(服务器端函数)误认为是一个字符串。
  • 后果: React 会"好心"地把这个函数的完整源代码作为字符串返回给攻击者。如果您的代码里硬编码了 API Key、数据库密码或者复杂的业务逻辑,这些秘密就会被攻击者一览无余。

二、攻击原理

这些 React Server Components (RSC) 漏洞(CVE-2025-55184, CVE-2025-55183, CVE-2025-67779)的触发机制主要集中在 React Flight 协议 的反序列化处理逻辑上。攻击者不需要身份验证,只需向服务器发送特制的 HTTP 请求即可触发。

以下是针对不同漏洞的具体触发原理:

1. 触发拒绝服务 (DoS)

涉及漏洞: CVE-2025-55184, CVE-2025-67779 核心机制: 循环 Promise 引用 (Cyclical Promise References)

  • 触发方式: 攻击者构造一个恶意的 RSC Flight Payload(通常包含在 HTTP POST 请求中),发送给任意 Server Function 端点(或者支持 RSC 的应用入口)。
  • Payload 特征: 这个 Payload 内部包含精心设计的 循环 Promise 引用(Cyclical Promise references)。
  • 服务器反应: 当 React 服务器尝试反序列化这个 Payload 时,运行时会陷入解析嵌套 Promise 的 无限递归死循环
  • 后果: 由于 Node.js 通常是单线程事件循环,这个死循环会直接导致服务器进程挂起(Hang),CPU 占用率飙升,无法处理后续的任何请求,从而造成拒绝服务。
  • 补丁绕过 (CVE-2025-67779): 之前的补丁未能完全覆盖所有类型的循环引用 Payload,因此攻击者可以调整 Payload 结构绕过第一轮修复,再次触发死循环。
graph TD A[攻击者发送恶意请求] --> B[Payload包含循环Promise引用] B --> C{React服务器反序列化} C --> D[进入无限递归/死循环] D --> E[CPU占用率飙升至100%] E --> F[服务器进程挂起] F --> G[服务完全不可用]

2. 触发源代码泄露 (Source Code Exposure)

涉及漏洞: CVE-2025-55183 核心机制: 字符串强制转换 (String Coercion)

  • 触发方式: 攻击者发送一个恶意的 HTTP 请求,将某个参数伪造成指向 另一个 Server Function 的引用

  • 触发条件: 目标 Server Function 必须包含将传入参数 转换为字符串 的操作(显式或隐式)。例如,代码中使用了模板字符串 Hello ${name},或者将参数传递给需要字符串的 API(如数据库查询)。

  • 执行流程:

    1. 攻击者发送请求,将参数(如 name)的值设为一个指向服务器端函数(Server Function)的引用对象。
    2. 服务器代码执行时,试图将该参数"字符串化"(调用 .toString())。
    3. 由于漏洞存在,React 不安全地返回了该函数的 完整源代码 字符串,而不是一个普通的对象标识。
  • 泄露内容: 攻击者可以在 HTTP 响应中直接看到函数的源代码。如果代码中包含硬编码的密钥(如 db.connect('SECRET_KEY')),这些敏感信息就会被窃取。

graph LR A[攻击者构造恶意参数] --> B[参数伪装成Server Function引用] B --> C[服务器执行字符串转换] C --> D{React不安全处理} D --> E[返回函数完整源代码] E --> F[泄露API密钥/数据库密码] E --> G[泄露业务逻辑代码]

3. 攻击入口与通用前提

  • 无需登录: 这些攻击是预认证的(Pre-authentication),攻击者不需要登录即可发起。
  • HTTP 请求: 攻击通过向 Server Function 端点发送 HTTP 请求实现。即便应用没有显式使用 Server Function,只要开启了 RSC 支持,框架(如 Next.js App Router)默认暴露的端点也可能成为攻击入口。
  • 协议层漏洞: 问题出在底层的 react-server 包处理 Flight 协议数据流的方式上,这意味着使用该协议的多种框架(Next.js, Waku, Hydrogen 等)都可能受到波及。

三、关键反转:为什么说您的补丁可能"白打了"?

这才是本次事件中最令人头疼的地方。

在修复 DoS 漏洞 (CVE-2025-55184) 的过程中,官方发布了第一版补丁(例如 React 19.0.2)。但安全研究人员很快发现,这个修复不完整!攻击者依然可以绕过这个补丁让服务器挂起。

这就是第三个漏洞 CVE-2025-67779 的由来。

⚠️ 划重点: 如果您在本周早些时候更新到了 React 19.0.2、19.1.3 或 19.2.2您依然是脆弱的! 您需要再次升级。

graph TB A[第一轮修复 CVE-2025-55184] --> B[修复特定类型循环引用] B --> C[攻击者调整Payload结构] C --> D[发现新的循环引用模式] D --> E[绕过第一轮补丁] E --> F[需要第二轮修复 CVE-2025-67779]

四、我受影响了吗?(自查清单)

如果您的项目使用了以下技术栈,请立即自查:

  • React: 版本 19.0.0 到 19.2.2 之间的所有版本。
  • Next.js (App Router): 版本 13.x 到 16.x。尤其是使用了 App Router 的项目。
  • 其他框架: 任何使用了 react-server-dom-webpack/parcel/turbopack 的框架,如 Waku, RedwoodJS, React Router 等。

注意: 如果您的 React 代码只在客户端运行(不涉及 Server Components),或者使用的是老版本的 Next.js (Pages Router),恭喜您,这波风暴由于您"由于技术栈不够新"而完美避开。


五、立即行动:终极修复方案

不要犹豫,立即升级到以下"最终安全版本"。请跳过中间的过渡版本,直接升到最新!

React 核心包升级指南:

您当前的版本系列 ❌ 依然脆弱的版本 ✅ 必须升级到的安全版本
19.0.x 19.0.0 - 19.0.2 19.0.3 (及以上)
19.1.x 19.1.0 - 19.1.3 19.1.4 (及以上)
19.2.x 19.2.0 - 19.2.2 19.2.3 (及以上)

Next.js 用户升级指南:

请运行以下命令将 Next.js 升级到最新的补丁版本:

  • Next.js 15.x: 升级至 15.0.7+, 15.1.11+, 15.2.8+, 15.3.8+, 15.4.10+
  • Next.js 14.x: 升级至 14.2.35+
  • Next.js 16.x (Canary): 升级至 16.0.10+
bash 复制代码
# 一键升级到最新安全版本
npm install next@latest react@latest react-dom@latest

# 或指定确切版本
npm install next@15.0.7 react@19.0.3 react-dom@19.0.3

六、写在最后:给开发者的建议

由于利用门槛极低且已有自动化扫描工具出现,依靠 WAF(Web应用防火墙)只能作为临时缓解措施,唯一彻底的修复方法是立即升级 React 和 Next.js 到最新的安全版本(如 React 19.0.3+, Next.js 15.0.7+ 等)。

这次的一连串漏洞(从 RCE 到 DoS 再到 Info Leak)提醒我们,React Server Components (RSC) 极大地简化了前后端的数据交互,但同时也模糊了信任边界

  • 不要硬编码密钥: 即使补丁打好了,也永远不要在代码里直接写 const API_KEY = "sk-..."。请务必使用环境变量(process.env),因为运行时注入的变量通常不会因源码泄露而被直接读取。
  • 保持警惕: 新技术栈往往伴随着新的攻击面。关注官方公告,及时响应。

现在,去检查您的 package.json 吧,祝大家部署顺利,服务常青!


参考资料:

  1. React Blog: Denial of Service and Source Code Exposure in React Server Components
  2. Vercel Security Bulletin: CVE-2025-55184 and CVE-2025-55183
  3. NVD - CVE-2025-55184 Detail
  4. The Hacker News: New React RSC Vulnerabilities Enable DoS and Source Code Exposure
相关推荐
大模型玩家七七8 小时前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
恋猫de小郭8 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅14 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606115 小时前
完成前端时间处理的另一块版图
前端·github·web components
Hello.Reader15 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
掘了15 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅15 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅15 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
智驱力人工智能16 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
崔庆才丨静觅16 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端