兄弟们,如果你以为上周火急火燎修完那个 RCE 漏洞就能安稳过年,那我有个坏消息要告诉你。
React 官方昨天又发公告了。
简单总结就是:上周那个用来修补丁的补丁,被安全研究员围观之后,发现补丁自己也有漏洞。这剧情走向,简直就是程序员最怕的“禁止套娃”。
发生了什么事?
上周大家都在修 React Server Components (RSC) 的远程代码执行漏洞(React2Shell),对吧?
就在大家升级完,觉得万事大吉的时候,安全圈的大佬们秉持着“趁你病要你命”(划掉,是负责任的代码审计)的精神,对着新补丁一顿猛攻。结果发现:
- 旧的坑是填上了。
- 但在填坑的土里,又挖出了两个新坑。
这次爆出来的两个 CVE,虽然没有上周的 RCE 那么毁天灭地,但依然很恶心:
1. 拒绝服务攻击 (DoS) - 高危
只要给你的 Server Functions 发一个精心构造的恶意请求,React 在反序列化的时候就会陷入死循环。 后果就是服务器 CPU 直接拉满,进程卡死。 最坑的是,只要你的项目开了 RSC 功能,哪怕你一行 Server Function 都没写,也可能中招。
2. 源码泄露 - 中危
同样是通过恶意请求,可以让 Server Function 居然把自己的源码作为字符串返回给客户端。 如果你的代码里有这种硬编码的操作:
// ❌ 这种代码要是泄露了,你就得连夜改密码了
const db = createConnection('MY_SUPER_SECRET_PASSWORD');
那攻击者就能直接在 HTTP 响应里看到你的密码裸奔。
最尴尬的局面:上周的补丁是“有毒”的
这次公告最核心的一点在于:上周大家急匆匆升上去的版本,现在成了受影响版本。
如果你现在的 package.json 里写着这几个版本,恭喜你,中奖了,请立刻再升一次:
- 🚫
19.0.2 - 🚫
19.1.3 - 🚫
19.2.2
真正能保平安的最新版本是:
- ✅ 19.0.3
- ✅ 19.1.4
- ✅ 19.2.3
受影响的依然是 RSC 的那一套(Next.js, Waku, Parcel 等)。至于写纯客户端 React(SPA)或者普通 React Native 的朋友,可以继续吃瓜,这次雨女无瓜。
杂谈两句
这种“修了一个 Bug 引出新 Bug”的剧情,在软件工程里其实挺常见的(当年 Log4j 也是修了好几轮)。官方说法是“这代表了健康的响应周期”,翻译一下就是:“大佬们盯得紧,虽然很烦,但总比没人发现好。”
给咱们的启示:
- 依赖地狱是真实的:用越新的技术(比如 RSC),就要做好随时当“Beta 测试员”的心理准备。
- 别在代码里写 Secret:不管框架多安全,永远别把密钥硬编码在文件里。
process.env才是永远的神。哪怕源码漏了,攻击者看到的也只是一行process.env.API_KEY。
最后
虽然今天是周五,大家心早就飞了,但还是建议各位负责基建或后端渲染的同学,花 5 分钟去检查一下 lock文件。
毕竟,主动升级叫“技术维护”,被攻击了再升级那叫“生产事故”。
祝大家周末愉快,无 Bug一身轻!