OpenBSD ispravio lanac lokalne eskalacije privilegija

Kompanija Calif objavila je dokaz koncepta za lokalnu eskalaciju privilegija do root naloga na sistemu OpenBSD 7.9. Lanac kombinuje prekoračenje celog broja u funkciji shmat(4), čiji koreni sežu u BSD izvorni kod iz 1988. godine, i zasebnu kernel use-after-free grešku. OpenBSD je obe greške zakrpio kroz errata 018 od 14. septembra i errata 026 od 30. septembra; ispravke su dostupne kroz syspatch za sve arhitekture.
Prva greška je označena kao ispravka pouzdanosti, a druga kao bezbednosna ispravka. Za nijednu od njih u trenutku objave nisu dodeljene CVE oznake, niti postoje dokazi da su ranjivosti korišćene u napadima. OpenBSD 7.8 je takođe dobio ispravku prekoračenja celog broja.
Kako nastaje lanac grešaka
Brojač priključenih deljenih memorijskih segmenata shm_nattch definisan je kao potpisani 16-bitni short, sa najvećom vrednošću 32.767. Calif navodi da je eksploatacija mapirala 127 segmenata deljene memorije i pokrenula 259 procesa, čime je brojač prešao granicu i prešao na vrednost −32.643.
Takvo oštećenje referentnog brojača, uz trku između operacija, omogućava use-after-free stanje: kernel oslobađa memoriju koju drugi procesi i dalje koriste. Sledeći deo lanca koristi upis van granica za izmene brojača članstva u multicast grupama u kernelu. Pri zatvaranju pogođenog soketa, posledična umanjenja menjaju unose tabelâ stranica i korisničko mapiranje postaje dostupno u režimu nadzornika.
Zaobilaženje zaštita i operativni zaključak
Opisani postupak zaobilazi hardverske zaštite SMAP i SMEP, a zatim menja pokazivač na funkciju na predvidljivoj kernel adresi kako bi pokrenuo sopstveni kod. Calif ističe da KARL pri povezivanju kernela nasumično raspoređuje adrese funkcija i podataka, ali da kernel alokatori ostaju deterministički. Zbog toga rane strukture pri pokretanju, uključujući pokazivače u obrađivačima mrežnih interfejsa lo0 i enc0, mogu završavati na istim adresama pri ponovnim pokretanjima na istom hardveru.
Za demonstraciju nije potrebna ranjivost za otkrivanje informacija. Calif predlaže bezbedno uklanjanje elemenata iz kernel povezanih listi, randomizaciju samoreferencijalnog mapiranja tabelâ stranica, randomizaciju kernel alokatora i kompajlersku proveru granica. Praktičan zaključak za organizacije koje koriste OpenBSD jeste da bez odlaganja provere primenu oba errata putem syspatch, obuhvate sve arhitekture i potvrde verzije na produkcionim sistemima.

