Трудноустранимые уязвимости в GRUB2, позволяющие обойти UEFI Secure Boot

Раскрыта информация о 8 уязвимостях в загрузчике GRUB2, позволяющих обойти механизм UEFI Secure Boot и добиться запуска неверифицированного кода, например, осуществить внедрение вредоносного ПО, работающего на уровне загрузчика или ядра.

Напомним, что в большинстве Linux-дистрибутивов для верифицированной загрузки в режиме UEFI Secure Boot используется небольшая прослойка shim, заверенная цифровой подписью Microsoft. Данная прослойка верифицирует GRUB2 собственным сертификатом, что позволяет разработчикам дистрибутивов не заверять каждое обновление ядра и GRUB в Microsoft. Уязвимости в GRUB2 позволяют добиться выполнения своего кода на этапе после успешной верификации shim, но до загрузки операционной системы, вклинившись в цепочку доверия при активном режиме Secure Boot и получив полный контроль за дальнейшим процессом загрузки, в том числе для загрузки другой ОС, модификации компонентов операционной системы и обхода защиты Lockdown.

Как и в случае с прошлогодней уязвимостью BootHole, для блокирования проблемы недостаточно обновить загрузчик, так как атакующий, независимо от используемой операционной системы, может для компрометации UEFI Secure Boot использовать загрузочный носитель со старой уязвимой версией GRUB2, заверенной цифровой подписью. Проблема решается только обновлением списка отозванных сертификатов (dbx, UEFI Revocation List), но в этом случае будет потеряна возможность использования старых установочных носителей c Linux.

На системах с прошивками, в которых обновлён список отозванных сертификатов, в режиме UEFI Secure Boot можно будет загрузить только обновлённые сборки дистрибутивов Linux. Дистрибутивам же потребуется обновить инсталляторы, загрузчики, пакеты с ядром, fwupd-прошивки и shim-прослойку, сгенерировав для них новые цифровые подписи. Пользователи должны будут обновить установочные образы и иные загрузочные носители, а также загрузить список отозванных сертификатов (dbx) в прошивку UEFI. До обновления dbx в UEFI система остаётся уязвимой независимо от установки обновлений в ОС. Статус устранения уязвимостей можно оценить на данных страницах: Ubuntu, SUSE, RHEL, Debian.

Для решения проблем, возникающих при распространении отозванных сертификатов, в будущем планируется задействовать механизм SBAT (UEFI Secure Boot Advanced Targeting), поддержка которого реализована для GRUB2, shim и fwupd, и начиная со следующих обновлений будет использоваться вместо функциональности, предоставляемой пакетом dbxtool. SBAT разработан совместно с Microsoft и подразумевает добавление в исполняемые файлы компонентов UEFI новых метаданных, которые включают информацию о производителе, продукте, компоненте и версии. Указанные метаданные заверяются цифровой подписью и могут дополнительно включаться в списки разрешённых или запрещённых компонентов для UEFI Secure Boot. Таким образом, SBAT позволит при отзыве манипулировать номерами версий компонентов без необходимости перегенерации ключей для Secure Boot и без формирования новых подписей для ядра, shim, grub2 и fwupd.

Выявленные уязвимости

CVE-2020-14372 – при помощи команды acpi в GRUB2 привилегированный пользователь локальной системы может загрузить модифицированные таблицы ACPI, разместив SSDT (Secondary System Description Table) в каталоге /boot/efi и изменив настройки в grub.cfg. Несмотря на активность режима Secure Boot, предложенный SSDT будет выполнен ядром и может использоваться для отключения защиты LockDown, блокирующей пути обхода UEFI Secure Boot. В итоге атакующий может добиться загрузки своего модуля ядра или запуска кода через механизм kexec, без проверки цифровой подписи.

CVE-2020-25632 – обращение к уже освобождённой области памяти (use-after-free) в реализации команды rmmod, проявляющееся при попытке выгрузить любой модуль без учёта связанных с ним зависимостей. Уязвимость не исключает создание эксплоита, который может привести к выполнению кода в обход верификации Secure Boot.

CVE-2020-25647 – запись за границы буфера в функции grub_usb_device_initialize(), вызываемой при инициализации USB-устройств. Проблема может быть эксплуатирована через подключение специально подготовленного USB-устройства, выдающего параметры, размер которых не соответствует размеру буфера, выделенного для структур USB. Атакующий может добиться выполнения кода, не верифицированного в Secure Boot, через манипуляции с USB-устройствами.

CVE-2020-27749 – переполнение буфера в функции grub_parser_split_cmdline(), которое может быть вызвано указанием в командной строке GRUB2 переменных, размером более 1 КБ. Уязвимость позволяет добиться выполнения кода в обход Secure Boot.

CVE-2020-27779 – команда cutmem даёт возможность атакующему удалить диапазон адресов из памяти для обхода Secure Boot.

CVE-2021-3418 – изменения в shim_lock создали дополнительный вектор для эксплуатации прошлогодней уязвимости CVE-2020-15705. При установке в dbx сертификата, используемого для подписи GRUB2, GRUB2 позволял загрузить любое ядро напрямую без проверки подписи.

CVE-2021-20225 – возможность записи данных за пределы буфера при запуске команд с очень большим числом опций.

CVE-2021-20233 – возможность записи данных за границу буфера из-за неверного расчёта размера буфера при использовании кавычек. При расчёте размера предполагалось, что для экранирования одинарной кавычки требуется три символа, хотя на деле необходимо четыре.

А на этом сегодня все. Надеюсь данная статья будет вам полезна.
Журнал Cyber-X

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *