Qualys on tunnistanut haavoittuvuuden (CVE-2021-4034) Polkit-järjestelmäkomponentissa (entinen PolicyKit). Kyseistä komponenttia käytetään jakeluissa, jotta etuoikeudettomat käyttäjät voivat suorittaa toimintoja, jotka vaativat laajennettuja käyttöoikeuksia. Haavoittuvuuden avulla etuoikeudeton paikallinen käyttäjä voi laajentaa oikeutensa pääkäyttäjäksi ja saada täyden hallinnan järjestelmään. Ongelma, koodinimeltään PwnKit, on merkittävä toimivan hyökkäyksen vuoksi, joka toimii oletusasetuksilla useimmissa jakeluissa. Linux.
Ongelma esiintyy PolKitin pkexec-apuohjelmassa, jonka mukana tulee SUID-juurimerkki ja joka on suunniteltu suorittamaan komentoja toisen käyttäjän oikeuksilla määritettyjen PolKit-sääntöjen mukaisesti. Pkexecille siirrettyjen komentoriviargumenttien virheellisen käsittelyn vuoksi etuoikeutettu käyttäjä voi ohittaa todennuksen ja suorittaa koodinsa pääkäyttäjänä riippumatta käyttöoikeussäännöistä. Hyökkäyksissä ei ole väliä mitkä asetukset ja rajoitukset on määritetty PolKitissa, riittää, että SUID-juurimäärite on asetettu suoritettavalle tiedostolle pkexec-apuohjelmalla.
Pkexec ei tarkista komentoriviargumentin count (argc) kelvollisuutta prosessia käynnistettäessä. Pkexecin kehittäjät olettivat, että argv-taulukon ensimmäinen merkintä sisälsi aina prosessin nimen (pkexec) ja toinen oli joko NULL tai pkexecin kautta käynnistetyn komennon nimi. Koska argumenttien count-arvoa ei tarkistettu taulukon varsinaista sisältöä vasten ja sen oletettiin aina olevan suurempi kuin 1, jos prosessille annettiin tyhjä argv-taulukko, minkä execve-funktio sallii... Linux, pkexec käsitteli ensimmäisenä argumenttina (prosessin nimi) NULL-arvoa ja puskurin loppua seuraavan muistin määrää taulukon loppuosana. |———+———+———+—————|———+———+———+———| | argv[0] | argv[1] | … | argv[argc] | envp[0] | envp[1] | … | envp[envc] | |—-|—-+—-|—-+——+———|——|—-+—-|—-+—-+——|——| VVVVVV "ohjelma" "-vaihtoehto" NULL "arvo" "POLKU=nimi" NULL
Ongelmana on, että argv-taulukon jälkeen muistissa on envp-taulukko, joka sisältää ympäristömuuttujia. Näin ollen, jos argv-taulukko on tyhjä, pkexec poimii tiedot komennolla suoritetusta komennosta ympäristömuuttujilla varustetun taulukon ensimmäisestä elementistä (argv[1] tuli identtiseksi envp[0]:n kanssa), jonka sisältöä voidaan ohjata. hyökkääjän toimesta.
Saatuaan argv[1]:n arvon pkexec yrittää, ottaen huomioon PATH:n tiedostopolut, määrittää suoritettavan tiedoston täyden polun ja kirjoittaa osoittimen merkkijonoon, jonka koko polku on takaisin tiedostoon argv[1], mikä johtaa ensimmäisen ympäristömuuttujan arvon päällekirjoittamiseen, koska argv[1] on identtinen envp[0]:n kanssa. Käsittelemällä ensimmäisen ympäristömuuttujan nimeä hyökkääjä voi korvata toisen ympäristömuuttujan pkexecissä, esimerkiksi korvata ympäristömuuttujan "LD_PRELOAD", joka ei ole sallittu suid-ohjelmissa, ja järjestää jaetun kirjastonsa lataamisen käsitellä asiaa.
Toimiva hyödyntäminen sisältää GCONV_PATH-muuttujan korvaamisen, jota käytetään määrittämään polku symbolien transkoodauskirjastoon, joka ladataan dynaamisesti kutsuttaessa g_printerr()-funktiota, jonka koodi käyttää iconv_open(). Määrittämällä polun uudelleen GCONV_PATH:ssa hyökkääjä voi varmistaa, että se ei ole ladattu standardi iconv-kirjastoon, vaan hänen oma kirjastonsa, jonka käsittelijät suoritetaan, kun virheilmoitus näytetään vaiheessa, kun pkexec on edelleen käynnissä pääkäyttäjän oikeudet ja ennen käynnistysoikeudet tarkistetaan.
On huomattava, että vaikka ongelman aiheuttaa muistin vioittuminen, sitä voidaan luotettavasti ja toistettavasti hyödyntää käytetystä laitteistoarkkitehtuurista riippumatta. Valmisteltua hyväksikäyttöä testattiin onnistuneesti Ubuntu, Debian, Fedora ja CentOS, mutta sitä voidaan käyttää myös muissa jakeluissa. Alkuperäistä hyökkäysongelmaa ei ole vielä julkisesti saatavilla, mikä osoittaa sen olevan triviaali ja muut tutkijat voivat helposti luoda sen uudelleen. Siksi on tärkeää asentaa korjaustiedosto mahdollisimman pian usean käyttäjän järjestelmiin. Polkit on saatavilla myös BSD- ja Solaris-järjestelmille, mutta hyökkäyksen hyödyntämistä niillä ei ole tutkittu. Tiedetään vain, että hyökkäystä ei voida suorittaa OpenBSD:ssä, koska OpenBSD:n ydin ei salli nollan argc-arvon välittämistä execve()-kutsulle.
Ongelma on ollut olemassa toukokuusta 2009 lähtien, jolloin pkexec-komento lisättiin. PolKitin haavoittuvuuteen on tällä hetkellä saatavilla korjauspäivitys (korjaavaa versiota ei ole julkaistu), mutta koska jakelukehittäjille ilmoitettiin ongelmasta etukäteen, useimmat jakelut julkaisivat päivityksen samanaikaisesti haavoittuvuuden paljastamisen kanssa. Ongelma on korjattu RHEL 6/7/8 -versioissa. Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Tyhjä Linux, Kaari Linux ja Manjaro. Väliaikaisena toimenpiteenä haavoittuvuuden estämiseksi voit poistaa SUID-juurimerkinnän /usr/bin/pkexec-ohjelmasta ("chmod 0755 /usr/bin/pkexec").
Lähde: opennet.ru
