U sučelju asinkronog ulaza/izlaza io_uring, koje pruža Linux kernel, otkrivena je ranjivost (CVE-2024-0582) koja omogućuje neprivilegiranom korisniku da stekne root prava u sustavu. Za iskorištavanje ranjivosti dovoljan je običan lokalni pristup sustavu, bez potrebe za manipulacijom s imenom prostora. Trenutačno je javno dostupan radni exploit, kao i detaljan opis druge tehnike iskorištavanja ranjivosti.
Ranjivost je uzrokovana pozivom na već oslobođeni blok memorije (use-after-free) u io_uring podsklopu, koja nastaje pri registraciji i oslobađanju prstenastog bafera, stvorenog s flagom IORING_REGISTER_PBUF_RING. U situaciji kada se primijeni na bafer operacija mmap(), on ostaje reflektiran u korisničkom prostoru nakon izvršenja operacije njegovog oslobađanja (IORING_UNREGISTER_PBUF_RING). Iskorištavanjem ove osobitosti, napadač može čitati i pisati podatke u stranice memorije koje ležaju u sustavu raspodjele memorije kernela.
Problem se manifestira počevši od izdanja Linux kernela 6.4, a ispravljen je u izdanjima 6.7 i 6.6.5, kao i u paketu s kernelom 6.5.0-21, pripremljenom za Ubuntu 22.04 i 23.10. Zanimljivo je da je u glavnom kernelu problem ispravljen u prosincu 2023. godine, Google Zero projekt je otvorio pristup upozorenju o ranjivosti 8. siječnja, a paket s ispravljenim kernelom 6.5 za Ubuntu formiran je tek 22. veljače 2024. godine. U drugim distribucijama moguće je pratiti ispravke i izloženost ranjivosti na stranicama: Debian, Gentoo, RHEL, SUSE, Fedora, Arch.
Prvi exploit manipulira stvaranjem velikog broja stranica memorije pod kontrolom napadača kako bi odredio raspored memorije u kernelu i pristupio susjednim fizičkim stranicama memorije, koristeći sadržaj na određeni način ispunjenih struktura mrežnih soketa kao oznake. Za pokretanje koda u exploit-u koristi se 'gadgets' (niz postojećih instrukcija u kernelu) koji dovodi do izvršenja funkcije call_usermodehelper_exec, namijenjene za pokretanje procesa u korisničkom prostoru iz kernela.
Drugi exploit se temelji na tome da, kada se iscrpe svi slab-blokovi u predmemoriji (na primjer, prilikom ponovnog otvaranja datoteke), slobodne stranice memorije, kojima napadač ima pristup, koriste se od strane sustava za alokaciju memorije za stvaranje novog slab-bloka, a sve nove strukture datoteka počinju se smjestati u tom bloku. Shodno tome, neke strukture datoteka će doći u stranice memorije koje napadač može čitati i pisati. Eksploatacija se svodi na organizaciju da određena datoteka uđe u predmemoriju datoteka i zamijeni polje f_mode u povezanim strukturama datoteka, koje definira prava pristupa, što omogućava da se određena sistemska datoteka, npr. /etc/passwd, učini dostupnom za pisanje.
Izvor: opennet.ru
