2025年12月5日,Cloudflare遭遇了一次大范围服务中断,大量请求返回“500内部服务器错误”,导致全球众多依赖其服务的网站和在线平台受到影响。

事后,Cloudflare将此次事件的根本原因指向一项针对React Server Components严重漏洞的紧急修复程序。该漏洞(CVE-2025-55182)正被攻击者活跃利用。Cloudflare首席技术官Dane Knecht在分析报告中指出,故障并非由外部攻击导致,而是在他们尝试检测和修复该行业性漏洞时,对请求体解析逻辑所做的更改意外触发了内部系统的一个隐藏缺陷。
据报告,约有28%的HTTP流量受到影响。
深入剖析:一次由“连锁反应”引发的系统性故障
本次Cloudflare故障的根本原因,是多个因素叠加导致的结果,非常值得运维与DevOps从业者深入分析和借鉴:
- 紧急变更:为应对React新披露的远程代码执行漏洞(CVE-2025-55182,又名React2Shell),Cloudflare安全团队决定紧急关闭内部WAF的一条测试规则。该规则类型为
action=execute,通过一个“紧急开关”被禁用。
- 全局下发:这项配置变更使用了会立即在全球网络生效的全局配置系统。
- 代码缺陷:问题出在旧版FL1代理的代码逻辑中。当这条
execute规则被跳过(killswitch)后,代码本应创建的相关对象并未生成。然而,后续的代码逻辑依然假设该对象存在,并尝试访问其字段。
- 错误处理策略:这导致Lua运行时抛出
attempt to index field ‘execute’ (a nil value) 异常。关键在于,FL1代理采用了fail-closed的错误处理策略,即一旦出错便直接终止请求,没有任何降级或fail-open的容错机制。因此,所有触发此异常的请求都直接返回了HTTP 500错误。
简而言之,这是一次由紧急配置变更、全局瞬时下发机制、多年未触发的隐藏代码缺陷,以及过于严格的无降级错误处理策略共同叠加造成的系统性故障。这提醒我们,在复杂的分布式系统中,任何一个环节的隐患都可能被紧急的配置变更所引爆。
关于漏洞CVE-2025-55182 (React2Shell)
该漏洞是一个高危的远程代码执行漏洞,存在于React Server Components的Flight协议中。它允许攻击者通过向React Server Function端点发送特制的恶意HTTP请求,在受影响的React或Next.js应用程序中执行任意代码。
受影响的React版本为过去一年内发布的:19.0、19.1.0、19.1.1和19.2.0。除了React库本身,多个依赖它的流行框架也受到影响,包括Next.js、React Router、Waku等。
Cloudflare的此次事件表明,即使是作为底层服务提供商,在应对上游开源组件的紧急安全漏洞时,其自身的变更管理和系统架构的健壮性也面临着严峻考验。
|