Vulnerabilitate la distanță în stratul Shim, care permite ocolirea UEFI Secure Boot

În stratul Shim, folosit în majoritatea distribuțiilor Linux pentru încărcarea verificată în modul UEFI Secure Boot, a fost descoperită o vulnerabilitate (CVE-2023-40547) care poate duce la executarea de cod de la distanță și la ocolirea mecanismului de încărcare verificată UEFI Secure Boot. Un atacator care controlează serverul HTTP la care Shim se conectează poate returna un răspuns format special, ce duce la scrierea controlată în zona din afara buffer-ului, pentru a permite executarea codului în etapa timpurie a încărcării.

Vulnerabilitatea este cauzată de o eroare în codul de încărcare a fișierelor prin HTTP, care se manifestă atunci când se procesează răspunsuri incorecte returnate de serverul HTTP la care se conectează shim. Modul HTTPBoot în Shim este susținut din 2016 și permite organizarea încărcării prin rețea, folosind protocolul HTTP pentru a extrage fișierul cu bootloaderul, care este invocat în etapa următoare. Shim rezervă un buffer pentru datele primite când încarcă fișiere prin HTTP, ținând cont nu de dimensiunea reală a datelor, ci de dimensiunea specificată în antetul HTTP „Content-Length”. Prin urmare, returnând o valoare mai mică în antetul Content-Length, se poate obține scrierea unei părți din solicitare în memorie, dincolo de buffer.

Shim este semnat digital de Microsoft și verifică GRUB2 cu propriul certificat, ceea ce permite dezvoltatorilor de distribuții să nu semneze fiecare actualizare a kernelului și GRUB la Microsoft. Vulnerabilitatea din Shim permite infiltrarea în lanțul de încredere în modul Secure Boot activ și obținerea controlului total asupra procesului de încărcare ulterior, de exemplu, pentru a încărca un alt OS, pentru a modifica componentele sistemului de operare și pentru a ocoli protecția Lockdown.

Vulnerabilitatea a fost remediată în versiunea Shim 15.8, dar pentru a bloca complet atacurile prin Shim este necesară semnarea unei noi versiuni de către Microsoft și implementarea acesteia în distribuții. Statutul remedierii vulnerabilității în distribuții poate fi evaluat pe aceste pagini: Debian, Ubuntu, SUSE, RHEL, Fedora. Problema este că, fără revocarea semnăturii versiunii mai vechi, remedierea este inutilă, deoarece atacatorul poate folosi un mediu de boot cu versiunea vulnerabilă Shim pentru a compromite UEFI Secure Boot. Însă revocarea semnăturii va duce la imposibilitatea încărcării verificate a distribuțiilor care continuă să utilizeze versiunea veche de Shim.

Pentru blocarea vulnerabilității fără revocarea semnăturii digitale, distribuțiile pot utiliza mecanismul SBAT (UEFI Secure Boot Advanced Targeting), pentru care suportul este implementat în GRUB2, shim și fwupd în cele mai populare distribuții Linux. SBAT a fost dezvoltat în colaborare cu Microsoft și prevede adăugarea de metadate suplimentare în fișierele executabile ale componentelor UEFI, care includ informații despre producător, produs, componentă și versiune. Aceste metadate sunt semnate digital și pot fi incluse separat în listele de componente permise sau interzise pentru UEFI Secure Boot.

SBAT permite blocarea utilizării semnăturii digitale pentru anumite versiuni ale componentelor fără a fi nevoie de revocarea cheilor pentru Secure Boot. Blocarea vulnerabilităților prin SBAT nu necesită utilizarea listei cu certificate revocate UEFI (dbx), ci se realizează la nivelul înlocuirii cheii interne pentru a crea semnături și actualizarea GRUB2, shim și altor artefacte de boot livrate de distribuții.

Pe lângă vulnerabilitatea discutată, în Shim 15.8 au fost remediate și câteva probleme mai puțin periculoase, exploatate local:

  • CVE-2023-40548 — depășire a integralului în funcția verify_sbat_section, ducând la depășirea bufferului pe sisteme de 32 de biți.
  • CVE-2023-40546 — citirea din zona de memorie dincolo de buffer la generarea mesajelor de eroare prin funcția LogError().
  • CVE-2023-40549 — citirea din zona de memorie dincolo de buffer la procesarea unui fișier format PE special conceput în funcția verify_buffer_authenticode().
  • CVE-2023-40550 — citirea din zona de memorie dincolo de buffer în funcția verify_buffer_sbat().
  • CVE-2023-40551 — citirea din zona de memorie dincolo de buffer la analiza fișierelor în format MZ.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster