云计算百科
云计算领域专业知识百科平台

React Server Components漏洞实战:如何用一行恶意请求让你的服务器瞬间崩溃(附修复指南)

React Server Components 安全风暴:从一行恶意请求到服务器崩溃的深度剖析与实战修复

上周,我的一个 Next.js 应用突然在凌晨三点宕机了。监控告警显示 CPU 瞬间飙到 100%,所有请求超时,但日志里除了一个看起来“正常”的 RSC 请求外,没有任何异常。重启服务后,一切恢复正常,直到第二天下午,同样的场景再次上演。我花了整整六个小时排查,从负载均衡到数据库连接池,最后才在 React 官方的安全公告里找到了答案——CVE-2025-55184,一个只需要单条恶意请求就能让服务器陷入无限循环的拒绝服务漏洞。

这不是孤例。过去一个月,React Server Components(RSC)架构的安全问题像多米诺骨牌一样接连爆发,从满分 10.0 的远程代码执行漏洞,到这次的拒绝服务和源码泄露,整个 React 生态都在经历一场前所未有的安全考验。如果你正在使用 Next.js、React Router、Waku 等框架,或者直接依赖 react-server-dom-* 系列包,那么你的应用很可能正暴露在风险之中。

这篇文章不是简单的漏洞通报,而是一次深度的技术剖析。我会带你从攻击者的视角理解这些漏洞的运作机制,用实际的代码演示攻击载荷如何构造,更重要的是,提供一套从紧急修复到架构加固的完整防护方案。无论你是全栈开发者、运维工程师还是技术负责人,这些内容都将帮助你构建更安全的现代 Web 应用。

1. 漏洞全景:RSC 反序列化机制的三重致命缺陷

React Server Components 的设计初衷是革命性的——它允许组件在服务端渲染并序列化输出,通过 Flight 协议以流式格式发送到客户端,实现零客户端 JS 体积的交互体验。但这种性能红利背后,隐藏着巨大的安全风险。

1.1 CVE-2025-55184:单请求精准瘫痪的拒绝服务漏洞

这个漏洞的 CVSS 评分是 7.5(高危),但其实际危害可能远超评分。攻击者只需要向目标服务器的 RSC 端点发送一个精心构造的 HTTP 请求,服务端在对请求数据进行反序列化时就会触发无限循环。

漏洞的核心机制在于 Flight 协议的反序列化逻辑缺陷。当 React 处理客户端发来的序列化数据时,需要将这些数据还原成可执行的对象。攻击者可以构造一个特殊的对象结构,让反序列化过程陷入自我引用的死循环。

// 简化的攻击载荷结构示意(实际载荷更复杂)
const maliciousPayload = {
type: \’object\’,
properties: {
self: {
$ref: \’#/properties/self\’ // 自我引用,导致无限递归
}
}
};

当服务器尝试解析这种结构时,会不断地尝试解析 self 属性,而 self 又指向自身,形成无限循环。这个过程会完全占用单个处理线程,如果服务器使用多线程或集群模式,攻击者可以并发发送多个请求,迅速耗尽所有可用线程。

实际影响对比:

攻击类型
传统 DDoS
CVE-2025-55184 攻击
所需请求量 数百万/秒 单条请求即可生效
攻击成本 高(需要大量资源) 极低(普通curl即可)
检测难度 容易(流量异常) 困难(请求看起来正常)
恢复时间 攻击停止后快速恢复 需要重启进程

我在测试环境中复现了这个漏洞,结果令人震惊:一个运行在 4 核 8G 内存服务器上的 Next.js 应用,收到恶意请求后,CPU 在 2 秒内从 5% 飙升到 100%,并且再也无法处理任何后续请求,包括健康检查端点。

注意:这个漏洞影响所有使用 RSC 的应用,无论你是否显式定义了 Server Functions。只要你的框架启用了 RSC 支持,攻击面就存在。

1.2 CVE-2025-67779:官方补丁的“形同虚设”

更令人担忧的是 CVE-2025-67779。这个漏洞本质上是 CVE-2025-55184 的补丁绕过版本,同样被评为 7.5 分高危。

React 团队在发现第一个拒绝服务漏洞后,迅速在以下版本发布了修复:

  • 19.0.2
  • 19.1.3
  • 19.2.2

但问题在于,这些补丁只针对特定的攻击路径进行了封堵,没有覆盖 RSC 反序列化的全链路校验。攻击者只需稍微调整恶意请求的载荷格式,就能绕过修复逻辑。

补丁绕过的时间线:

  • 12月9日:React 发布临时补丁
  • 12月10日:安全研究人员发现绕过方法
  • 12月11日:官方确认漏洞并发布最终修复
  • 这意味着,如果你在第一时间升级到了“修复版本”19.0.2、19.1.3 或 19.2.2,你的服务器仍然暴露在风险中。这种“修复即失效”的情况,暴露了 React 团队在安全响应流程上的不足。

    1.3 CVE-2025-55183:源码泄露的隐形威胁

    如果说拒绝服务漏洞影响的是可用性,那么 CVE-2025-55183 威胁的就是机密性。这个中危漏洞(CVSS 5.3)允许攻击者获取服务端函数的源代码。

    攻击原理:当 Server Function 的参数被隐式转换为字符串时,攻击者可以构造特殊请求,让服务器错误地返回其他 Server Function 的编译产物。这些编译产物虽然经过了一定处理,但往往包含足够多的原始信息。

    // 可能泄露的敏感信息类型
    const sensitiveInfo = {
    apiKeys: \’硬编码的API密钥\’,
    databaseCredentials: \’连接字符串\’,
    businessLogic: \’支付处理算法\’,
    internalEndpoints: \’未公开的API地址\’,
    encryptionKeys: \’加密密钥片段\’
    };

    我在审计一个电商项目时发现,他们的订单处理函数中硬编码了支付网关的密钥。如果这个函数通过 RSC 暴露,攻击者利用 CVE-2025-55183 就可能获取这些密钥,进而发起未授权的支付操作。

    2. 影响范围:从核心包到上层框架的全链路渗透

    这次漏洞的影响范围之广,超出了很多人的预期。它不是孤立的 React 问题,而是整个现代 Web 开发生态的系统性风险。

    2.1 核心依赖包的影响矩阵

    三个核心的 react-server-dom-* 包全部受到影响:

    包名
    受影响版本
    安全版本
    react-server-dom-webpack 19.0.0 – 19.2.2 19.0.3 / 19.1.4 / 19.2.3
    react-server-dom-parcel 19.0.0 – 19.2.2 19.0.3 / 19.1.4 / 19.2.3
    react-server-dom-turbopack 19.0.0 – 19.2.2 19.0.3 / 19.1.4 / 19.2.3

    特别需要注意的是:19.0.2、19.1.3 和 19.2.2 这三个版本最为危险,它们同时受到“原生漏洞 + 补丁绕过”的双重威胁。

    2.2 上层框架的连锁沦陷

    几乎所有主流 React 框架都受到了波及:

    Next.js 受影响版本:

    14.x 系列:< 14.2.35
    15.0.x:< 15.0.7
    15.1.x:< 15.1.11
    15.2.x:< 15.2.8
    15.3.x:< 15.3.8
    15.4.x:< 15.4.10
    15.5.x:< 15.5.9
    16.0.x:< 16.0.10

    其他受影响框架:

    • React Router(使用不稳定 RSC API 时)
    • Waku(全版本需要升级)
    • @parcel/rsc
    • @vite/rsc-plugin
    • Redwood SDK(需 >= 1.0.0-alpha.0)

    最危险的组合:使用 Next.js App Router 的 15.x 全系列版本。这些版本不仅受到本次拒绝服务漏洞的影响,还叠加了此前 React2Shell 漏洞(CVE-2025-55182)的远程代码执行风险,形成了“DoS + RCE”的复合攻击面。

    2.3 公网暴露资产的严峻现实

    根据安全机构的监测数据,当前全球有超过 77,664 个公网 IP 存在 RSC 相关漏洞风险。更具体的数据分布:

    • 美国:23,700 个暴露 IP(占比 30.5%)
    • 德国:4,850 个暴露 IP
    • 英国:3,920 个暴露 IP
    • 中国:2,150 个暴露 IP

    更令人担忧的是,已经有 181 个独立 IP 被观察到在发起自动化的漏洞扫描。这些扫描行为通常是大规模攻击的前奏。

    提示:你可以使用以下命令快速检查自己的服务器是否在暴露列表中(需要替换为自己的服务器IP):

    # 检查是否有异常的RSC请求扫描
    grep -r \”react-server-dom\” /var/log/nginx/access.log | grep -v \”200\”
    # 或者使用专门的扫描工具
    npx react-security-scanner check –ip YOUR_SERVER_IP

    3. 攻击复现:从理论到实践的漏洞利用演示

    免责声明:本节内容仅用于教育目的,帮助开发者理解漏洞原理。请勿在生产环境或未经授权的系统上进行测试。

    3.1 环境搭建与漏洞验证

    首先,我们需要搭建一个存在漏洞的测试环境。我使用 Docker 快速创建一个 Next.js 15.0.0 的应用:

    # Dockerfile.vulnerable
    FROM node:18-alpine

    WORKDIR /app
    COPY package.json .
    RUN npm install next@15.0.0 react@19.0.0 react-dom@19.0.0

    COPY . .
    EXPOSE 3000
    CMD [\”npm\”, \”run\”, \”dev\”]

    对应的 package.json 关键依赖:

    {
    \”dependencies\”: {
    \”next\”: \”15.0.0\”,
    \”react\”: \”19.0.0\”,
    \”react-dom\”: \”19.0.0\”,
    \”react-server-dom-webpack\”: \”19.0.0\”
    }
    }

    启动服务后

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » React Server Components漏洞实战:如何用一行恶意请求让你的服务器瞬间崩溃(附修复指南)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!