Vulnerabilități în subsistemul eBPF care permit executarea de cod la nivel de kernel Linux

Două noi vulnerabilități au fost descoperite în subsistemul eBPF care permite executarea handlerelor în interiorul kernelului. Linux într-o mașină virtuală specială cu un JIT. Ambele vulnerabilități permit executarea de cod cu privilegii de kernel, în afara mașinii virtuale eBPF izolate. Informații despre probleme au fost publicate de echipa Zero Day Initiative, care derulează competiția Pwn2Own, care a demonstrat trei atacuri în acest an. Ubuntu Linux, care a exploatat vulnerabilități necunoscute anterior (nu se menționează dacă vulnerabilitățile din eBPF sunt legate de aceste atacuri).

  • CVE-2021-3490 - Vulnerabilitatea este cauzată de lipsa verificării în afara limitelor pe 32 de biți când se efectuează operațiuni AND, SAU și XOR pe biți în eBPF ALU32. Un atacator poate profita de această eroare pentru a citi și scrie date în afara limitelor bufferului alocat. Problema cu operațiunile XOR apare începând cu versiunea de kernel 5.7-rc1, iar AND și SAU - începând cu 5.10-rc1.
  • CVE-2021-3489 - Vulnerabilitatea este cauzată de o eroare în implementarea buffer-ului inel și se datorează faptului că funcția bpf_ringbuf_reserve nu a verificat posibilitatea ca dimensiunea regiunii de memorie alocată să fie mai mică decât dimensiunea reală de ringbuf. Problema apare de la lansarea 5.8-rc1.

Starea remedierilor de vulnerabilități din distribuții poate fi urmărită pe aceste pagini: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Corecțiile sunt disponibile și sub formă de patch-uri (CVE-2021-3489, CVE-2021-3490). Exploatabilitatea depinde de accesul utilizatorului la apelul de sistem eBPF. De exemplu, în configurația implicită din RHEL, exploatarea vulnerabilității necesită ca utilizatorul să aibă privilegii CAP_SYS_ADMIN.

O altă vulnerabilitate din kernel ar trebui menționată separat. Linux — CVE-2021-32606, care permite unui utilizator local să își escaladeze privilegiile la root. Problema se manifestă începând din kernel. Linux 5.11 și este cauzată de o condiție de concurență în implementarea protocolului CAN ISOTP, care permite modificarea parametrilor de legare a socketurilor din cauza lipsei setării unor blocări adecvate în funcția isotp_setsockopt() la procesarea semnalizatorului CAN_ISOTP_SF_BROADCAST.

După ce socket-ul ISOTP este închis, legarea la socket-ul destinatar rămâne în vigoare, care poate continua să folosească structurile asociate cu socket-ul după ce memoria asociată cu acestea este eliberată (use-after-free datorită apelului la o structură isotp_sock care a fost deja eliberat când isotp_rcv() este apelat). Prin manipularea datelor, puteți suprascrie indicatorul către funcția sk_error_report() și puteți executa codul la nivel de kernel.

Sursa: opennet.ru

Cumpărați găzduire de încredere pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără găzduire web fiabilă cu protecție DDoS, servere VPS VDS | ProHoster