所有文章

React 服务器组件和 Next.js 中的 DoS 漏洞分析 (2026)

technologyJanuary 29, 2026·#Technology

React 和 Next.js 中刚刚发现了一系列严重的 DoS 漏洞,威胁着数百万 Web 应用程序的稳定性。本文分析了其技术机理和彻底的解决方案。

React 服务器组件和 Next.js 中的 DoS 漏洞分析 (2026)

随着 React 服务器组件 (RSC) 的引入,Web 开发行业向服务器和客户端处理混合模型的转变已达到顶峰。然而,这场革命也带来了前所未有的安全挑战。 2025 年 12 月至 2026 年 1 月期间,发现了一系列严重漏洞,动摇了使用 React 19 和 Next.js 15/16 的应用程序的基础。从“React2Shell”远程代码执行(RCE)漏洞(CVE-2025-55182)开始,后续的深入研究不断揭示了数据传输协议和系统优化特性深处的一系列拒绝服务(DoS)弱点。此报告深入介绍了最新的 DoS 漏洞,包括 GHSA-83fc-fqcc-2hmg、CVE-2025-59471 和 CVE-2025-59472。

1. RSC时代安全威胁的演变

要了解紧迫性,有必要考虑“React2Shell”事件(CVE-2025-55182)的历史背景。 2025 年末,安全社区在 React 的“Flight”协议中发现了一个不安全的反序列化错误,导致 CVSS 评分为 10.0 的 RCE。尽管部署了补丁,但 RCE 修复工作无意中暴露了其他有缺陷的处理逻辑,导致攻击者在不执行恶意代码的情况下可能导致服务器崩溃或耗尽资源。

最近的 DoS 漏洞是 React 数据处理逻辑与 Node.js 环境之间复杂交互的结果。当应用程序接受用户提供的复杂数据结构进行服务器端渲染时,将面临资源管理风险。

主要 DoS 漏洞列表(2026 年 1 月 26 日更新):

  • GHSA-83fc-fqcc-2hmg: 影响 react-server-dom-* 包。攻击者向服务器功能端点发送特制的 HTTP 请求,导致服务器崩溃或内存溢出。

  • CVE-2025-59471:Next.js 图像优化器中的漏洞。启用 remotePatterns 时发生,允许太大的远程图像因 OOM(内存不足)而导致服务器崩溃。

  • CVE-2025-59472:Next.js PPR(最小模式)中的漏洞。影响恢复端点,允许 Zipbomb 攻击或无限缓冲。

  • CVE-2025-55184:由于 RSC 中旋转 Promise 引用而导致事件循环崩溃。

2. GHSA-83fc-fqcc-2hmg漏洞的技术机制

2026年1月26日更新的重点是GHSA-83fc-fqcc-2hmg。研究人员发现之前的 DoS 补丁(如 CVE-2025-55184)存在缺陷。问题出在 react-server-dom-webpackreact-server-dom-parcelreact-server-dom-turbopack 包上。

反序列化和无限循环

React 的 Flight 协议将数据分成块。每个块可以引用另一个块。当解码机制遇到循环引用时,就会出现该漏洞。攻击者可以创建包含嵌套 Promise 引用的 HTTP 请求。当服务器尝试解析这些 Promise 时,它​​会陷入无限循环,导致 Node.js 的唯一事件流崩溃,从而导致完全拒绝服务。

该漏洞的 CVSS 评分为 7.5,无需身份验证即可远程利用。即使开发人员没有定义服务器功能,由于默认的 RSC 支持,框架(如 Next.js App Router)仍然会受到影响。

3. Next.js 图像优化器漏洞 (CVE-2025-59471)

此漏洞影响通过 remotePatterns 使用外部图像优化的自托管 Next.js 应用程序。

  • 机制: 端点 /_next/image 从远程源内存加载图像,而不检查最大文件大小

  • 利用:攻击者请求优化来自授权域的超大图像。当 Node.js 加载如此庞大的数据时,它很快就会超出 JavaScript 堆限制,导致进程崩溃。

影响版本: Next.js >=10 到 <15.5.10 和 >=16 到 <16.1.5。由于其基础设施保护机制,Vercel 上的应用程序不会受到影响。

4. Next.js PPR 和最小模式漏洞 (CVE-2025-59472)

CVE-2025-59472 涉及实验性部分预渲染 (PPR) 和“最小模式”(NEXT_PRIVATE_MINIMAL_MODE=1)。

  • 无限缓冲:服务器使用 Buffer.concat() 将请求正文包含在内存中,而不检查其大小

  • Zipbomb 攻击:使用 inflateSync() 解压缩压缩数据,不限制输出。一个小的压缩有效负载可以在内存中扩展到千兆字节,超出代理层的检查限制。

结果是错误FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory,它会立即终止 Node.js 进程。

5. Async Hooks 和 APM 的影响

Tan Phat Digital 指出的一个技术细节是 Node.js 中 async_hooks 的作用。 React 和 Next.js 使用 AsyncLocalStorage 来跟踪请求上下文。使用 Datadog 或 OpenTelemetry 等监控 (APM) 工具时,async_hooks 始终处于启用状态。在这种环境下,RSC 导致的堆栈溢出错误将导致 Node.js 完全退出,并返回错误代码 7,而不是仅仅返回错误代码 500,从而使 DoS 攻击更加严重。

6.缓解和升级策略

完全解决需要软件更新和基础设施配置更改。

版本更新(最高优先级)

组织应审查锁定文件并升级到 2026 年 1 月 26 日发布的安全版本:

  • React 19.0.x:从版本 19.0.0 更新- 19.0.3 至版本19.0.4

  • React 19.1.x:从版本 19.1.0 更新 - 19.1.4 至版本19.1.5

  • React 19.2.x:从版本更新19.2.0 - 19.2.3 至版本19.2.4

  • Next.js 15.x:从 15.5.10 之前的版本升级到版本15.5.10

  • Next.js 16.x:从之前的版本升级16.1.5 至版本16.1.5

临时保护措施

  1. 基础设施:在代理(Nginx/Apache)设置client_max_body_size以防止无限缓冲。

  2. 配置:限制或删除Image Optimizer 的 remotePatterns 中不受信任的域。

  3. 禁用:如果不是绝对必要,禁用 PPR 功能 (experimental.ppr: false) 或最小模式。

  4. WAF:更新防火墙规则(例如 vWAF)以检测和阻止异常 RSC 负载或 POST带有 Next-Resume: 1 标头的请求。

这些漏洞的不断出现表明 RSC 的成熟度具有挑战性。 Tan Phat Digital 建议企业立即审查和升级其系统,以确保针对日益复杂的 DoS 攻击场景提供服务可用性。

分享

评论

0.0 / 5(0 条评分)

请登录后发表评论。

暂无评论,成为第一个分享想法的人吧。