В загрузчике GRUB2 устранено 7 уязвимостей, позволяющих обойти механизм UEFI Secure Boot и добиться запуска неверифицированного кода, например, осуществить внедрение вредоносного ПО, работающего на уровне загрузчика или ядра. Дополнительно отмечается одна уязвимость в прослойке shim, которая также позволяет обойти UEFI Secure Boot. Группа уязвимостей получила кодовое имя Boothole 3, по аналогии с аналогичными проблемами, ранее выявленными в загрузчике.
Для устранения проблем в GRUB2 и shim дистрибутивы смогут использовать механизм SBAT (UEFI Secure Boot Advanced Targeting), поддержка которого реализована для GRUB2, shim и fwupd. SBAT разработан совместно с Microsoft и подразумевает добавление в исполняемые файлы компонентов UEFI дополнительных метаданных, которые включают информацию о производителе, продукте, компоненте и версии. Указанные метаданные заверяются цифровой подписью и могут отдельно включаться в списки разрешённых или запрещённых компонентов для UEFI Secure Boot.
В большинстве Linux-дистрибутивов для верифицированной загрузки в режиме UEFI Secure Boot используется небольшая прослойка shim, заверенная цифровой подписью Microsoft. Данная прослойка верифицирует GRUB2 собственным сертификатом, что позволяет разработчикам дистрибутивов не заверять каждое обновление ядра и GRUB в Microsoft. Уязвимости в GRUB2 позволяют добиться выполнения своего кода на этапе после успешной верификации shim, но до загрузки операционной системы, вклинившись в цепочку доверия при активном режиме Secure Boot и получив полный контроль за дальнейшим процессом загрузки, в том числе для загрузки другой ОС, модификации компонентов операционной системы и обхода защиты Lockdown.
Для устранения проблем в загрузчике дистрибутивам приходится формировать новые цифровые подписи и обновлять инсталляторы, загрузчики, пакеты с ядром, fwupd-прошивки и shim-прослойку, так как старые сборки невозможно использовать при попадании цифровой подписи уязвимого компонента в список отозванных сертификатов (dbx, UEFI Revocation List). До внедрения SBAT, обновление списка отозванных сертификатов было обязательным условием полного блокирования уязвимости, так как атакующий, независимо от используемой операционной системы, мог для компрометации UEFI Secure Boot использовать загрузочный носитель со старой уязвимой версией GRUB2, заверенной цифровой подписью.
Вместо отзыва подписи SBAT позволяет блокировать её использование для отдельных номеров версий компонентов без необходимости отзыва ключей для Secure Boot. Блокирование уязвимостей через SBAT не требует использования списка отозванных сертификатов UEFI (dbx), а производится на уровне замены ключа для формирования подписей и обновления GRUB2, shim и других поставляемых дистрибутивами загрузочных артефактов. В настоящее время поддержка SBAT уже добавлена в большинство популярных дистрибутивов Linux.
Выявленные уязвимости:
- CVE-2021-3696, CVE-2021-3695– переполнения буфера в куче при обработке специально оформленных PNG-изображений, которое теоретически можно использовать для организации выполнения кода атакующего и обхода UEFI Secure Boot. Отмечается, что проблема трудно эксплуатируема, так как для создания рабочего эксплоита требуется учёт большого числа факторов и наличия сведений о раскладке памяти.
- CVE-2021-3697– переполнение через нижнюю границу буфера (buffer underflow) в коде обработки JPEG-изображений. Эксплуатация проблемы требует получения сведений о раскладке памяти и находится примерно на том же уровне сложности, что и проблема с PNG (CVSS 7.5).
- CVE-2022-28733 – целочисленное переполнение в функции grub_net_recv_ip4_packets(), позволяющее влиять на параметр rsm->total_len через отправку специально оформленного IP-пакета. Проблема отмечена как наиболее опасная из представленных уязвимостей (CVSS 8.1). При успешной эксплуатации уязвимость позволяет записать данные за границу буфера через выделение заведомо меньшего размера памяти.
- CVE-2022-28734 – однобайтовое переполнение буфера при обработке разделённых HTTP-заголовков. Проблема может привести к повреждению метаданных GRUB2 (запись нулевого байта сразу за концом буфера) при разборе специально оформленных HTTP-запросов.
- CVE-2022-28735 – проблема в верификаторе shim_lock, позволяющая загрузить файлы, не относящиеся к ядру. Уязвимость может быть использована для загрузки в режиме UEFI Secure Boot незаверенных цифровой подписью модулей ядра или непроверенного кода.
- CVE-2022-28736 – обращение к уже освобождённой области памяти в функции grub_cmd_chainloader() через повторный запуск команды chainloader, используемой для загрузки операционных систем, не поддерживаемых в GRUB2. Эксплуатация может привести к выполнению кода атакующего, если злоумышленник сможет определить особенности распределения памяти в GRUB2
- CVE-2022-28737 – переполнение буфера в прослойке shim, возникающее в функции handle_image() при загрузке и выполнении специально оформленных образов EFI.