Krytyczna luka w bootloaderze GRUB2, która pozwala ominąć UEFI Secure Boot

W bootloaderze GRUB2 ujawnił 8 luk. Najniebezpieczniejszy problem (CVE-2020-10713), o nazwie kodowej BootHole, daj szansę ominąć mechanizm UEFI Secure Boot i zainstalować niezweryfikowane złośliwe oprogramowanie. Osobliwością tej luki jest to, że aby ją wyeliminować, nie wystarczy zaktualizować GRUB2, ponieważ osoba atakująca może użyć nośnika startowego ze starą, podatną na ataki wersją poświadczoną podpisem cyfrowym. Osoba atakująca może zagrozić procesowi weryfikacji nie tylko Linuksa, ale także innych systemów operacyjnych, m.in Windows.

Problem można rozwiązać jedynie poprzez aktualizację systemu lista unieważnionych certyfikatów (dbx, lista odwołań UEFI), ale w tym przypadku utracona zostanie możliwość korzystania ze starych nośników instalacyjnych w systemie Linux. Niektórzy producenci sprzętu umieścili już w swoim oprogramowaniu sprzętowym zaktualizowaną listę unieważnionych certyfikatów; w takich systemach w trybie UEFI Secure Boot można ładować tylko zaktualizowane kompilacje dystrybucji Linuksa.

Aby wyeliminować lukę w dystrybucjach, będziesz musiał także zaktualizować instalatory, programy ładujące, pakiety jądra, oprogramowanie sprzętowe fwupd i warstwę podkładki, generując dla nich nowe podpisy cyfrowe. Użytkownicy będą musieli zaktualizować obrazy instalacyjne i inne nośniki startowe, a także załadować listę odwołań certyfikatów (dbx) do oprogramowania sprzętowego UEFI. Przed aktualizacją dbx do UEFI system pozostaje podatny na ataki niezależnie od instalacji aktualizacji w systemie operacyjnym.

Słaby punkt spowodowany przepełnienie bufora, które można wykorzystać do wykonania dowolnego kodu podczas procesu uruchamiania.
Luka powstaje podczas analizowania zawartości pliku konfiguracyjnego grub.cfg, który zwykle znajduje się w ESP (partycji systemowej EFI) i może być edytowany przez osobę atakującą z uprawnieniami administratora bez naruszania integralności podpisanej podkładki i plików wykonywalnych GRUB2. Z powodu Błędy w kodzie analizatora konfiguracji procedura obsługi krytycznych błędów analizy YY_FATAL_ERROR wyświetliła jedynie ostrzeżenie, ale nie zakończyła programu. Ryzyko podatności zmniejsza konieczność posiadania uprzywilejowanego dostępu do systemu, jednak problem może być konieczny do wprowadzenia ukrytych rootkitów, jeśli masz fizyczny dostęp do sprzętu (jeśli istnieje możliwość rozruchu z własnego nośnika).

Większość dystrybucji Linuksa używa małego pliku warstwa podkładki, podpisany cyfrowo przez firmę Microsoft. 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. Luka pozwala, zmieniając zawartość pliku grub.cfg, na wykonanie kodu na etapie po udanej weryfikacji podkładki, ale przed załadowaniem systemu operacyjnego, zaklinowanie się w łańcuchu zaufania, gdy tryb Bezpiecznego rozruchu jest aktywny i uzyskanie pełnej kontroli podczas dalszego procesu uruchamiania, obejmującego ładowanie innego systemu operacyjnego, modyfikację komponentów systemu operacyjnego i obejście zabezpieczeń Lockdown.

Krytyczna luka w bootloaderze GRUB2, która pozwala ominąć UEFI Secure Boot

Inne luki w GRUB2:

  • CVE-2020-14308 — przepełnienie bufora spowodowane brakiem sprawdzenia wielkości przydzielonego obszaru pamięci w grub_malloc;
  • CVE-2020-14309 - przepełnienie liczb całkowitych w grub_squash_read_symlink, co może spowodować zapisanie danych poza przydzielonym buforem;
  • CVE-2020-14310 - przepełnienie liczby całkowitej w read_section_from_string, co może skutkować zapisem danych poza przydzielonym buforem;
  • CVE-2020-14311 - przepełnienie liczb całkowitych w grub_ext2_read_link, co może spowodować zapisanie danych poza przydzielonym buforem;
  • CVE-2020-15705 — umożliwia ładowanie niepodpisanych jąder podczas bezpośredniego rozruchu w trybie bezpiecznego rozruchu bez warstwy podkładki;
  • CVE-2020-15706 — dostęp do już zwolnionego obszaru pamięci (wykorzystanie po zwolnieniu) podczas redefiniowania funkcji w czasie wykonywania;
  • CVE-2020-15707 — przepełnienie liczby całkowitej w procedurze obsługi rozmiaru initrd.

Wydano aktualizacje pakietu poprawek dla Debian, Ubuntu, RHEL и SUSE. Dla GRUB2 proponowane zestaw poprawek.

Źródło: opennet.ru

Dodaj komentarz