CVE-2026-34963barebox 是一个广泛应用的 bootloader。在 2026.04.0 版本之前,其 EFI PE 加载器组件存在多个严重的内存安全漏洞。核心问题在于 `efi/loader/pe.c` 文件中,代码使用 32 位算术运算来计算虚拟镜像大小,这容易导致整数溢出,进而引发堆分配不足。同时,PE 节加载逻辑缺乏对 `PointerToRawData` 与拷贝大小之和的有效边界检查。攻击者可以利用这些缺陷,通过 TFTP、USB、SD 卡或网络启动等渠道分发特制的恶意 EFI PE 二进制文件。一旦 barebox 尝试加载该文件,就会触发堆缓冲区溢出或越界读取,最终导致在 bootloader 上下文中执行任意恶意代码,严重威胁设备启动过程的安全性。
该漏洞的根本原因位于 barebox 源码的 `efi/loader/pe.c` 模块中,涉及两个相互关联的内存安全缺陷。第一个缺陷是整数溢出。在解析 EFI PE 文件头时,代码为了确定镜像所需的虚拟内存大小,对节表中的 `VirtualAddress` 和 `SizeOfRawData` 字段进行了加法运算。由于该运算使用了 32 位算术逻辑,攻击者可以通过构造极大的字段值,使得运算结果超过 32 位整数的最大值(2^32-1),从而发生回绕。这导致计算出的镜像大小异常小,进而分配的堆缓冲区远不足以容纳实际的节内容。第二个缺陷是边界检查缺失。在将 PE 文件的原始数据节复制到之前分配的堆内存中时,代码逻辑仅基于溢出后的小尺寸进行操作,但没有严格校验源数据指针(`PointerToRawData`)加上待复制的长度是否仍然位于合法的 PE 文件缓冲区范围内。利用链如下:攻击者首先构造一个特制的恶意外部 EFI PE 二进制文件,其中包含触发上述溢出的特定节头信息。随后,通过 TFTP 服务器、USB 驱动器、SD 卡或网络启动接口将此文件放置在目标设备的启动路径上。当目标设备重启并运行 barebox 加载该文件时,整数溢出导致堆分配过小,随后的拷贝操作会向堆中写入大量数据,造成堆缓冲区溢出或越界读取。由于 bootloader 通常运行在高特权模式,这种破坏可被利用来篡改执行流,实现任意代码执行,从而完全控制设备的启动过程。