近日,安全圈掀起轩然大波——固件安全公司Binarly于7月9日发布重磅报告,揭露了全球最广泛使用的开源引导程序U-Boot中存在的六个高危漏洞,这些漏洞已潜伏长达13年之久,一次性被全部曝光。

这些漏洞编号依次为BRLY-2026-037至BRLY-2026-042,其中两个可导致任意代码执行,其余四个则可能引发拒绝服务(DoS)攻击。更令人担忧的是,存在缺陷的代码最早可追溯至2013年7月发布的U-Boot v2013.07版本。换言之,这些漏洞已悄然影响超过50个稳定版本,以及无数下游厂商基于其修改的分支固件。潜在影响范围究竟有多广?保守估计,至少波及数百万台设备。
首先,简单了解一下U-Boot的作用。作为引导加载程序,其主要任务是在操作系统启动之前,完成CPU、内存、外设等硬件的初始化。U-Boot内置了一个名为“Verified Boot”的安全机制,旨在通过加密签名确保仅加载可信的固件。然而,本次曝光的漏洞恰恰出现在FIT(Flattened Image Tree)镜像签名验证的核心代码中——攻击者能够在签名验证完成之前,通过构造恶意FIT镜像来触发漏洞。
风险最高的两个漏洞——BRLY-2026-037和BRLY-2026-038,其根源均在于U-Boot对设备树解析库中fdt_get_name函数返回值的校验处理存在缺陷。当遇到精心构造的畸形镜像时,该函数会直接返回空指针和负长度值,而U-Boot未做任何防护便直接使用这些值。BRLY-2026-037在特定内存布局下,可将空指针引用升级为栈缓冲区溢出;BRLY-2026-038更为严重,利用负长度值使指针逆向移动,最终覆盖返回地址,实现任意代码执行。Binarly研究团队已在QEMU ARM仿真环境中成功验证了BRLY-2026-038的利用可行性,这表明该漏洞并非理论风险,而是能够被实际利用的。
其余四个漏洞同样不容忽视。BRLY-2026-039和BRLY-2026-041允许攻击者通过控制镜像的尺寸或偏移字段,迫使U-Boot越界读取内存直至崩溃;BRLY-2026-040在解析旧版本格式的镜像时,因未检查空指针直接触发崩溃;BRLY-2026-042则利用深度嵌套的镜像结构触发无界递归,耗尽栈内存——每层嵌套仅需12字节的镜像大小,便能消耗至少16字节的栈空间。计算一下:一个精心构造的深层嵌套镜像,只需几十层,栈就会彻底崩溃。
攻击者一旦成功利用代码执行漏洞,便能在操作系统及任何安全软件启动之前,获得设备的完全控制权。禁用安全功能、篡改启动流程、植入隐蔽性极强的持久化固件后门,均易如反掌。更值得警惕的是,此类攻击未必需要物理接触设备。在服务器BMC(基板管理控制器)等支持远程固件更新的系统中,只要攻击者已获取管理界面权限,即可通过上传恶意固件镜像远程触发漏洞。而受DoS漏洞影响的设备,甚至可能无法正常开机,某些情况下必须通过物理接触设备、重新烧录SPI闪存芯片才能恢复。
Binarly已按照U-Boot项目的安全政策提交了漏洞报告,并与维护者Simon Glass和Tom Rini合作,完成了全部六个补丁的开发和审查。相关修复方案已被合并至U-Boot的主分支代码库。然而,现实问题在于:U-Boot由各硬件厂商集成到自家固件中,补丁需要经过厂商适配才能最终抵达终端用户设备。而那些已停止固件更新的老旧设备,可能永远无法获得修复。这一点,正是整个事件中最令人无奈,也最值得行业深思之处。
