React2Shell攻防笔记:原理挖掘与价值15万美元的WAF绕过思路

💡 原文中文,约9000字,阅读约需22分钟。
📝

内容提要

2025年12月,React Server Components和Next.js出现严重漏洞React2Shell(CVE-2025-55182)。该漏洞源于数据与业务逻辑混淆,攻击者可伪造Chunk对象并执行任意代码。作者分享了参与Vercel WAF绕过活动的经历,并获得5万美元奖金。最终,React官方修复了该漏洞。

🎯

关键要点

  • 2025年12月,React Server Components和Next.js出现严重漏洞React2Shell(CVE-2025-55182)。

  • 漏洞源于数据与业务逻辑混淆,攻击者可伪造Chunk对象并执行任意代码。

  • 作者分享了参与Vercel WAF绕过活动的经历,并获得5万美元奖金。

  • React2Shell漏洞的核心原因是React Flight在解析用户输入时混淆了数据和Chunk对象。

  • 攻击者利用Thenable对象的特性,导致JavaScript自动解包,最终执行任意代码。

  • React官方在多个PR中修复了该漏洞,使用Symbol作为key以防止恶意Chunk构造。

  • 作者通过研究WAF绕过方法,成功利用utf-16编码绕过了Vercel的WAF。

  • Vercel在后续更新中加强了对关键字的检测,提升了漏洞利用的难度。

  • 作者提出的多重unicode编码方法被Vercel官方采纳,进一步修复了漏洞。

  • 利用Multipart数据包的特性,攻击者可以绕过WAF进行漏洞利用。

🔎

延伸解读

漏洞的根本原因

React2Shell漏洞的核心在于数据与业务逻辑的混淆。攻击者通过伪造Chunk对象,利用JavaScript的自动解包机制,最终实现任意代码执行。这一问题反映了在设计系统时,如何处理用户输入和数据结构的重要性。

WAF绕过的挑战

作者在参与Vercel的WAF绕过活动中,成功利用utf-16编码绕过了安全防护。这表明,WAF的配置和检测规则需要不断更新,以应对新出现的攻击手法。开发者应关注WAF的灵活性和对新型攻击的适应能力。

React官方的修复措施

React官方通过引入Symbol作为key来修复React2Shell漏洞,防止恶意Chunk构造。这一措施强调了在系统设计中,使用不可枚举的属性来增强安全性的重要性,开发者应考虑类似的防护策略。

延伸问答

React2Shell漏洞的主要原因是什么?

React2Shell漏洞的核心原因是React Flight在解析用户输入时混淆了数据和Chunk对象,导致攻击者可以伪造Chunk对象并执行任意代码。

作者是如何获得5万美元奖金的?

作者通过参与Vercel的WAF绕过活动,成功利用utf-16编码绕过了Vercel的WAF,最终获得了5万美元的奖金。

React官方是如何修复React2Shell漏洞的?

React官方通过在多个PR中修复漏洞,使用Symbol作为key来防止恶意Chunk构造,从而解决了该漏洞。

攻击者是如何利用Thenable对象的特性进行攻击的?

攻击者利用Thenable对象的特性,导致JavaScript自动解包,从而执行任意代码。

Vercel在后续更新中做了哪些改进?

Vercel在后续更新中加强了对关键字的检测,提升了漏洞利用的难度,并对'constructor'和'_response'进行了拦截。

React2Shell漏洞的利用需要满足哪些条件?

利用React2Shell漏洞需要发送POST请求,包含不为空的Next-Action头,并且Content-Type为multipart/form-data。

🏷️

标签

➡️

继续阅读