Hotdry.
systems-engineering

Cloudflare 2025年12月5日宕机工程Postmortem:WAF配置变更的安全回滚实践

剖析25分钟全球流量中断根因,聚焦WAF缓冲区扩容与Killswitch Lua Bug,提炼检测阈值、渐进部署参数及Fail-Open清单。

在高可用分布式系统中,WAF(Web 应用防火墙)配置变更常成单点风险放大器。此次 Cloudflare 事件证明:缓冲区扩容虽为防护 React Server Components 漏洞(CVE-2025-55182)所需,却因后续 Killswitch 全局禁用测试规则触发 FL1 代理 Lua nil 错误,导致 28% HTTP 流量返回 500 中断 25 分钟。观点核心:配置变更须强制渐进 rollout + 类型安全验证,避免 “快速修复” 酿成级联崩溃。

根因证据链路清晰:初始将 WAF body buffer 从 128KB 增至 1MB,支持 Next.js 默认 1MB 上限防护漏洞。此变更经渐进部署,但暴露内部 WAF 规则测试工具错误率升。为加速防护,云团队绕过渐进,使用全局配置 Killswitch 禁用 “execute” 动作规则。该 Killswitch 跳过子规则集评估,却在结果聚合时假设 rule_result.execute 存在,Lua 报 “attempt to index field 'execute' (a nil value)”。FL1 代理(Rust 重写的 FL2 无此 Bug)panic,返回 500。仅启用 Managed Ruleset 的 FL1 客户受影响,中国网络独立未波及。

检测缺失显露:虽自动化警报 08:50 触发事件,但 Killswitch 秒级传播 + Lua 运行时异常,症状似 DDoS(错误率峰值飙升、状态页短暂宕机巧合)。MTTD(平均检测时间)约 3min,但 MTTR(修复时间)依赖人工回滚至 09:12。证据:500 错误曲线峰值后波动,因 ClickHouse 每 5min 刷新配置,间歇恢复误导诊断。

缓解战术高效:标准 SOP 下,识别 Killswitch 规则类型 Bug,回滚配置 + 重启代理。参数落地:1)Killswitch 预测试覆盖 “execute/skip/log/block” 全动作,阈值 P99 错误率 < 0.01%;2)渐进部署 canary 1% 流量,观察指标:body 解析 latency<50ms、规则命中率波动 < 5%、内存峰值 < 80%;3)自动化回滚脚本,检测 Lua 异常关键字 “nil value” 触发,TTL 30s。

韧性升级清单(可直接 fork):

  • Fail-Open 默认:配置解析失败时,日志 + fallback 已知好版本,不 drop 流量。Rust 代码示例:if let Some(execute) = &rule_result.execute { ... } else { continue; }
  • 版本隔离:FL1/FL2 双轨,>50% 流量迁 FL2 前,配置变更 A/B 测试隔离。
  • Shadow Mode:新配置 shadow 运行,P95 latency 阈值 <100ms、错误注入模拟覆盖率> 95%。
  • Circuit Breaker:全局变更后 5min 内错误率 > 1%,auto-rollback + 警报 PagerDuty。
  • 监控参数:Datadog dashboard 追踪 “WAF buffer size”、“Killswitch hit count”、Lua panic rate;SLO 目标:变更后 99.99% 无中断。

回滚策略参数:预热期 1h(1%→10%→50%→100%),每阶梯健康检查 > 99.9%(5min 滑动窗)。事后,Cloudflare 承诺增强配置 rollout、break-glass 优化、硬 fail 替换 fail-open。此案警示:安全急修勿牺牲工程纪律,类型安全 + 渐进是底线。

资料来源:

查看归档