În nucleul Linux au fost descoperite două vulnerabilități, care sunt, în esență, similare cu vulnerabilitatea Copy Fail dezvăluită cu câteva zile în urmă, dar care se manifestă în alte subsisteme — xfrm-ESP și RxRPC. Aceste serii de vulnerabilități au primit numele de cod Dirty Frag (se menționează și Copy Fail 2). Vulnerabilitățile permit unui utilizator fără privilegii să obțină drepturi de root, rescriind datele procesului în cache-ul de pagină. Un exploit este disponibil și funcționează în toate distribuțiile actuale de Linux. Informația despre vulnerabilitate a fost dezvăluită înainte de publicarea corecțiilor, dar există o metodă alternativă de a bloca problema.
Dirty Frag acoperă două vulnerabilități diferite: prima în modulul xfrm-ESP, folosit pentru a accelera operațiile de criptare în IPsec cu ajutorul protocolului ESP (Encapsulating Security Payload), iar a doua în driverul RxRPC, care implementează familia de socketuri AF_RXRPC și protocolul RPC omonim, care funcționează pe deasupra UDP. Fiecare dintre vulnerabilități, pe cont propriu, permite obținerea drepturilor de root. Vulnerabilitatea din xfrm-ESP este prezentă în nucleul Linux din ianuarie 2017, iar vulnerabilitatea din RxRPC — din iunie 2023. Ambele probleme sunt cauzate de optimizări care permit scrierea directă în cache-ul de pagină.
Pentru a exploata vulnerabilitatea din xfrm-ESP, utilizatorul trebuie să aibă drepturi pentru a crea spații de nume, iar pentru a exploata vulnerabilitatea din RxRPC, trebuie să existe posibilitatea de a încărca modulul kernel rxrpc.ko. De exemplu, în Ubuntu, regulile AppArmor interzic utilizatorului neprivilegiat să creeze spații de nume, dar modulul rxrpc.ko este încărcat în mod implicit. În unele distribuții, modulul rxrpc.ko este lipsă, dar nu se blochează crearea spațiilor de nume. Cercetătorul care a identificat problema a pregătit un exploit combinat, capabil să atace sistemul prin ambele vulnerabilități, ceea ce permite exploatarea problemei în toate distribuțiile majore. Funcționarea exploit-ului a fost confirmată în Ubuntu 24.04.4 cu nucleul 6.17.0-23, RHEL 10.1 cu nucleul 6.12.0-124.49.1, openSUSE Tumbleweed cu nucleul 7.0.2-1, CentOS Stream 10 cu nucleul 6.12.0-224, AlmaLinux 10 cu nucleul 6.12.0-124.52.3 și Fedora 44 cu nucleul 6.19.14-300.
Așa cum s-a întâmplat și în cazul vulnerabilității Copy Fail, problemele din xfrm-ESP și RxRPC sunt cauzate de decriptarea datelor în locul utilizării funcției splice(), care transmite date între descriptorii de fișiere și canale (pipe) fără a copia, prin transmiterea referințelor la elementele din cache-ul paginilor. Offseturile pentru operația de scriere au fost calculate fără verificări adecvate, care să țină cont de utilizarea referințelor directe la elementele din cache-ul paginilor, ceea ce permitea, prin trimiterea de cereri special concepute, să se suprascrie 4 byte la offsetul ales și să se modifice conținutul oricărui fișier din cache-ul paginilor.
Toate operațiile de citire din fișiere returnează, în primul rând, conținutul din cache-ul paginilor. În cazul modificării datelor din cache-ul paginilor, operațiile de citire din fișier vor conduce la returnarea unor informații care nu sunt realmente stocate pe mediu, ci la date înlocuite. Exploatarea vulnerabilității se rezumă la modificarea cache-ului paginilor pentru un fișier executabil cu flag-ul suid root. De exemplu, pentru a obține drepturi root, se poate citi fișierul executabil /usr/bin/su pentru a-l plasa în cache-ul paginilor, după care se poate realiza înlocuirea codului propriu în conținutul acestui fișier încărcat în cache. Ulterior, executarea utilitarului „su” va determina ca în memorie să fie încărcat nu fișierul executabil original de pe mediu, ci o copie modificată din cache-ul paginilor.
Divulgarea informațiilor despre vulnerabilități și lansarea coordonată a actualizărilor care rezolvă problemele a fost programată pentru 12 mai, dar din cauza scurgerii de informații, detaliile despre vulnerabilitate au fost publicate înainte de lansarea corecturilor. La sfârșitul lunii aprilie, pe lista de discuții publice netdev au fost publicate patch-uri pentru rxrpc, ipsec și xfrm, fără a menționa că acestea sunt legate de remedierea vulnerabilității. Pe 5 mai, menționatorul subsistemului IPsec a acceptat în depozitul git netdev o modificare cu o corecție propusă în modul xfrm-esp, descrierea căreia repeta în mare parte descrierea problemei care a dus la vulnerabilitatea Copy Fail în modul algif_aead. Unul dintre cercetătorii în securitate s-a arătat interesat de această corecție, a reușit să creeze un exploit funcțional și l-a publicat, fără a ști că divulgarea informațiilor despre problemă a fost supusă unui embargo până pe 12 mai.
Actualizările cu corecturi pentru kernelul Linux și pachetele cu kernel în distribuții nu sunt încă publicate, dar sunt disponibile patch-uri de rezolvare a problemelor – xfrm-esp și rxrpc. Identificatorii CVE nu sunt atribuiți, ceea ce complică urmărirea actualizărilor pachetelor în distribuții. Ca soluție de protecție, puteți bloca încărcarea modulelor kernel esp4, esp6 și rxrpc: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"
Sursa: opennet.ro
