十月的最后一周,固件圈在传一个数字:504。
编号 CVE-2026-97631,CVSS 4.0 评分 9.5。
一台服务器从网络启动,PXE,数据中心里最不起眼的路径。
Secure Boot 还没开始验签,固件先从 DHCP 拿地址、从 TFTP 拉镜像。这期间,驱动挂着一个接收请求,专门收 ICMP 错误报文,存进 Mode.IcmpError 字段。知乎专栏
字段 504 字节。96 字节头,408 字节载荷。
问题在拷贝循环:它用累计长度做判断。假设报文分两片,每片 400 字节,第一片拷 400,累计 400;第二片累计到 800,超过 504。这时它走的不是“不拷”,而是“拷 296 字节”。
指针又按累计的 800 前进,不是按实际写入的 296。两片下来写了 696 字节,缓冲只有 504,超出的 192 字节落到结构体后面的内存里。
IPv4 和 IPv6 两个处理函数,错得一模一样。知乎专栏
这段拷贝循环 2010 年 11 月被加进 edk2,一留就是 16 年。知乎知乎专栏

它藏在 EDK II 的 PXE 驱动里。EDK II 是 TianoCore 维护的开源 UEFI 参考实现。
AMI、Insyde、Phoenix 的 BIOS 都从它改出来,微软的 Project Mu 也用了它。
后果分两档。
轻的一档不需要任何技巧:写坏私有数据,下一次 ICMP 错误进来,DXE core 触发 CPU 异常,启动挂死。
发一个报文就能做到,可远程、可重复。对靠 PXE 批量装机的机房,这是一次现成的拒绝服务。
重的一档要求攻击者知道目标固件的确切构建——BIOS 版本、编译配置、内存布局。
满足之后,可以在同一个报文里伪造事件结构,让 CoreSignalEvent 在 DXE 阶段以 ring 0 派发攻击者提供的字节。
它跑在 Secure Boot 之前。TPM 还没度量,操作系统的任何防护都还不存在。
Metasploit 作者 HD Moore 现在是 Dragos 的首席研究官。他的说法是,攻击者可以在这个时点劫持程序流,趁启动过程还能碰到 TPM,破掉磁盘加密;设备被盗的场景更容易。知乎
载荷本身不持久,跑一次就没了。但一次执行足够装一个每次启动都跟着跑的东西。
漏洞是安全研究员 Alex Matrosov 和 Dan Holmes-Mitra 找到的,原定 2027 年 1 月协同披露。
9 月 28 日,AMI 的一位工程师把带 CVE 编号的修复 PR 推到了公开仓库。计划作废。
10 月 15 日修复合入主干,10 月 22 日 TianoCore 发出公告。从 PR 公开到公告隔了 24 天,会看代码的人足够从 diff 反推触发条件。知乎

更麻烦的部分在补丁之后。
上游 main 修好了,最新的 stable tag 还落后几百个提交。
公告里的 patched 一栏写着 Not patched currently。补丁要穿过四层。知乎专栏
TianoCore 出稳定版;AMI、Insyde、Phoenix 合进自己的代码树,适配不同平台;整机厂或主板厂打包成 BIOS 更新;客户再排变更窗口推送。
BIOS 更新要重启,失败就变砖。多数企业把它排进季度维护窗口,不排进本周。
所以眼下的现实是:源码 10 月 15 日就修好了,到了 10 月 28 日,用户还是装不上。这不是哪一家在拖,是固件供应链本来的速度。知乎
它拿到的是比内核更高的权限,走的却是长一个数量级的修复路径。

谁真的中招?四个条件缺一不可:机器从网络启动;固件基于 EDK2;PXE 开着,而它在 EDK II 的标准构建里默认开着;攻击者能在那几秒里往目标 IP 发包。知乎
家用和小办公室基本无关,只从硬盘启动的机器不受影响。截至 10 月 27 日,CISA 的已知被利用漏洞目录里没有它,也没有在野利用的报告。知乎
不需要 PXE 的,关掉。机房不能关的,靠网络侧限制,盯 PXE 阶段异常的 ICMP 错误和莫名卡住的启动。
2024 年 1 月,同一段 PXE 代码里被翻出九个漏洞,那次叫 PixieFail。
之后社区专门对 EDK2 做了几轮 fuzzing,目标就是把这块代码翻干净。这次这个洞,它们没找到。
错误在长度边界上,要构造特定长度的报文才触发,常规 fuzzing 覆盖不到。
一段 16 年前的代码,成了整个行业开机流程的公共地基。它平时跑得很好,错只出现在没人构造过的输入上。
补它的成本,最后由每一台机器的拥有者分摊。