Ve vrstvě Shim, používané v většině Linuxových distribucí pro ověřený start v režimu UEFI Secure Boot, byla zjištěna zranitelnost (CVE-2023-40547), která může vést k vzdálenému provádění kódu a obejití mechanismu ověřeného spuštění UEFI Secure Boot. Útočník, který ovládá HTTP server, na který se Shim obrací, může vrátit speciálně upravenou odpověď, která vede k kontrolovanému zápisu do oblasti mimo buffer pro provedení kódu v rané fázi spuštění.
Zranitelnost je způsobena chybou v kódu pro načítání souborů přes HTTP, která se projevuje při zpracování nesprávných odpovědí vrácených HTTP serverem, na který se shim obrací. Režim HTTPBoot v Shim je podporován od roku 2016 a umožňuje uspořádat spuštění přes síť pomocí protokolu HTTP pro získání souboru s bootloaderem, který je vyvolán v následující fázi. Shim při načítání souborů přes HTTP vyčleňuje buffer pro přijímaná data, přičemž zohledňuje nikoli skutečnou velikost dat, ale velikost uvedenou v HTTP hlavičce „Content-Length“. Odpovídajícím způsobem, vrácením menší hodnoty v hlavičce Content-Length lze dosáhnout zápisu konce požadavku do paměti mimo buffer.
Shim je podepsán digitálním podpisem Microsoftu a ověřuje GRUB2 vlastním certifikátem, což umožňuje vývojářům distribucí nepodepisovat každou aktualizaci jádra a GRUB u Microsoftu. Zranitelnost v Shim umožňuje vniknutí do řetězce důvěry v aktivním režimu Secure Boot a získání plné kontroly nad dalším procesem bootování, například pro zavedení jiného OS, modifikaci komponent operačního systému a obejití ochrany Lockdown.
Zranitelnost byla odstraněna ve vydání Shim 15.8, ale pro úplné zablokování útoku přes Shim je nutné, aby byla nová verze podepsaná Microsoftem a implementována v distribucích. Stav odstranění zranitelnosti v distribucích lze vyhodnotit na těchto stránkách: Debian, Ubuntu, SUSE, RHEL, Fedora. Problém spočívá v tom, že bez odvolání podpisu staré verze je oprava bezpředmětná, protože útočník může pro kompromitaci UEFI Secure Boot použít spouštěcí médium se zranitelným vydáním Shim. Odvolání podpisu však povede k nemožnosti ověřeného spuštění distribucí, které stále používají staré vydání Shim.
Pro zablokování zranitelnosti bez odvolání digitálního podpisu mohou distribuce použít mechanismus SBAT (UEFI Secure Boot Advanced Targeting), jehož podpora byla implementována pro GRUB2, shim a fwupd ve většině populárních distribucí Linuxu. SBAT byl vyvinut ve spolupráci s Microsoftem a zahrnuje přidání dalších metadat do spustitelných souborů komponent UEFI, která obsahují informace o výrobci, produktu, komponentě a verzi. Uvedená metadata jsou digitálně podepsána a mohou být samostatně zařazena do seznamů povolených nebo zakázaných komponent pro UEFI Secure Boot.
SBAT umožňuje blokovat použití digitálního podpisu pro jednotlivá čísla verzí komponent bez nutnosti odvolání klíčů pro Secure Boot. Blokování zranitelností prostřednictvím SBAT nevyžaduje použití seznamu odvolaných certifikátů UEFI (dbx) a provádí se na úrovni výměny interního klíče pro generování podpisů a aktualizaci GRUB2, shim a dalších dodávaných distribucemi zaváděcích artefaktů.
Kromě zmiňované zranitelnosti byla ve verzi Shim 15.8 opravena také řada méně závažných problémů, které byly zneužívány lokálně:
- CVE-2023-40548 — přetečení celé číslo v funkci verify_sbat_section, vedoucí k přetečení bufferu na 32bitových systémech.
- CVE-2023-40546 — čtení z oblasti paměti mimo buffer při vypsání chybových zpráv prostřednictvím funkce LogError().
- CVE-2023-40549 — čtení z oblasti paměti mimo buffer při zpracování ve funkci verify_buffer_authenticode() speciálně upraveného souboru ve formátu PE.
- CVE-2023-40550 — čtení z oblasti paměti mimo buffer ve funkci verify_buffer_sbat().
- CVE-2023-40551 — čtení z oblasti paměti mimo buffer při analýze souborů ve formátu MZ.
Zdroj: opennet.ru
