PolKitin kriittinen haavoittuvuus, joka sallii pääkäyttäjän oikeudet useimmissa Linux-jakeluissa

Qualys on tunnistanut haavoittuvuuden (CVE-2021-4034) Polkit (aiemmin PolicyKit) -järjestelmäkomponentissa, jota käytetään jakeluissa, jotta etuoikeutetut käyttäjät voivat suorittaa toimintoja, jotka edellyttävät korotettuja käyttöoikeuksia. Haavoittuvuuden ansiosta paikallinen käyttäjä, jolla ei ole etuoikeuksia, voi laajentaa oikeuksiaan root-käyttäjäksi ja saada järjestelmän täysi hallinta. Ongelman koodinimi oli PwnKit, ja se on merkittävä toimivan hyväksikäytön tuottamisesta, joka toimii oletuskokoonpanossa useimmissa Linux-jakeluissa.

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 prosessia käynnistettäessä välitetyn komentoriviargumenttimäärän (argc) oikeellisuutta. Pkexecin kehittäjät olettivat, että argv-taulukon ensimmäinen merkintä sisältää aina prosessin nimen (pkexec) ja toinen joko NULL-arvon tai pkexecin kautta käynnistetyn komennon nimen. Koska argumenttien määrää ei tarkistettu taulukon todellista sisältöä vastaan ​​ja sen oletettiin olevan aina suurempi kuin 1, jos prosessille välitettiin tyhjä argv-taulukko, kuten Linuxin execve-funktio sallii, pkexec käsittelee NULL-arvon ensimmäisenä argumenttina ( prosessin nimi) ja seuraava puskurimuistin ulkopuolella, kuten taulukon myöhempi sisältö. |———+———+——+————|———+———+——+—————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "ohjelma" "-optio" NULL "arvo" "PATH=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ä huolimatta siitä, että ongelma johtuu muistin vioittumisesta, sitä voidaan luotettavasti ja toistettavasti hyödyntää käytetystä laitteistoarkkitehtuurista riippumatta. Valmisteltu hyväksikäyttö on testattu onnistuneesti Ubuntussa, Debianissa, Fedorassa ja CentOS:ssä, mutta sitä voidaan käyttää myös muissa jakeluissa. Alkuperäinen hyväksikäyttö ei ole vielä julkisesti saatavilla, mikä osoittaa, että se on triviaali ja muiden tutkijoiden helposti luotava uudelleen, joten on tärkeää asentaa korjauspäivitys mahdollisimman pian usean käyttäjän järjestelmiin. Polkit on saatavana myös BSD-järjestelmille ja Solarisille, mutta sen käyttöä niissä ei ole tutkittu. Tiedetään, että hyökkäystä ei voida suorittaa OpenBSD:lle, koska OpenBSD-ydin ei salli null-argc-arvon välittämistä, kun execve():tä kutsutaan.

Ongelma on ollut olemassa toukokuusta 2009 lähtien, pkexec-komennon lisäämisestä lähtien. PolKit-haavoittuvuuden korjaus on tällä hetkellä saatavilla korjaustiedostona (korjaustiedoston julkaisua ei ole julkaistu), mutta koska jakelun kehittäjille ilmoitettiin ongelmasta etukäteen, useimmat jakelut julkaisivat päivityksen samanaikaisesti haavoittuvuutta koskevien tietojen julkistamisen kanssa. Ongelma on korjattu RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ja Manjaro. Väliaikaisena toimenpiteenä haavoittuvuuden estämiseksi voit poistaa SUID-juurimerkin /usr/bin/pkexec-ohjelmasta ("chmod 0755 /usr/bin/pkexec").



Lähde: opennet.ru

Lisää kommentti