我也将开个新系列,用于整理一些前端/web hybrid相关的具有一定影响的技术新闻
近期,React Server Components 与 Next.js App Router 爆出了 CVSS 10.0 的远程代码执行漏洞(RCE) ,波及 React 19 与 Next.js 15.x/16.x 的大量项目。本篇文章将面向技术人员和架构师,系统回顾 React/Next 的典型历史漏洞,并从 协议层 → 代码层 → 利用链机制 深度分析本次事件,同时给出可落地的工程级安全建议。
这次的影响还算是不小的,不少企业受到了类似攻击。不知道大家是否还记得几个月前,cloudflare因为useEffect导致无限循环出现业务中断呢,这个框架用的时候还是要小心啦~ 越是标榜"安全"、"用户量大" 的技术,出的问题可能越多,有时候纯粹是
"大意了!
一、React.js 历史典型安全事件回顾
1. CVE-2018-6341 ------ SSR 渲染属性名注入导致 XSS
React 16 时代,SSR 渲染存在一个严重漏洞:
攻击者可将恶意字符串作为 属性名 注入,SSR 会错误地输出到 HTML 中,从而触发 XSS。
修复版本:React ≥ 16.4.2
2. CVE-2025-8101 ------ linkify-react 原型污染导致 XSS
第三方生态库 linkify-react 存在原型污染问题:
js
import linkifyHtml from 'linkify-html';
const opts = {
attributes: {
__proto__: {
onclick: "alert('XSS via prototype pollution')"
}
}
};
console.log(linkifyHtml('victim.com', opts));
最终输出:
html
<a href="http://victim.com" onclick="alert('XSS via prototype pollution')">victim.com</a>
允许直接插入事件处理器,引发 XSS。
3. Next.js 中间件 SSRF 事件(CVE-2025-57822)
Next.js 某些版本的中间件中:
js
NextResponse.next({ headers: request.headers });
将客户端 header 原样转发触发 SSRF,例如伪造 x-forwarded-host 等头部。
正确方式:
js
return NextResponse.next({ req: request });
二、2025 Next.js & React 爆出 CVSS 10.0 RCE 漏洞(重点)
漏洞编号
- CVE-2025-55182(React Server Components)
- CVE-2025-66478(Next.js App Router)
- CVSS 评分:10.0(最高级)
又被成为 React2Shell,因为可以通过提供虚构的框架action,执行shell命令,可参考log4j
受影响范围:
- Next.js 15.x / 16.x
- React 19 + RSC(App Router 默认开启)
- Pages Router 不受影响
三、漏洞利用原理:从协议到代码的完整攻击链剖析
本次漏洞本质是 "不安全反序列化 + 原型污染 → 任意服务器函数调用 → RCE"
1. 攻击入口:伪造的 Flight 协议 Payload
React Server Components 使用 Flight Protocol在客户端和服务端之间传输序列化数据。
攻击者构造恶意 payload,伪造:
- 服务器函数引用(Server Action ID)
- 原型链注入字段
- Promise "then" 回调映射
在未修复版本中,React 会:
➜ 无校验反序列化 ➜ 执行攻击者控制的 promise.then 代码
2. 关键危险点:可控 Promise.then 执行
攻击者可将 payload 解析成:
js
Promise.resolve().then(require('child_process').execSync.bind(null, 'cat /etc/passwd'));
服务端解析 Flight 数据 → 自动执行该 promise → RCE。
官方确认这是漏洞的核心成因。
3. Next.js 被攻破的原因
Next.js App Router 默认启用:
- Server Actions
- RSC
- 自动请求路由映射
导致攻击者只需向 任意可访问的 Server Action 路径 发请求,即可触发解析逻辑。
4. 真实攻击后果(已被官方证实)
攻击者可:
- 读取
.env、DB 密钥 - 读取/写入任意文件
- 执行系统命令
- 注入恶意 SSR HTML
- 窃取用户信息、Session、API Token
四、修复建议(工程可落地)
1. 立即升级依赖(最关键)
jsonc
{
"dependencies": {
"react": ">=19.2.1",
"react-dom": ">=19.2.1",
"react-server-dom-webpack": ">=19.2.1",
"next": ">=16.0.7"
}
}
修复版本添加了:
- 严格的
hasOwnProperty检查 - 禁止 prototype chain 访问
- 禁止任意函数引用调用
2. 中间件增强(防 SSRF、假冒头部)
避免危险写法:
js
NextResponse.next({ headers: request.headers });
改用:
js
return NextResponse.next({ req: request });
并加入白名单校验:
js
const allowedHosts = ['my.com', 'api.my.com'];
if (!allowedHosts.includes(request.nextUrl.hostname)) {
return NextResponse.redirect('https://my.com');
}
3. 对 Server Actions 增加允许列表(强烈推荐)
js
export async function handleAction(params) {
const allowed = ['createUser', 'deleteItem'];
if (!allowed.includes(params.action)) {
throw new Error('Action not allowed');
}
}
确保不会意外调用任意 exports。
4. 隔离敏感逻辑(架构级防御)
建议:
- 业务 API 独立为 纯后端服务
- RSC 仅用于 UI 数据读取,不执行敏感操作
- 所有 Server Actions 强制加认证(例如 JWT、HMAC)
5. 持续依赖安全管理
推荐工具:
npm audit- Snyk
- Dependabot
- GitHub Security Alerts
示例:
bash
npx snyk test
五、总结:RSC + Next.js 的组合属于"默认危险模式"
React RSC 设计初衷是"零客户端 JS + 服务端逻辑自动化",但这也意味着:
反序列化越来越复杂 → 自动执行链越来越危险 → 漏洞威力呈指数级增长。
这次 CVSS 10.0 漏洞再次证明:
任何自动执行反序列化逻辑的框架,都必须谨慎使用。
默认开启 = 默认高风险。
建议所有团队:
- 重新审视是否需要使用 RSC / Server Actions
- 将敏感逻辑移出 Next.js 应用
- 强制设置 API 白名单与认证
- 使用工具持续监控依赖风险
- 第一时间升级到修复版本
最后说一句,全栈开发切记:
务必不要给非开发环境设置万能操作窗口!开发环境也最好少用,尤其是基于前端参数构建操作的那种
使用switch 或者 if 比 直接拼接要安全的多