Linux-ytimen VFS-haavoittuvuus, joka mahdollistaa oikeuksien eskaloinnin

Linux-ytimen tarjoamassa Filesystem Context API:ssa on havaittu haavoittuvuus (CVE-2022-0185), jonka avulla paikallinen käyttäjä voi saada järjestelmän pääkäyttäjän oikeudet. Ongelman tunnistanut tutkija on julkaissut demon hyväksikäytöstä, jonka avulla koodia voidaan ajaa pääkäyttäjänä Ubuntu 20.04:ssä oletuskokoonpanossa. Hyökkäyskoodi on tarkoitus julkaista GitHubissa viikon sisällä sen jälkeen, kun jakelut ovat julkaisseet haavoittuvuuden korjaavan päivityksen.

Haavoittuvuus on VFS:n legacy_parse_param()-funktiossa, ja se johtuu siitä, että tiedostojärjestelmissä, jotka eivät tue Filesystem Context API:ta, annettujen parametrien enimmäiskokoa ei ole vahvistettu oikein. Jos annat liian suuren parametrin, voit aiheuttaa kirjoitettavan tiedon koon laskemiseen käytetyn kokonaislukumuuttujan ylivuodon - koodissa on puskurin ylivuototarkistus "if (len > PAGE_SIZE - 2 - size)", joka tekee ei toimi, jos koon arvo on suurempi kuin 4094 johtuen kokonaislukujen ylivuotosta alarajan kautta (kokonaisluvun alivuoto, kun 4096 - 2 - 4095 heitetään etumerkittömään int-arvoon, saat 2147483648).

Tämä virhe mahdollistaa erityisesti suunniteltua FS-otosta käytettäessä puskurin ylivuodon ja ytimen tietojen korvaamisen varatun muistialueen jälkeen. Haavoittuvuuden hyödyntäminen edellyttää CAP_SYS_ADMIN-oikeuksia, ts. järjestelmänvalvojan valtuudet. Ongelmana on, että etuoikeutettu käyttäjä voi saada tällaisia ​​käyttöoikeuksia eristetyssä säilössä, jos käyttäjänimiavaruuksien tuki on otettu käyttöön järjestelmässä. Esimerkiksi käyttäjien nimiavaruudet ovat oletusarvoisesti käytössä Ubuntussa ja Fedorassa, mutta eivät käytössä Debianissa ja RHEL:ssä (ellei käytä säilön eristysalustoja).

Ongelma on ilmennyt Linux 5.1 -ytimestä lähtien ja se korjattiin eilen päivityksissä 5.16.2, 5.15.16, 5.10.93, 5.4.173. Haavoittuvuuspakettien päivitykset on jo julkaistu RHEL:lle, Debianille, Fedoralle ja Ubuntulle. Korjaus ei ole vielä saatavilla Arch Linuxille, Gentoolle, SUSElle ja openSUSElle. Suojauksen kiertotapana järjestelmille, jotka eivät käytä säilön eristämistä, voit asettaa sysctl:n "user.max_user_namespaces" arvoksi 0: echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p / etc/ sysctl.d/userns.conf

Lähde: opennet.ru

Lisää kommentti