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