🔥 什么是 React2Shell
- 2025年12月3日,React(以及许多基于它构建的框架)的核心团队披露了React Server Components (RSC)中的一个严重漏洞。
- 该漏洞最初被分配了CVE-2025-55182(React)和CVE-2025-66478(Next.js),但后者已被标记为重复漏洞——根本问题相同。
- 该漏洞源于React内置的“Flight”协议中不安全的反序列化,该协议用于在服务器和客户端组件之间进行通信。简而言之:攻击者可以发送精心构造的HTTP请求,并在服务器上触发任意代码执行——无需身份验证。
- 严重程度为CVSS 10.0(最高)——这意味着这是远程代码漏洞中最严重的级别。
🌍 受影响人群——剧透:影响范围很广
如果你的技术堆栈包含:
- React 19.x 并使用服务器组件,或者
- Next.js 15.x / 16.x(或某些canary 14.x版本)以及App Router(底层使用RSC)
那么,即使您认为自己没有使用“服务器函数”,也可能受到影响。该漏洞存在于根本性的结构层面,而非可选插件层面。
安全公司的数据显示,高达39% 的云环境扫描结果显示,其中存在易受攻击的React或Next.js实例。这意味着近五分之二的云端公共网站/API都存在潜在风险。
简而言之:如果您在服务器端运行基于现代前端框架/工程化(如React/Next.js)的Web应用程序,请假设您存在安全漏洞。
🎯 为什么这不仅仅是另一个JS bug——这是一个“万能钥匙”
这并非普通的漏洞。它具有一些使其极其危险的特性:
- ❗ 未经身份验证的远程代码执行:攻击者不需要凭据、令牌或有效会话。
- 🚪 默认配置存在漏洞:即使是普通的“开箱即用”应用程序(例如通过
create-next-app创建)也存在漏洞。
- 💣 大规模应用:React + Next.js是全球最流行的Web技术栈之一——影响规模巨大。
- ⚡ 预计漏洞将被迅速利用:主要云原生/IaaS服务提供商的蜜罐在漏洞披露后数小时内就已被发现遭到扫描和利用。
对许多组织而言,这本质上是一种“零点击关键远程代码执行”——无需社交工程、无需网络钓鱼、无需利用漏洞链。只需发送一个精心构造的HTTP请求即可。
🛡️ 现在你应该做什么——React2Shell的应对清单
如果您维护任何Web应用程序,以下是您的行动清单:
1. 清点您的技术栈
在您的代码库中搜索:React 19.x、React Server Components、带有App Router的Next.js 15/16(或canary 14.x)。
2. 立即打补丁
升级至已修复的版本:React(19.0.1、19.1.2、19.2.1)和Next.js(15.0.5+、16.0.7+)。
3. 应用WAF/虚拟补丁作为临时防御措施
如果无法立即打补丁,请考虑部署运维/DevOps领域的Web应用程序防火墙规则或缓解措施。一些供应商(例如Fastly、云WAF提供商)已经推出了虚拟补丁来阻止攻击模式。
4. 检查服务器功能和序列化逻辑
审查自定义RSC端点,确保没有未经净化的输入流入服务器端代码执行路径。
5. 扫描您的基础架构
运行自动化扫描器(SCA/静态分析器)——针对React2Shell已发布了许多新的漏洞插件。
6. 监控日志和流量模式
注意异常的HTTP请求或可疑的有效载荷。及早发现并响应,可以减少很多麻烦。
🧠 这对攻击性安全/红队社区意味着什么
React2Shell凸显了现代攻击性安全的一个重要真理:
现在的攻击面是高级逻辑,而不仅仅是内存或基础设施。
如果你是2025-2026年的红队成员或渗透测试人员,掌握底层漏洞利用仍然很有价值——但如今最赚钱、影响最大的漏洞来自:
- 高级框架中的不安全反序列化
- 服务器端逻辑滥用
- 云服务配置错误
- 身份和信任相关的漏洞
- 框架级协议缺陷
React2Shell是一个“万能”远程代码执行漏洞——但很可能还有更多类似的漏洞隐藏在广泛使用的复杂框架中。随着现代基础设施越来越依赖可组合的云原生工具和Web框架,“唾手可得”的漏洞来源也变成了底层逻辑缺陷和反序列化错误。
对于攻击型安全从业者来说:少关注shellcode,多关注序列化、框架逻辑、协议边界漏洞。
🔮 结语——React2Shell的警示
CVE-2025-55182 / CVE-2025-66478 (React2Shell) 不仅仅是另一个CVE,它对整个Web开发生态系统都是一个警示。
- 如果你维护Web应用程序——请将此视为“消防演习”:打补丁、审核、加固。
- 如果你攻击或审核Web应用程序——请记住:严重的漏洞现在不仅出现在二进制文件中,也出现在高级框架中。
- 如果你负责基础设施防御——请把这当作一个警钟:及时修补依赖项是你的第一道防线。
因为在React2Shell之后,问题不再是“是否”会发生另一个巨大的bug,而是“何时”会发生。
