GRUB2 中允许绕过 UEFI 安全启动的漏洞

GRUB2 引导加载程序中已修复了 7 个漏洞,这些漏洞允许您绕过 UEFI 安全引导机制并运行未经验证的代码,例如引入在引导加载程序或内核级别运行的恶意软件。 此外,shim 层中存在一个漏洞,该漏洞也允许您绕过 UEFI 安全启动。 这组漏洞的代号为 Boothole 3,与之前在引导加载程序中发现的类似问题类似。

为了解决 GRUB2 和 shim 中的问题,发行版将能够使用 GRUB2、shim 和 fwupd 支持的 SBAT(UEFI 安全引导高级目标)机制。 SBAT 是与 Microsoft 联合开发的,涉及向 UEFI 组件的可执行文件添加额外的元数据,其中包括有关制造商、产品、组件和版本的信息。 指定的元数据经过数字签名认证,并且可以单独包含在 UEFI 安全启动允许或禁止的组件列表中。

大多数 Linux 发行版使用 Microsoft 数字签名的小型填充层来验证 UEFI 安全启动模式下的启动。 该层使用自己的证书验证 GRUB2,这使得发行版开发人员不必让每个内核和 GRUB 更新都经过 Microsoft 认证。 GRUB2 中的漏洞允许您在成功验证 shim 后、加载操作系统之前的阶段执行代码,在安全启动模式处于活动状态时嵌入信任链并获得对进一步启动过程的完全控制,包括加载另一个操作系统、修改操作系统组件系统并绕过锁定保护。

为了解决引导加载程序中的问题,发行版必须创建新的内部数字签名并更新安装程序、引导加载程序、内核包、fwupd 固件和填充层。 在引入 SBAT 之前,更新证书吊销列表(dbx,UEFI 吊销列表)是完全阻止该漏洞的先决条件,因为无论使用何种操作系统,攻击者都可以使用带有旧的易受攻击版本的 GRUB2 的可启动媒体,通过数字签名认证,以破坏 UEFI 安全启动。

SBAT 不是撤销签名,而是允许您阻止其对各个组件版本号的使用,而无需撤销安全启动密钥。 通过 SBAT 阻止漏洞不需要使用 UEFI 证书吊销列表 (dbx),而是在替换内部密钥的级别执行以生成签名并更新 GRUB2、shim 和发行版提供的其他引导工件。 目前,SBAT 支持已添加到大多数流行的 Linux 发行版中。

已发现的漏洞:

  • CVE-2021-3696、CVE-2021-3695是处理特殊设计的PNG图像时基于堆的缓冲区溢出,理论上可用于执行攻击者代码并绕过UEFI安全启动。 值得注意的是,该问题很难利用,因为创建有效的利用需要考虑大量因素以及有关内存布局的信息的可用性。
  • CVE-2021-3697 - JPEG 图像处理代码中的缓冲区下溢。 利用该问题需要了解内存布局,并且其复杂程度与 PNG 问题 (CVSS 7.5) 大致相同。
  • CVE-2022-28733 - grub_net_recv_ip4_packets() 函数中的整数溢出允许发送特制 IP 数据包影响 rsm->total_len 参数。 该问题被标记为所提出的漏洞中最危险的(CVSS 8.1)。 如果成功利用该漏洞,则可以通过分配故意较小的内存大小来将数据写入缓冲区边界之外。
  • CVE-2022-28734 - 处理剥离的 HTTP 标头时出现单字节缓冲区溢出。 解析特制 HTTP 请求时,问题可能会导致 GRUB2 元数据损坏(在缓冲区末尾写入空字节)。
  • CVE-2022-28735 shim_lock 验证程序中存在允许非内核文件加载的问题。 该漏洞可用于在 UEFI 安全启动模式下加载未签名的内核模块或未经验证的代码。
  • CVE-2022-28736 通过重新运行 chainloader 命令,grub_cmd_chainloader() 函数中已释放的内存访问,用于引导 GRUB2 不支持的操作系统。 如果攻击者能够确定 GRUB2 中的内存分配,则利用该漏洞可能会导致攻击者代码执行
  • CVE-2022-28737 - 加载和执行精心设计的 EFI 映像时,handle_image() 函数中会发生填充层中的缓冲区溢出。

来源: opennet.ru

添加评论