1ccf
发布于 2025-12-12 / 23 阅读
0
0

React服务器组件中存在拒绝服务攻击和源代码暴露的风险

发布时间:2025.12.11

源地址:https://react.dev/blog/2025/12/11/denial-of-service-and-source-code-exposure-in-react-server-components

鉴于新披露的漏洞的严重性,React 团队建议立即升级。

安全研究人员在试图利用上周关键漏洞的补丁时,又发现了 React 服务器组件中的另外两个漏洞并予以披露。 新揭示的漏洞包括:

• 拒绝服务 - 高严重性漏洞:CVE-2025-55184CVE-2025-67779(CVSS 7.5) • 源代码泄露问题-中等严重性:CVE-2025-55183(CVSS 5.3)

这些新漏洞不允许远程执行代码。React2Shell 的补丁仍然有效,能够防止远程代码执行的攻击。 如果你上周已经修补了关键安全漏洞,那么现在还需要再次更新。 如果你升级到了 19.0.2、19.1.3 和 19.2.2 版本,这些版本尚不完整,你还需要再次进行更新。



安全研究人员在尝试利用上周发布的关键漏洞补丁时,发现并披露了 React 服务器组件中的另外两个漏洞。

这两个新漏洞不允许远程代码执行。针对 React2Shell 的补丁仍然有效,能够防止远程代码执行攻击。

新披露的漏洞如下:

  • 拒绝服务漏洞 - 高危:CVE-2025-55184 和 CVE-2025-67779(CVSS 评分 7.5)

  • 源代码泄露漏洞 - 中危:CVE-2025-55183(CVSS 评分 5.3)

鉴于新披露漏洞的严重性,我们建议立即升级。

注意

此前发布的补丁存在漏洞。

如果您上周已经针对关键安全漏洞进行了更新,仍需再次进行更新。

如果您更新到了 19.0.2、19.1.3 或 19.2.2 版本,这些更新并不完整,仍需再次更新。

请参阅之前帖子中的升级步骤说明。

这些漏洞的更多细节将在修复措施全面部署完成后公布。

需立即采取行动

这些漏洞存在于与 CVE-2025-55182 相同的软件包和版本中。

这包括以下版本:19.0.0、19.0.1、19.0.2、19.1.0、19.1.1、19.1.2、19.1.2、19.2.0、19.2.1 和 19.2.2。

修复已回溯应用至版本 19.0.3、19.1.4 和 19.2.3。如果您正在使用上述任一版本的软件包,请立即升级到相应的修复版本。

如前所述,如果您的应用的 React 代码不使用服务器,则您的应用不会受到这些漏洞的影响。如果您的应用未使用支持 React Server Components 的框架、打包工具或打包插件,也不会受到这些漏洞的影响。

注释

关键的 CVE 漏洞常常会引发后续的安全漏洞。

当一个关键漏洞被披露时,研究人员会仔细检查相关的代码路径,寻找变体利用技术,以测试最初的缓解措施是否能够被绕过。

该模式不仅出现在 JavaScript 领域,在整个行业中普遍存在。例如,在 Log4Shell 事件之后,随着社区对最初修复方案的深入探查,又陆续报告了更多的 CVE(1,2)。

虽然额外的漏洞披露可能令人沮丧,但它们通常表明应对机制运作良好。

受影响的框架和打包工具

一些 React 框架和打包工具依赖于、存在对其的同级依赖,或包含了存在漏洞的 React 包。受影响的 React 框架和打包工具包括:next、react-router、waku、@parcel/rsc、@vite/rsc-plugin 以及 rwsdk。

请参阅前一篇文章中的升级步骤说明。

托管服务提供商的缓解措施

正如之前所述,我们已与多家托管服务提供商合作,采取了临时缓解措施。

您不应依赖这些措施来保障应用安全,仍需立即进行更新。

React Native

如果你是 React Native 用户,且未使用 monorepo 或 react-dom ,你的 react 版本应固定在 package.json 中,无需额外操作。

如果你在 monorepo 中使用 React Native,应仅更新已安装的受影响包:

  • react-server-dom-webpack

  • react-server-dom-parcel

  • react-server-dom-turbopack

这是为了缓解安全警告,但你无需更新 reactreact-dom ,因此不会导致 React Native 中的版本不匹配错误。

详见本期内容。

高严重性:拒绝服务

漏洞编号:CVE-2025-55184 和 CVE-2025-67779 基础得分:7.5(高)

安全研究人员发现,恶意的 HTTP 请求可以被构造并发送到任何 Server Functions 端点,当 React 反序列化该请求时,可能导致无限循环,使服务器进程挂起并消耗大量 CPU。即使您的应用未实现任何 React Server Function 端点,如果支持 React Server Components,仍可能存在漏洞。

这造成了一个漏洞攻击点,攻击者可能会阻止用户访问该产品,并可能对服务器环境的性能产生影响。

今天发布的补丁通过防止无限循环来缓解问题。

注意

已发布额外修复

针对 CVE-2025-55184 中的拒绝服务(DoS)问题的初始修复不完整。

这使得版本 19.0.2、19.1.3 和 19.2.2 存在漏洞。版本 19.0.3、19.1.4 和 19.2.3 是安全的。

我们已修复了额外的漏洞案例,并为受影响的版本提交了 CVE-2025-67779。

中等严重性:源代码泄露

CVE 编号:CVE-2025-55183 基础得分:5.3(中等)

一位安全研究人员发现,向易受攻击的服务器函数发送恶意 HTTP 请求,可能会不安全地返回任意服务器函数的源代码。利用该漏洞需要存在一个明确或隐式暴露字符串化参数的服务器函数。

'use server';
export async function serverFunction(name) {

const conn = db.createConnection('SECRET KEY');

const user = await conn.createUser(name); // implicitly stringified, leaked in db

return {

id: user.id,

message: Hello, ${name}! // explicitly stringified, leaked in reply

}}

攻击者可能能够泄露以下信息:

0:{"a":"$@1","f":"","b":"Wy43RxUKdxmr5iuBzJ1pN"}
1:{"id":"tva1sfodwq","message":"Hello, async function(a){console.log(\"serverFunction\");let b=i.createConnection(\"SECRET KEY\");return{id:(await b.createUser(a)).id,messageHello, ${a}!}}!"}

今天发布的补丁防止了将服务器函数源代码转换为字符串。

注意

仅可能暴露源代码中的秘密。

硬编码在源代码中的秘密可能会被暴露,但运行时秘密(例如 process.env.SECRET )不受影响。

被暴露的代码范围仅限于服务器函数内部的代码,具体可能包括其他函数,这取决于你的打包工具提供的内联程度。

始终与生产包进行核对。


时间线

  • 12 月 3 日:Andrew MacPherson 向 Vercel 和 Meta 的漏洞赏金计划报告了漏洞。

  • 12 月 4 日:RyotaK 首次向 Meta 漏洞赏金计划报告 DoS 漏洞。

  • 12 月 6 日:React 团队确认了这两个问题,并开始进行调查。

  • 12 月 7 日:初步修复已完成,React 团队开始进行验证并规划新的补丁。

  • 12 月 8 日:受影响的托管服务提供商和开源项目已被通知。

  • 12 月 10 日:托管服务提供商已采取缓解措施,补丁已验证通过。

  • 12 月 11 日:野村真作向 Meta 漏洞赏金计划报告了额外的 DoS 漏洞。

  • 2025 年 12 月 11 日:补丁发布并公开披露,编号为 CVE-2025-55183 和 CVE-2025-55184。

  • 2024 年 12 月 11 日:内部发现并修补了一个缺失的 DoS 漏洞,随后以 CVE-2025-67779 编号公开披露。


署名

感谢 Andrew MacPherson(AndrewMohawk)报告源代码泄露问题,感谢 GMO Flatt Security Inc 的 RyotaK 以及 Bitforest 有限公司 的 Shinsaku Nomura 报告拒绝服务漏洞。


评论