28.02.2024

Удалённая уязвимость в прослойке Shim, позволяющая обойти UEFI Secure Boot

В прослойке Shim, применяемой в большинстве Linux-дистрибутивов для верифицированной загрузки в режиме UEFI Secure Boot, выявлена уязвимость (CVE-2023-40547), которая может привести к удалённому выполнению кода и обходу механизма верифицированной загрузки UEFI Secure Boot. Атакующий, контролирующий HTTP-сервер, к которому обращается Shim, может вернуть специально оформленный ответ, приводящий к контролируемой записи в область за границу буфера для организации выполнения кода на раннем этапе загрузки.

Уязвимость вызвана ошибкой в коде загрузки файлов по HTTP, которая проявляется при обработке некорректных ответов, возвращённых HTTP-сервером, к которому обращается shim. Режим HTTPBoot в Shim поддерживается с 2016 года и позволяет организовать загрузку по сети, используя протокол HTTP для извлечения файла c загрузчиком, вызываемым на следующем этапе. Shim, при загрузке файлов через HTTP, выделяет буфер для принимаемых данных, учитывая не фактический размер данных, а размер, указанный в HTTP-заголовке «Content-Lenght». Соответственно, вернув в заголовке Content-Lenght меньшее значение, можно добиться записи хвоста запроса в память за границей буфера.

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

Уязвимость устранена в выпуске Shim 15.8, но для полного блокирования атаки через Shim требуется заверения новой версии в Microsoft и внедрение её в дистрибутивах. Статус устранения уязвимости в дистрибутивах можно оценить на данных страницах: Debian, Ubuntu, SUSE, RHEL, Fedora. Проблема состоит в том, что без отзыва подписи к старой версии исправление бессмысленно, так как атакующий может для компрометации UEFI Secure Boot использовать загрузочный носитель с уязвимым выпуском Shim. Но отзыв подписи приведёт к невозможности верифицированной загрузки дистрибутивов, продолжающих использовать старый выпуск Shim.

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

SBAT позволяет блокировать использование цифровой подписи для отдельных номеров версий компонентов без необходимости отзыва ключей для Secure Boot. Блокирование уязвимостей через SBAT не требует использования списка отозванных сертификатов UEFI (dbx), а производится на уровне замены внутреннего ключа для формирования подписей и обновления GRUB2, shim и других поставляемых дистрибутивами загрузочных артефактов.

Кроме рассмотренной уязвимости в Shim 15.8 также исправлено несколько менее опасных проблем, эксплуатируемых локально:

  • CVE-2023-40548 — целочисленное переполнение в функции verify_sbat_section, приводящее к переполнению буфера на 32-разрядных системах.
  • CVE-2023-40546 — чтение из области памяти вне буфера при выводе сообщений об ошибках через функцию LogError().
  • CVE-2023-40549 — чтение из области памяти вне буфера при обработке в функции verify_buffer_authenticode() специально оформленного файла в формате PE.
  • CVE-2023-40550 — чтение из области памяти вне буфера в функции verify_buffer_sbat().
  • CVE-2023-40551 — чтение из области памяти вне буфера при разборе файлов в формате MZ.

Источник: https://www.opennet.ru/opennews/art.shtml?num=60501 Источник.