U Shim sloju, koji se koristi u većini Linux distribucija za verificirano pokretanje u UEFI Secure Boot režimu, otkrivena je ranjivost (CVE-2023-40547) koja može dovesti do daljinskog izvršenja koda i zaobilaženja mehanizma verificiranog pokretanja UEFI Secure Boot. Napadač koji kontrolira HTTP server kojem se Shim obraća može vratiti posebno oblikovani odgovor, što može uzrokovati kontrolirano pisanje izvan granica bafera kako bi se omogućilo izvršavanje koda u ranoj fazi pokretanja.
Ranjivost je uzrokovana greškom u kodu za učitavanje datoteka putem HTTP-a, koja se javlja pri obradi neispravnih odgovora koje vraća HTTP server kojem se shim obraća. HTTPBoot režim u Shimu podržava se od 2016. godine i omogućuje učitavanje putem mreže koristeći HTTP protokol za preuzimanje datoteke s uređajem za pokretanje, što se poziva u sljedećem koraku. Shim prilikom učitavanja datoteka putem HTTP-a dodjeljuje bafer za primljene podatke, uzimajući u obzir ne stvarnu veličinu podataka, već veličinu navedenu u HTTP zaglavlju „Content-Length”. Tako, vraćanjem manjeg broja u zaglavlju Content-Length, može se postići pisanje repa zahtjeva u memoriju izvan granica bafera.
Shim je digitalno potpisan od strane Microsofta i verificira GRUB2 vlastitim certifikatom, što omogućava razvijateljima distribucija da ne potpisuju svaki ažuriranje jezgre i GRUB-a kod Microsofta. Ranjivost u Shim-u omogućuje umetanje u lanac povjerenja tijekom aktivnog Secure Boot režima i dobivanje potpune kontrole nad daljnjim procesom pokretanja, na primjer, za pokretanje drugog operativnog sustava, modificiranje komponenti operativnog sustava i zaobilaženje Lockdown zaštite.
Ranjivost je otklonjena u izdanju Shim 15.8, ali za potpuno blokiranje napada preko Shima potrebno je potpisivanje nove verzije od strane Microsofta i njezina implementacija u distribucijama. Status otklanjanja ranjivosti u distribucijama može se procijeniti na ovim stranicama: Debian, Ubuntu, SUSE, RHEL, Fedora. Problem je što bez opoziva potpisa za staru verziju, ispravak je besmislen, jer napadač može koristiti medij za pokretanje s ranjivim izdanjem Shima za kompromitiranje UEFI Secure Boot. No, opoziv potpisa će dovesti do nemogućnosti verificiranog pokretanja distribucija koje i dalje koriste staru verziju Shima.
Za blokiranje ranjivosti bez opoziva digitalne potpise, distribucije mogu koristiti mehanizam SBAT (UEFI Secure Boot Advanced Targeting), čija podrška je implementirana za GRUB2, shim i fwupd u većini popularnih Linux distribucija. SBAT je razvijen u saradnji s Microsoftom i podrazumeva dodavanje dodatnih metapodataka u izvršne datoteke UEFI komponenti, koji uključuju informacije o proizvođaču, proizvodu, komponenti i verziji. Ovi metapodaci su potpisani digitalnom potpisom i mogu biti odvojeno uključeni u liste dozvoljenih ili zabranjenih komponenti za UEFI Secure Boot.
SBAT omogućuje blokiranje upotrebe digitalnog potpisa za pojedinačne verzije komponenti bez potrebe za opozivom ključeva za Secure Boot. Blokiranje ranjivosti putem SBAT-a ne zahtijeva korištenje popisa opozvanih UEFI certifikata (dbx), već se provodi na razini zamjene unutarnjeg ključa za formiranje potpisa i ažuriranje GRUB2, shim i drugih isporučenih distribucijskih podataka.
Osim razmatrane ranjivosti u Shim 15.8, također su ispravljena nekoliko manje opasnih problema koji se koriste lokalno:
- CVE-2023-40548 — cjelobrojno preljevanje u funkciji verify_sbat_section, što dovodi do preljevanja bafera na 32-bitnim sustavima.
- CVE-2023-40546 — čitanje iz područja memorije izvan bafera prilikom ispravka poruka o pogreškama putem funkcije LogError().
- CVE-2023-40549 — čitanje iz područja memorije izvan bafera prilikom obrade u funkciji verify_buffer_authenticode() posebno oblikovanog PE datoteke.
- CVE-2023-40550 — čitanje iz područja memorije izvan bafera u funkciji verify_buffer_sbat().
- CVE-2023-40551 — čitanje iz područja memorije izvan bafera prilikom parsiranja MZ datoteka.
Izvor: opennet.ru
