2020年7月29日,Eclypsium研究人员在GRUB2引导程序中发现了一个漏洞并将其命名为“BootHole”(CVE-2020-10713),利用该漏洞可在启动进程中执行任意代码。攻击者可利用该漏洞安装持久且隐秘的bootkit或恶意引导程序来控制设备。目前绝大多数linux发行版系统受影响。深信服安全研究团队依据漏洞重要性和影响力进行评估,作出漏洞通告。
GRUB2全称GRand Unified Bootloader 2,统一引导加载程序,是来自GNU项目的操作系统启动程序。用于加载操作系统内核,然后将控制权转移到该内核。还可在计算机启动时选择希望运行的操作系统,解决同一台计算机上安装的多个操作系统的问题。
Eclypsium研究人员在GRUB2引导程序中发现了一个漏洞并将其命名为“BootHole”(CVE-2020-10713),可在启动进程中执行任意代码。攻击者可利用该漏洞安装持久且隐秘的bootkit或恶意引导程序来控制设备。目前绝大多数linux发行版系统受影响。
GRUB2配置文件是一个文本文件,解析异常的grub.cfg文件时在GRUB2中可发生缓冲区溢出。此配置文件是通常位于EFI系统分区中的外部文件,因此可以由具有管理员特权的攻击者修改。攻击者可以在UEFI执行环境中获得任意代码执行权限,该代码可以用于运行恶意软件,更改启动过程,直接篡改OS内核数据或执行许多其他恶意操作。
为了处理来自外部配置文件的命令,GRUB2使用flex和bison从语言描述文件和辅助程序函数生成针对特定域的语言解析引擎。Flex生成的语法引擎包括了处理token的代码如下:
如果处理的token过长,则调用YY_FATAL_ERROR,该函数的实现为:
其中并没有停止执行或退出程序的代码,只将错误输出到控制台并返回到调用的函数,这使得yy_flex_strncpy()被调用,并将配置文件中的源字符串从复制到一个过小的缓冲区中。
除该路径外,flex生成的代码中还有很多其他地方,一旦YY_FATAL_ERROR()执行非预期操作将不会正确返回,并执行不安全的操作。最终,由于配置文件写入的token长度过大无法被解析器正常处理,将造成缓冲区溢出覆盖堆中的关键结构。这些覆盖的字段包括解析器内的结构元素等,可造成任意代码执行。
影响范围
【影响版本】
GRUB 1.99, 2.00, 2.02, 2.04
输入以下命令查看grub2版本
grub-install --version
厂商目前还未发布安全更新,请及时关注官网以获得最新版本。
https://www.gnu.org/software/grub/
1.升级检查并修复 grub.cfg 文件
2.暂时替换引导程序为rEFInd/sysline/systemd-boot/clover
2020/7/29 Eclypsium发布关于CVE-2020-10713的详细信息
2020/7/31 深信服千里目安全实验室发布漏洞分析文章。
1.https://eclypsium.com/2020/07/29/theres-a-hole-in-the-boot/
本文作者:深信服千里目安全实验室
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/136425.html