为什么 React 的漏洞能攻破服务器?
看到这个漏洞的时候,我也懵了一下:
先简单介绍下:CVE 是 Common Vulnerabilities and Exposures(通用漏洞与暴露)的缩写,是由美国国家网络安全部门(CISA)下属的 MITRE 公司维护的全球公开漏洞数据库。
CVE-2025-55182,CVSS 评分 10.0(最高危险级别),攻击者无需任何授权,只要知道你的网站地址,就能在你的服务器上执行任意代码。
等等,React 不是前端框架吗?前端代码跑在浏览器里,怎么会影响到服务器?
这个问题问到点子上了。要理解这个漏洞,得先搞清楚一件事:现在的 React,已经不只是"前端框架"了。
React 的边界变了
传统的前端框架(React、Vue、Angular)确实只跑在浏览器里:
前端只管渲染 UI,数据从后端 API 拿。前端代码有漏洞?最多影响用户浏览器,服务器安全得很。
但 React 19 引入了 React Server Components(RSC),架构变成了这样:
注意红色部分------React 组件现在跑在服务器上了。
什么是 React Server Components?
RSC 的核心思想是:把组件分成两类。
| 组件类型 | 运行位置 | 能做什么 | 不能做什么 |
|---|---|---|---|
| Server Component | 服务器 | 访问数据库、文件系统、环境变量 | useState、onClick 等交互 |
| Client Component | 浏览器 | 用户交互、状态管理 | 直接访问服务器资源 |
举个例子:
jsx
// 这是一个 Server Component(默认)
// 它在服务器上执行,可以直接查数据库
async function UserProfile({ userId }) {
// 直接在组件里查数据库,不用写 API
const user = await db.query('SELECT * FROM users WHERE id = ?', [userId]);
return (
<div>
<h1>{user.name}</h1>
<p>{user.email}</p>
</div>
);
}
这段代码在服务器上执行 ,db.query 直接访问数据库。渲染结果通过一种叫 RSC Flight Protocol 的格式发送给浏览器。
好处很明显:
- 组件代码不发送到客户端,JS 包更小
- 数据获取更快,没有网络往返
- 敏感逻辑(数据库查询、密钥)留在服务端
但问题也来了:服务器在执行用户发来的数据。
漏洞在哪里?
CVE-2025-55182 的问题出在 RSC Flight Protocol 的反序列化上。
当浏览器和服务器通信时,数据需要序列化(对象 → 字符串)和反序列化(字符串 → 对象)。RSC 用的是一种基于 JSON 的协议。
漏洞的本质是:攻击者可以构造恶意的 HTTP 请求,让服务器在反序列化时执行任意 JavaScript 代码。
这类漏洞叫不安全的反序列化(Insecure Deserialization),在 OWASP Top 10 里排名靠前。Java 的 Log4Shell、PHP 的对象注入,都是类似的问题。
为什么这么严重?
这个漏洞被评为 CVSS 10.0(满分),因为:
- 不需要认证:攻击者不用登录,直接发请求就行
- 不需要用户交互:不用骗用户点什么链接
- 攻击复杂度低:PoC 已经公开,脚本小子都能用
- 影响范围大:Next.js 是最流行的 React 框架,39% 的云环境有受影响实例
据 Wiz Research 报告,漏洞公开后已经在野外被利用,攻击者主要在做两件事:
- 窃取云凭证:AWS/GCP 的 access key
- 挖矿:部署加密货币矿工
谁会受影响?
受影响的版本:
- React 19.0、19.1.0、19.1.1、19.2.0
- Next.js ≥14.3.0-canary.77、≥15、≥16
不受影响的情况:
- 纯客户端 React 应用(没用 SSR/RSC)
- Next.js 13.x 稳定版
- Next.js Pages Router 应用
- Vercel 托管的应用(平台层面已修复)
简单判断:如果你用的是 create-react-app 或者纯 Vite + React,没用 Next.js 的 App Router,那就不用担心。
怎么修复?
升级到修复版本(这是唯一的办法,没有 workaround):
| 框架 | 修复版本 |
|---|---|
| React | 19.0.1、19.1.2、19.2.1 |
| Next.js | 15.0.5、15.1.9、15.2.6、15.3.6、15.4.8、15.5.7、16.0.7 |
bash
# 升级 React
npm install react@latest react-dom@latest
# 升级 Next.js
npm install next@latest
如果暂时不能升级,Cloudflare、Vercel、AWS 等平台的 WAF 已经部署了拦截规则,可以提供临时保护。但还是尽快升级吧。
更大的问题:全栈框架的安全边界
这个漏洞暴露的不只是一个 bug,而是一个趋势性的问题:
前端框架正在变成全栈框架。
Next.js、Nuxt、Remix、SvelteKit......这些框架都在模糊前后端的边界。开发者写的"前端代码",实际上有一部分跑在服务器上。
这带来了新的安全考量:
- 信任边界变了:以前前端代码默认不可信,现在 Server Component 里的代码有服务器权限
- 攻击面扩大了:每个 Server Action、每个 API Route 都是潜在的攻击入口
- 开发者认知滞后:很多人还在用"前端思维"写全栈代码
写 Server Component 的时候,得用后端的安全意识:
- 验证所有输入
- 不信任客户端传来的任何数据
- 敏感操作加权限检查
总结
回到开头的问题:为什么 React 的漏洞能攻破服务器?
因为 React Server Components 让 React 代码跑在了服务器上。当框架在服务端反序列化用户数据时,如果处理不当,就可能执行恶意代码。
这不是 React 独有的问题,任何在服务端处理用户输入的框架都有类似风险。只是 React/Next.js 太流行了,影响范围特别大。
如果你在用 Next.js App Router + React 19,赶紧检查版本,该升级升级。
想深入了解 RSC 的原理和这个漏洞的技术细节,推荐看这个视频,讲得挺清楚的:
为什么React的漏洞能攻破服务器?Next.js与RSC入门基础
参考资料
- React 官方安全公告
- Next.js CVE-2025-66478 公告
- Wiz Research: React2Shell 分析
- Datadog: CVE-2025-55182 技术分析
- The Hacker News 报道
如果你觉得这篇文章有帮助,欢迎关注我的 GitHub,下面是我的一些开源项目:
Claude Code Skills (按需加载,意图自动识别,不浪费 token,介绍文章):
- code-review-skill - 代码审查技能,覆盖 React 19、Vue 3、TypeScript、Rust 等约 9000 行规则(详细介绍)
- 5-whys-skill - 5 Whys 根因分析,说"找根因"自动激活
- first-principles-skill - 第一性原理思考,适合架构设计和技术选型
全栈项目(适合学习现代技术栈):
- prompt-vault - Prompt 管理器,用的都是最新的技术栈,适合用来学习了解最新的前端全栈开发范式:Next.js 15 + React 19 + tRPC 11 + Supabase 全栈示例,clone 下来配个免费 Supabase 就能跑
- chat_edit - 双模式 AI 应用(聊天+富文本编辑),Vue 3.5 + TypeScript + Vite 5 + Quill 2.0 + IndexedDB