Prije nekoliko dana objavljena je vijest da je ranjivost identificirana (već katalogiziran pod CVE-2022-0185) in API konteksta datotečnog sustava koje osigurava Linux jezgra što bi moglo omogućiti lokalnom korisniku da dobije root privilegije na sustavu.
Spominje se da problem je u tome što neprivilegirani korisnik može dobiti takve dozvole u izoliranom spremniku ako je podrška za korisničke prostore imena omogućena na sustavu.
Na primjer, prostori korisničkih imena omogućeni su prema zadanim postavkama na Ubuntu i Fedori, ali nisu omogućeni na Debianu i RHEL-u (osim ako se ne koriste platforme za izolaciju spremnika). Osim eskalacije privilegija, ranjivost se također može koristiti za izlazak iz izoliranog spremnika ako spremnik ima ovlaštenje CAP_SYS_ADMIN.
Ranjivost postoji u funkciji legacy_parse_param() u VFS a posljedica je nedostatka odgovarajuće validacije maksimalne veličine isporučenih parametara na datotečnim sustavima koji ne podržavaju API konteksta datotečnog sustava.
Nedavno smo nekoliko prijatelja u mom CTF Crusaders of Rust timu i ja naišli na 0-dnevnu hrpu Linux kernela. Pronašli smo bug kroz fuzzing sa syzkallerom i brzo ga razvili u Ubuntu LPE exploit. Zatim smo ga ponovno napisali kako bismo pobjegli i rootali Googleovu ojačanu Kubernetes CTF infrastrukturu. Ovaj bug utječe na sve verzije kernela od 5.1 (5.16 je trenutno u tijeku) i dodijeljen mu je CVE-2022-0185. Već smo to prijavili Linux distribuciji i sigurnosnoj mailing listi, a greška je ispravljena od objave ovog članka.
Prosljeđivanje prevelikog parametra može uzrokovati prelijevanje cjelobrojne varijable koja se koristi za izračunavanje veličine podataka koji se zapisuju; kod ima provjeru prekoračenja međuspremnika "if (len > PAGE_SIZE - 2 - veličina)", koja ne radi ako je vrijednost veličine veća od 4094 zbog prekoračenja cijelog broja kroz donju granicu (preljev cijelog broja, kada se pretvara 4096 – 2 – 4095 u nepotpisani int, dobiva se 2147483648).
Ovaj bug omogućuje, kada pristupate posebno izrađenoj FS slici, uzrokovati prelijevanje međuspremnika i prepisati podatke kernela koji slijede dodijeljeno memorijsko područje. Za iskorištavanje ranjivosti potrebna su CAP_SYS_ADMIN prava, tj. administratorsko ovlaštenje.
Od 2022., naši su suigrači odlučili pronaći dan 0 u 2022. Nismo bili baš sigurni kako točno započeti, ali budući da je naš tim imao visok stupanj upoznatosti s ranjivostima jezgre Linuxa, odlučili smo samo kupiti neke namjenske poslužitelje. i pokrenite Googleov syzkaller fuzzer. Dana 6. siječnja u 22:30 PST, chop0 je primio sljedeće izvješće o KASAN neuspjehu u legacy_parse_param: slab-out-of-bounds Upišite u legacy_parse_param. Čini se da je syzbot otkrio ovaj problem samo 6 dana ranije prilikom fuzziranja Androida, ali problem nije riješen i naivno smo mislili da nitko drugi nije primijetio.
Na kraju vrijedi spomenuti da se problem očituje još od verzije Linux kernela 5.1 i riješen je u ažuriranjima koja su objavljena prije nekoliko dana u verzijama 5.16.2, 5.15.16, 5.10.93, 5.4.173.
osim toga ažuriranja paketa ranjivosti već su objavljena za RHEL, Debian, fedora i Ubuntu. Dok rješenje još nije dostupno na Arch Linux, Gentoo, SUSE y openSUSE.
U ovom slučaju, spominje se da kao sigurnosno rješenje za sustave koji ne koriste izolaciju spremnika, možete postaviti vrijednost sysctl "user.max_user_namespaces" na 0:
Istraživač koji je identificirao problem objavio je demo eksploatacije que dopušta pokretanje koda kao root na Ubuntu 20.04 u zadanoj konfiguraciji. Planirano je da exploit kod se objavljuje na GitHubu u roku od tjedan dana nakon toga da distribucije objavljuju ažuriranje koje popravlja ranjivost.
Konačno ako vas zanima više o tome, detalje možete provjeriti u sljedeći link.
Još jedan razlog da ne dodirnete snap štapom.