V Netfilterju, podsklopu jedra Linuxa koji se koristi za filtriranje i modifikaciju mrežnih paketa, otkrivena je ranjivost (CVE-2021-22555) koja omogućava lokalnom korisniku sticanje root privilegija u sistemu, čak i dok se nalazi u izolovanom kontejneru. Za testiranje je pripremljen radni prototip eksploita koji zaobilazi zaštitne mehanizme KASLR, SMAP i SMEP. Istraživač koji je otkrio ranjivost je od Google-a primio nagradu u iznosu od 20.000 dolara za otkrivanje metode zaobilaženja izolacije Kubernetes kontejnera u klasteru kCTF.
Problem se manifestuje počev od jezgra 2.6.19, objavljenog pre 15 godina, i izazvan je greškom u rukovaocima IPT_SO_SET_REPLACE i IP6T_SO_SET_REPLACE, koja dovodi do prelivanja bafera prilikom slanja posebno oblikovanih parametara putem poziva setsockopt u načinu rada compat. U normalnim okolnostima, poziv compat_setsockopt() može izvršiti samo korisnik root, ali potrebne privilegije za izvršenje napada takođe mogu dobiti neprivilegovani korisnici u sistemima sa uključenom podrškom za prostorne identitete korisnika (user namespaces).
Korisnik može stvoriti kontejner sa odvojenim korisnikom root i iz njega eksploatisati ranjivost. Na primer, „user namespaces“ su podrazumevano uključeni u Ubuntu i Fedora, ali nisu aktivirani u Debian i RHEL. Zaključavanje sa ispravkom ranjivosti je prihvaćeno u sastav jezgra Linuxa 13. aprila. Ažuriranja paketa su već formirana od strane projekata Debian, Arch Linux i Fedora. U Ubuntu, RHEL i SUSE su ažuriranja u fazi pripreme.
Problem nastaje u funkciji xt_compat_target_from_user() zbog nekorektnog izračunavanja veličine memorije prilikom čuvanja struktura jezgra nakon konvertovanja iz 32- u 64-bitno predstavljanje. Greška omogućava zapis od četiri nula bajta na bilo koju poziciju van dodeljenog bafera, ograničenu pomerajem 0x4C. Ova mogućnost je bila dovoljna za kreiranje eksploita koji omogućava dobijanje root prava — kroz čišćenje pokazivača m_list->next u strukturi msg_msg stvoreni su uslovi za pristup podacima nakon oslobađanja memorije (use-after-free), što je potom korišćeno za dobijanje informacija o adresama i modifikaciju drugih struktura kroz manipulaciju sistemskim pozivom msgsnd().
Izvor: opennet.ru
