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
