W loaderze GRUB2 naprawiono 7 podatności, które umożliwiają obejście mechanizmu UEFI Secure Boot i uruchomienie niezweryfikowanego kodu, na przykład wprowadzenie złośliwego oprogramowania działającego na poziomie bootloadera lub jądra. Dodatkowo zidentyfikowano jedną podatność w warstwie shim, która również pozwala na ominięcie UEFI Secure Boot. Grupa podatności otrzymała nazwę kodową Boothole 3, podobnie jak wcześniejsze problemy z bootloaderem.
Aby rozwiązać problemy w GRUB2 i shim, dystrybucje będą mogły wykorzystać mechanizm SBAT (UEFI Secure Boot Advanced Targeting), którego wsparcie zostało wdrożone dla GRUB2, shim oraz fwupd. SBAT został opracowany wspólnie z Microsoft i zakłada dodanie do plików wykonywalnych komponentów UEFI dodatkowych metadanych, które zawierają informacje o producencie, produkcie, komponencie i wersji. Wskazane metadane są podpisywane cyfrowo i mogą być osobno włączane do list komponentów dozwolonych lub zabronionych dla UEFI Secure Boot.
W większości dystrybucji Linuxa do zweryfikowanego uruchamiania w trybie UEFI Secure Boot używa się małej warstwy shim, podpisanej cyfrowo przez firmę Microsoft. Ta warstwa weryfikuje GRUB2 własnym certyfikatem, co pozwala deweloperom dystrybucji unikać podpisywania każdego aktualizowanego jądra i GRUB w Microsoft. Luki w GRUB2 pozwalają na wykonanie własnego kodu na etapie po pomyślnej weryfikacji shim, ale przed załadowaniem systemu operacyjnego, wkraczając w łańcuch zaufania w aktywnym trybie Secure Boot, co daje pełną kontrolę nad dalszym procesem uruchamiania, w tym nad uruchomieniem innego systemu operacyjnego, modyfikacją komponentów systemu operacyjnego i omijaniem zabezpieczeń Lockdown.
Aby rozwiązać problemy w bootloaderze, dystrybucje będą musiały utworzyć nowe wewnętrzne podpisy cyfrowe oraz zaktualizować instalatory, bootloadery, pakiety jądra, firmware fwupd oraz warstwę shim. Przed wdrożeniem SBAT, aktualizacja listy wycofanych certyfikatów (dbx, UEFI Revocation List) była obowiązkowym warunkiem całkowitego zablokowania podatności, ponieważ atakujący, niezależnie od używanego systemu operacyjnego, mógł do kompromitacji UEFI Secure Boot użyć nośnika rozruchowego ze starą, podatną wersją GRUB2, certyfikowaną cyfrowym podpisem.
Zamiast wycofywania podpisu, SBAT pozwala na blokowanie jego użycia dla konkretnych numerów wersji komponentów bez konieczności wycofywania kluczy dla Secure Boot. Blokowanie podatności poprzez SBAT nie wymaga korzystania z listy wycofanych certyfikatów UEFI (dbx), a odbywa się na poziomie zamiany wewnętrznego klucza do generowania podpisów oraz aktualizacji GRUB2, shim i innych dostarczanych przez dystrybucje artefaktów rozruchowych. Obecnie wsparcie dla SBAT zostało już dodane do większości popularnych dystrybucji Linux.
Zidentyfikowane luki:
- CVE-2021-3696, CVE-2021-3695 - przepełnienie bufora w stercie podczas przetwarzania odpowiednio sformatowanych obrazów PNG, które teoretycznie może być wykorzystane do zdalnego wykonania kodu przez atakującego i obejścia UEFI Secure Boot. Zauważono, że problem jest trudny do wykorzystania, ponieważ stworzenie działającego eksploita wymaga uwzględnienia wielu czynników oraz znajomości rozkładu pamięci.
- CVE-2021-3697 - przepełnienie bufora od dołu (buffer underflow) w kodzie przetwarzania obrazów JPEG. Wykorzystanie tej luki wymaga znajomości rozkładu pamięci i znajduje się na mniej więcej tym samym poziomie trudności, co problem z PNG (CVSS 7.5).
- CVE-2022-28733 — przepełnienie liczb całkowitych w funkcji grub_net_recv_ip4_packets(), które pozwala na wpływ na parametr rsm->total_len poprzez wysyłanie odpowiednio sformatowanego pakietu IP. Problem ten uznano za najbardziej niebezpieczny z przedstawionych luk (CVSS 8.1). Po skutecznym wykorzystaniu luka pozwala na zapis danych poza granicami bufora przez alokację celowo mniejszego rozmiaru pamięci.
- CVE-2022-28734 — jednobajtowe przepełnienie bufora przy przetwarzaniu podzielonych nagłówków HTTP. Problem ten może prowadzić do uszkodzenia metadanych GRUB2 (zapis zera bezpośrednio po końcu bufora) podczas analizy specjalnie sformatowanych żądań HTTP.
- CVE-2022-28735 — problem w weryfikatorze shim_lock, który pozwala na załadowanie plików niezwiązanych z jądrem. Luka ta może być wykorzystana do załadowania niezabezpieczonych cyfrowo podpisanych modułów jądra lub niezweryfikowanego kodu w trybie UEFI Secure Boot.
- CVE-2022-28736 — dostęp do już zwolnionej przestrzeni pamięci w funkcji grub_cmd_chainloader() poprzez ponowne uruchomienie polecenia chainloader, używanego do ładowania systemów operacyjnych, które nie są obsługiwane w GRUB2. Wykorzystanie tej luki może prowadzić do wykonania kodu atakującego, jeśli napastnik będzie mógł określić cechy rozdzielczości pamięci w GRUB2.
- CVE-2022-28737 — przepełnienie bufora w warstwie shim, które występuje w funkcji handle_image() podczas ładowania i wykonania odpowiednio sformatowanych obrazów EFI.
Źródło: opennet.ru
