Ranljivost v podsistemu jedra Linux Netfilter

V Netfilterju, podsistemu jedra Linux, ki se uporablja za filtriranje in spreminjanje omrežnih paketov, je bila ugotovljena ranljivost (CVE-2021-22555), ki lokalnemu uporabniku omogoča pridobitev korenskih pravic v sistemu, tudi v izoliranem vsebniku. Za testiranje je pripravljen delujoč prototip exploita, ki obide zaščitne mehanizme KASLR, SMAP in SMEP. Raziskovalec, ki je odkril ranljivost, je od Googla prejel nagrado v višini 20 $ za identifikacijo metode za obhod izolacije vsebnikov Kubernetes v gruči kCTF.

Težava je prisotna že od jedra 2.6.19, izdanega pred 15 leti, povzroča pa jo napaka v upravljalnikih IPT_SO_SET_REPLACE in IP6T_SO_SET_REPLACE, ki povzroči prepolnitev medpomnilnika pri pošiljanju posebej oblikovanih parametrov prek klica setsockopt v načinu compat. V normalnih okoliščinah lahko samo korenski uporabnik pokliče compat_setsockopt(), vendar lahko privilegije, potrebne za izvedbo napada, pridobi tudi neprivilegiran uporabnik v sistemih z omogočeno podporo za uporabniške imenske prostore.

Uporabnik lahko ustvari vsebnik z ločenim korenskim uporabnikom in od tam izkoristi ranljivost. Na primer, "uporabniški imenski prostori" so privzeto omogočeni v Ubuntuju in Fedori, niso pa omogočeni v Debianu in RHEL. Popravek, ki odpravlja ranljivost, je bil sprejet v jedro Linuxa 13. aprila. Posodobitve paketov so že ustvarili projekti Debian, Arch Linux in Fedora. Za Ubuntu, RHEL in SUSE so posodobitve v pripravi.

Težava se pojavi v funkciji xt_compat_target_from_user() zaradi nepravilnega izračuna velikosti pomnilnika pri shranjevanju struktur jedra po pretvorbi iz 32-bitne v 64-bitno predstavitev. Napaka omogoča zapisovanje štirih ničelnih bajtov na kateri koli položaj zunaj dodeljenega vmesnega pomnilnika, omejenega z odmikom 0x4C. Izkazalo se je, da je ta funkcija dovolj za ustvarjanje izkoriščanja, ki je omogočalo pridobitev korenskih pravic - z brisanjem kazalca m_list->next v strukturi msg_msg so bili ustvarjeni pogoji za dostop do podatkov po sprostitvi pomnilnika (use-after-free), kar je bil nato uporabljen za pridobivanje informacij o naslovih in spremembah drugih struktur z manipulacijo sistemskega klica msgsnd().

Vir: opennet.ru

Dodaj komentar