Luki w GRUB2, które pozwalają ominąć UEFI Secure Boot

W bootloaderze GRUB2 naprawiono 7 luk, które pozwalają ominąć mechanizm UEFI Secure Boot i uruchomić niezweryfikowany kod, np. wprowadzić złośliwe oprogramowanie działające na poziomie bootloadera lub jądra. Dodatkowo w warstwie podkładki znajduje się jedna luka, która pozwala również ominąć UEFI Secure Boot. Grupie luk nadano nazwę kodową Boothole 3, podobnie jak podobne problemy zidentyfikowane wcześniej w programie ładującym.

Aby rozwiązać problemy z GRUB2 i podkładką, dystrybucje będą mogły korzystać z mechanizmu SBAT (UEFI Secure Boot Advanced Targeting), który jest obsługiwany przez GRUB2, podkładkę i fwupd. SBAT został opracowany wspólnie z firmą Microsoft i polega na dodaniu do plików wykonywalnych komponentów UEFI dodatkowych metadanych, które obejmują informacje o producencie, produkcie, komponencie i wersji. Określone metadane są certyfikowane podpisem cyfrowym i mogą być oddzielnie zawarte na listach dozwolonych lub zabronionych komponentów dla UEFI Secure Boot.

Większość dystrybucji Linuksa korzysta z małej warstwy podkładki podpisanej cyfrowo przez firmę Microsoft w celu zweryfikowania rozruchu w trybie bezpiecznego rozruchu UEFI. Ta warstwa weryfikuje GRUB2 za pomocą własnego certyfikatu, co pozwala twórcom dystrybucji nie mieć certyfikatu każdego jądra i aktualizacji GRUB-a przez Microsoft. Luki w GRUB2 pozwalają na wykonanie kodu na etapie po udanej weryfikacji podkładki, ale przed załadowaniem systemu operacyjnego, wklinowanie się w łańcuch zaufania, gdy tryb Bezpiecznego rozruchu jest aktywny i uzyskanie pełnej kontroli nad dalszym procesem rozruchu, w tym ładowanie innego systemu operacyjnego, modyfikowanie komponentów systemu operacyjnego i omijanie ochrony Lockdown.

Aby naprawić problemy z bootloaderem, dystrybucje będą musiały utworzyć nowe wewnętrzne podpisy cyfrowe i zaktualizować instalatory, programy ładujące, pakiety jądra, oprogramowanie sprzętowe fwupd i warstwę podkładkową. Przed wprowadzeniem SBAT aktualizacja listy odwołań certyfikatów (dbx, UEFI Revocation List) była warunkiem całkowitego zablokowania luki, ponieważ osoba atakująca, niezależnie od używanego systemu operacyjnego, mogła użyć nośnika startowego ze starą, podatną na ataki wersją GRUB2, poświadczony podpisem cyfrowym, aby naruszyć bezpieczeństwo UEFI Secure Boot.

Zamiast unieważniać podpis, SBAT umożliwia zablokowanie jego użycia dla poszczególnych numerów wersji komponentów bez konieczności unieważniania kluczy dla Bezpiecznego rozruchu. Blokowanie podatności poprzez SBAT nie wymaga użycia listy odwołań certyfikatów UEFI (dbx), ale odbywa się na poziomie wymiany klucza wewnętrznego w celu wygenerowania podpisów i aktualizacji GRUB2, podkładki i innych artefaktów rozruchowych dostarczanych przez dystrybucje. Obecnie obsługa SBAT została już dodana do najpopularniejszych dystrybucji Linuksa.

Zidentyfikowane podatności:

  • CVE-2021-3696, CVE-2021-3695 to przepełnienia bufora oparte na stercie podczas przetwarzania specjalnie zaprojektowanych obrazów PNG, które teoretycznie można wykorzystać do wykonania kodu atakującego i ominięcia bezpiecznego rozruchu UEFI. Należy zauważyć, że problem jest trudny do wykorzystania, ponieważ utworzenie działającego exploita wymaga uwzględnienia dużej liczby czynników i dostępności informacji o układzie pamięci.
  • CVE-2021-3697 – Niedopełnienie bufora w kodzie przetwarzania obrazu JPEG. Wykorzystanie tego problemu wymaga znajomości układu pamięci i jest na mniej więcej tym samym poziomie złożoności, co problem z PNG (CVSS 7.5).
  • CVE-2022-28733 — Przepełnienie liczby całkowitej w funkcji grub_net_recv_ip4_packets() umożliwia zmianę parametru rsm->total_len poprzez wysłanie specjalnie spreparowanego pakietu IP. Problem jest oznaczony jako najniebezpieczniejszy z zaprezentowanych luk (CVSS 8.1). Jeśli luka zostanie pomyślnie wykorzystana, umożliwia zapisanie danych poza granicę bufora poprzez celowe przydzielenie mniejszego rozmiaru pamięci.
  • CVE-2022-28734 – Przepełnienie bufora jednobajtowego podczas przetwarzania pozbawionych nagłówków HTTP. Problem może powodować uszkodzenie metadanych GRUB2 (zapisanie bajtu zerowego tuż po końcu bufora) podczas analizowania specjalnie spreparowanych żądań HTTP.
  • CVE-2022-28735 Problem w weryfikatorze shim_lock umożliwia ładowanie plików innych niż jądro. Lukę można wykorzystać do załadowania niepodpisanych modułów jądra lub niezweryfikowanego kodu w trybie UEFI Secure Boot.
  • CVE-2022-28736 Już zwolniony dostęp do pamięci w funkcji grub_cmd_chainloader() poprzez ponowne uruchomienie polecenia chainloader, używanego do uruchamiania systemów operacyjnych nieobsługiwanych przez GRUB2. Eksploatacja może skutkować wykonaniem kodu przez osobę atakującą, jeśli osoba atakująca będzie w stanie określić alokację pamięci w GRUB2
  • CVE-2022-28737 — Podczas ładowania i wykonywania spreparowanych obrazów EFI w funkcji handle_image() występuje przepełnienie buforu w warstwie podkładki.

Źródło: opennet.ru

Dodaj komentarz