CrowdStrike 事故解析:21 个字段、20 个槽位、850 万台蓝屏
来源:dev.to — 2026-09-29
📋 概述
2024 年 7 月 19 日的 CrowdStrike 事故是大多数人经历过最大的 IT 故障,但它的根因一句话就能说完:一个检测模板声明了 21 个输入字段,而喂给它的代码只提供了 20 个。CrowdStrike 向所有在线的 Windows 机器推送了使用第 21 个字段的内容更新,约 850 万台设备蓝屏并陷入重启循环。坏文件 Channel File 291 在 04:09 UTC 发出、05:27 撤回,78 分钟的窗口里,那些已经加载它的机器每次开机都会继续崩溃。按官方根因分析,第 21 个值被读到了 20 元素数组之外,属于内核驱动里的越界内存读——Windows 抓不到。这个不匹配早在二月就随版本发布了,却因为此前所有规则在第 21 个字段上都用通配符而一直没被读到;云端的 Content Validator 之所以放行,是因为它拿规则去对照那份本身就写错了的声明。作者提醒:任何在特权位置下载并解析配置的东西——驱动、sidecar、代理——遇到的都是同一个事故。
🔑 核心要点
- 根因只有一句:模板声明 21 个输入字段,供给它的集成代码只给了 20 个值。
- 时间线是 04:09 UTC 发布、05:27 撤回,78 分钟窗口内约 850 万台设备蓝屏,已加载的机器会反复崩溃。
- 问题藏在「模板类型是代码、模板实例是数据」的缝隙里:配置数据不被当作代码走同一套分阶段发布。
- 不匹配二月就发布了,却隐藏数月,因为此前所有规则在第 21 个字段上都使用通配符,从未真正读它。
- 校验器没拦住,是因为它依据那份本身就写错的声明来评估规则,等于用错的尺子量错的答案。
- 修复只能人工进行:安全模式、删一个文件、重启,BitLocker 机器还得先输恢复密钥;作者称这是他的评价信号之一。
💡 金句
这个不匹配在二月就已经发布,却因为第 21 个字段一直是通配符,隐藏了整整五个月。
👍 0
👎 0
← 返回 dev.to 首页