Fenriski turva-uuringute teadlased avaldasid teavet haavatavuste kohta Pagure'i ja OBS (Open Build Service) tööriistades, mis võimaldasid kompromiteerida Fedora ja openSUSE distribuutide paketihaldusplaane. Teadlased demonstreerisid võimalust teostada rünnak, mis võimaldab käivitada juhuslikku koodi Pagure'i ja OBS'i serverites, mida sai kasutada muudatuste sisestamiseks Fedora ja openSUSE hoidlatesse.
Fedora koode ja pakettide metaandmeid koostöös kasutatav Platvorm Pagure'il on avastatud 4 haavatavust. Tuvastatud probleemide ärakasutamiseks on vajalik kasutajakonto olemasolu Pagure'is, mida saab soetada igaühel (hetkel on Pagure.io-s registreeritud 24899 kasutajat). Kolm probleemi võimaldavad lugeda faile süsteemis ja üks probleem võimaldab käivitada oma koodi. serveril. Probleemid avastati 1. jaanuaril 2024, teatati bugzilla.redhat.com kaudu 25. aprillil 2024 ja kõrvaldatakse Pagure'is kolme tunni jooksul.
- CVE-2024-4981 ja CVE-2024-47515 haavatavused tulenevad sümboolsete linkide ebaõigest töötlemisest failide värskendamise ja arhiivide genereerimise funktsioonides. Need haavatavused võimaldavad lugeda serveri kohalikke faile, näiteks pääseb ligi administraatori seansi parameetreid sisaldavale Pagure faili sisule ning kasutada selle õigusi. Haavatavuse ära kasutamine funktsioonis _update_file_in_git() seisneb Pagures uue repo loomises; komiti lisamises uue failiga, mis on loodud sümboolse lingina soovitud süsteemifailile; avades selle faili redigeerimiseks veebi liideses.
- Haavatavus (CVE-2024-4982) funktsioonis view_issue_raw_file() võimaldab pääseda baaskaustast välja, kui päringu Issue parameetrites on märgitud sümbolid "/..". Probleem võimaldab lugeda süsteemi faile vastavalt veebiliidese all töötava protsessi juurdepääsuõigustele. Näiteks saab faili /etc/passwd vaatamiseks avada lehe "http://pagure.local:5000/your-repository/issue/raw/../../../../../../../etc/passwd".
- Haavatavus (CVE-2024-47516) funktsioonis PagureRepo.log() võimaldab sisestada enda käske ja käivitada koodi serveris. Probleem tuleneb sellest, et faili muutmisajaloo vaatamisel web-liidese kaudu kutsub see esile käsu „git” koos haru identifikaatori edastamisega käsureas (näiteks „/usr/bin/git --pretty=oneline --abbrev-commit -- README.md”). Identifikaatori õigsust ei kontrollita, seega võib selle asemel edastada mistahes käsurea valiku, näiteks „--output=/tmp/foo.bar” väljundi suunamiseks faili. Ründaja võib faili süsteemis üle kirjutada, saates järgmise kujuga päringu: http://pagure.local:5000/test/history/README.md?identifier=--output=/tmp/foo.bar
Pagure töötab git-kasutajana, mistõttu saab ümberkirjutada ainult selle kasutaja faile. Oma koodi serveris käivitamiseks saab kasutada teenust, mis võimaldab juurdepääsu hoidlatele SSH kaudu, käivitades käsu «bash -c /usr/libexec/pagure/aclchecker.py». Ründaja võib haavatavust kasutada faili «/srv/git/.bashrc» ümberkirjutamiseks ning see fail käivitatakse bash käsutäituri poolt, kui sellele hoidlale SSH kaudu juurde pääseb.
Rünnak koosneb registreerimisest Pagure süsteemis, hoidla loomise, hoidlasse faili README.md lisamisega, mille kommitimärkus on delikaatses vormis «|| /bin/bash» ning päringu saatmisega «http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc». Nende sammude käigus kirjutatakse faili «/srv/git/.bashrc» rida «34a5c43 || /bin/bash». Loodud faili «/srv/git/.bashrc» käivitamiseks piisab juhul, kui ühendate hoidlasse SSH kaudu oma kasutajakonto kaudu. Koodi täitmine git-kasutaja õigustes Pagure serveris võimaldab kontrollida kõiki hoidlate sisu paketiga.
OBS (Open Build Service) platvormil, mida kasutatakse openSUSE-s ja mõnedes teistes distributsioonides pakettide koostamiseks, tuvastati üks haavatavus (CVE-2024-22033), mis võimaldab serveris oma koodi käivitada. Haavatavus avastati 27. juunil 2024, teavitati openSUSE projekti 29. juunil ja kõrvaldatakse 10. juulil.
Haavatavus on olemas teenuses „obs-service-download_url“, kus puudus nõuetekohane URL-i kontroll, mis kehtis wget utiliidi käivitamisel skriptist, mis laadis koodi OBS-i. Ründaja võib määrata OBS-teenuses koostatud paketi konfiguratsiooni, kus laadimis-URL-i asemel on määratud wget-i käsurea argument, näiteks: —output-document=/tmp/test</param> tempfile</param>
Viga URL-i puudumise korral wget-i käivitamisel ümbersõitmiseks on näidatud valik „download-manifest“, mis lubab määrata URL-ide nimekirja eraldi failis. Ülaltoodud näide toob kaasa käsu käivitamise: /usr/bin/wget -i /srv/obs/service/XXXXX/src/tempfile -4 —output-document=/tmp/test
mis, mis võimaldab salvestada faili /tmp/test sisu, mis on laaditud lingilt, mis on määratud failis /srv/obs/service/XXXXX/src/tempfile, ja mille kood on laaditud ründaja poolt OBS-i kaudu build.opensuse.org'ist, mis võimaldab vaba registreerimist. Lisaks serveris faili üle kirjutamise võimalusele, võib ründaja saata endale ka ükskõik millise faili, asendades „—output-document” parameetri „—post-file” valikuga, näiteks „—post-file=/etc/passwd”. Seega võib ründaja lugeda ja kirjutada serveri faile, kui seda lubavad õigused, millega OBS-i teenus töötab.
Kuna faili kirjutamise võimaluse muutmine serveris koodi täitmiseks on keeruline, pakkusid teadlased välja meetodi, mis koosneb kahest etapist. Need kaks etappi on vajalikud, kuna ründaja saab luua faili „.wgetrc” wget'i seadistustega, kuid sellest ei piisa käskude käivitamiseks. Kuid samas saab läbi „.wgetrc” luua tingimusi, et täita süsteemis igasuguseid Programme, kuid ilma argumentide edastamiseta. Suvalise koodi käivitamiseks on soovitatud käivitada programm „prove”, mis käsitleb konfigureerimisfaili „.proverc”, kus on võimalik määrata valikut „—exec” igasuguste koodide täitmiseks.
Esialgses etapis luuakse kasutaja "obsservicerun" kodukaustas ülaltoodud manipuleerimiste kaudu fail " .proverc", mis sisaldab käsklusi, mis täidetakse protsessi "prove" käivitamisel. Teises etapis luuakse fail ".wgetrc" parameetriga "use-askpass=/usr/bin/prove", mis kutsub üles "prove". Pärast nende failide ilmumist piisab, kui luua allalaadimise tingimused mis tahes andmete jaoks wget'i abil, ja see toob kaasa ründaja koodi käivitamise serveris kasutaja "obsservicerun" õigustes. Kasutaja "obsservicerun" õigused on piisavad, et saada juurdepääs saadetiste allkirjastamiseks kasutatavatele võtmetele OBS-i kasutajate seas.
Täiendav: SUSE tootejulgeoleku meeskond usub, et haavatavuse oht OBS-is on liialdatud ning teadlaste väide, et probleem võimaldab kompromiteerida kõiki pakette openSUSE distributsioonis, ei vasta tõele. Tõdetakse, et build.opensuse.org infrastruktuuri teenused käivituvad isoleeritud konteinerites, mis luuakse uuesti ja ei sisalda kriitilist teavet. Tuvastatud haavatavus hinnatakse ohtlikuks, kuid ei ole piisav openSUSE ehitusinfrastruktuuri ja loodud pakettide kompromiteerimiseks. Samuti on märgitud, et OBS-i liideses kirjeldatud tegevused, mis on rünnaku näites kajastatud, oleks saanud toimuda ainult OBS-i variandis, mis on kohalikult installitud arendaja tööjaamas.
Allikas: opennet.ru
