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
相关推荐
乾元21 小时前
企业无线的 AI 频谱与功率自动优化——从人工勘测到“可学习的无线网络”(含真实室内工程案例)
服务器·网络·人工智能·网络协议·安全·信息与通信
青莲84321 小时前
Java并发编程高级(线程池·Executor框架·并发集合)
android·前端·面试
2301_7807896621 小时前
服务器感染的病毒有哪些特点呢?
安全·web安全
程序员Agions21 小时前
Flutter 邪修秘籍:那些官方文档不会告诉你的骚操作
前端·flutter
白驹过隙不负青春21 小时前
Docker-compose部署java服务及前端服务
java·运维·前端·docker·容器·centos
满天星辰21 小时前
Vue.js的优点
前端·vue.js
哒哒哒52852021 小时前
React createContext 跨组件共享数据实战指南
前端
怪可爱的地球人21 小时前
UnoCss最新配置攻略
前端
Carry34521 小时前
Nexus respository 搭建前端 npm 私服
前端·docker
满天星辰21 小时前
使用 onCleanup处理异步副作用
前端·vue.js