Fenriski turvauuringute teadlased avalikustasid teavet Pagure'i ja OBS'i (Open Build Service) tööriistade haavatavuste kohta, mis vĂ”imaldasid kompromiteerida Fedora ja openSUSE pakettide loomise infrastruktuure. Uurijad demonstreerisid vĂ”imalust rĂŒnnata ja tĂ€ita suvalist koodi Pagure'i ja OBS'i serverites, mida oleks saanud kasutada muudatuste tegemiseks Fedora ja openSUSE repo pakettides.
Pagure platvormil, mida kasutatakse Fedora pakettide ja metaandmete koostööks, tuvastati 4 haavatavust. Tuvastatud probleemide Ă€rakasutamiseks on vajalik konto olemasolu Pagure'is, mille vĂ”ivad luua kĂ”ik huvilised (praegu on Pagure.io's registreeritud 24899 kasutajat). Kolm probleemi vĂ”imaldavad lugeda sĂŒsteemi faile, ja ĂŒks probleem vĂ”imaldab tĂ€ita suvalist koodi. serveris. Probleemid tuvastati 1. jaanuaril 2024, teatati bugzilla.redhat.com kaudu 25. aprillil 2024 ja lahendati Pagure'is 3 tunni jooksul.
- Haavatavused CVE-2024-4981 ja CVE-2024-47515 on pĂ”hjustatud sĂŒmboolsete linkide vale töötlemise tĂ”ttu failide vĂ€rskendamise ja arhiivide genereerimise funktsioonides. Need haavatavused vĂ”imaldavad lugeda kohalikke faile serveris, nĂ€iteks on vĂ”imalik saada juurdepÀÀs Pagure'i administraatori seansiseade faili sisule ja saada sellele Ă”igustega juurde. Haavatavuse Ă€rakasutamine funktsioonis _update_file_in_git() seisneb Pagure'is repo loomises; uue faili lisamises commit'iga, mis on loodud sĂŒmboolse lingina soovitud sĂŒsteemifailile; ja selle faili avamises veebiliideses redigeerimiseks.
- Haavatavus (CVE-2024-4982) funktsioonis view_issue_raw_file() vĂ”imaldab pÀÀseda baaskaustast vĂ€lja, nĂ€idates pĂ€ringute parameetrites sĂŒmboleid â/..â. Probleem vĂ”imaldab lugeda sĂŒsteemi faile, kuivĂ”rd lubavad Ă”igused protsessi all, millega veebiliides töötab. NĂ€iteks faili /etc/passwd vaatamiseks vĂ”iks avada lehe âhttp://pagure.local:5000/your-repository/issue/raw/../../../../../../etc/passwdâ.
- Haavatavus (CVE-2024-47516) funktsioonis PagureRepo.log() vĂ”imaldab sisestada oma kĂ€ske ja kĂ€ivitada koodi serveris. Probleem tuleneb sellest, et faili ajaloo vaatamisel veebiliideses kutsutakse `git` kĂ€sku koos haru ID edastamisega kĂ€sureal (nĂ€iteks `/usr/bin/git --pretty=oneline --abbrev-commit -- README.md`). ID korrektset kontrollimist ei toimu, seega on vĂ”imalik edastada mis tahes kĂ€surea valik, nĂ€iteks `--output=/tmp/foo.bar`, et suunata vĂ€ljund faili. RĂŒndaja vĂ”ib faili sĂŒsteemis ĂŒle kirjutada, saates jĂ€rgmise taotluse: http://pagure.local:5000/test/history/README.md?identifier=--output=/tmp/foo.bar
Pagure töötab git kasutajana, seega saab ĂŒle kirjutada ainult selle kasutaja faile. Oma koodi serveris kĂ€itamiseks saab kasutada SSH kaudu repole pÀÀsemise teenust, millele pÀÀsemisel kĂ€ivitub kĂ€sk `bash -c /usr/libexec/pagure/aclchecker.py`. RĂŒndaja vĂ”ib kasutada haavatavust faili `/srv/git/.bashrc` ĂŒle kirjutamiseks ja see fail kĂ€ivitatakse bash-kĂ€sutĂ€itja poolt, kui repot kĂ€sitletakse SSH kaudu.
RĂŒnnak seisneb sĂŒsteemi Pagure registreerumises, repositooriumi loomises, README.md faili lisamises commit-mĂ€rgetega nagu `|| /bin/bash` ja taotluse saatmises `http://pagure.local:5000/test/history/README.md?identifier=--output=/srv/git/.bashrc`. Nende sammude kĂ€igus salvestatakse faili `/srv/git/.bashrc` rida, mis nĂ€eb vĂ€lja nagu `34а5Ń43 || /bin/bash`. Loodud faili `/srv/git/.bashrc` kĂ€itamiseks piisab, kui ĂŒhenduda repositooriumiga SSH kaudu oma konto alt. Koodi kĂ€itamine serveris git kasutaja Ă”igustes Pagure'is vĂ”imaldab kontrollida kogu repode sisu pakettide jaoks.
Platvormil OBS (Open Build Service), mida kasutatakse openSUSE's ja mÔnedes teistes jaotustes pakettide kogu loomiseks, on avastatud haavatavus (CVE-2024-22033), mis vÔimaldab oma koodi serveris kÀivitada. Haavatavus avastati 27. juunil 2024, teatati openSUSE projektile 29. juunil ja kÔrvaldatakse 10. juulil.
Haavatavus esineb teenuses âobs-service-download_urlâ, kus puudus nĂ”uetekohane URL-i kontroll, mida kasutatakse wget utiliidi kĂ€ivitamiseks skriptist, mis laadib alla koodi OBS-is. RĂŒndaja vĂ”ib mÀÀrata OBS-is koostatud paketi konfiguratsiooni, kus laadimiskoodile mĂ”eldud URL-i asemel on mÀÀratud wget-i kĂ€surea valik, nĂ€iteks: --output-document=\/tmp\/test tempfile
Veateate vĂ€ltimiseks wget-i kĂ€ivitamisel ilma URL-ita on nĂ€ites kasutatud âdownload-manifestâ valikut, mis lubab mÀÀrata URL-ide loetelu eraldi failis. Ălaltoodud nĂ€ide kĂ€ivitab kĂ€su: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 --output-document=\/tmp\/test
mis vĂ”imaldab salvestada faili \/tmp\/test sisu, mis on allalaaditud lingilt, mis on mĂ€rgitud failis \/srv\/obs\/service\/XXXXX\/src\/tempfile, mis on rĂŒndaja poolt alla laaditud OBS-is build.opensuse.org liidese kaudu, mis vĂ”imaldab vabalt registreeruda. Lisaks faili ĂŒlekirjutamisele serveris saab rĂŒndaja endale saata mis tahes faili, mÀÀrates â--output-documentâ asemel valiku â--post-fileâ, nĂ€iteks â--post-file=\/etc\/passwdâ. Sel viisil vĂ”ib rĂŒndaja lugeda ja kirjutada faile serveris vastavalt Ă”igustele, mida OBS-i teenusena töötav kasutaja omab.
Kuna failide kirjutamise vĂ”imaluse muutmine koodi kĂ€ivitamiseks serveris osutus keerukaks, pakkusid uurijad meetodi, mis koosneb kahest etapist. Kaksteist etappi on vajalikud, et rĂŒndaja saaks luua faili â.wgetrcâ wget-i seadistustega, kuid see ei piisa kĂ€skude kĂ€ivitamiseks. Samas saab â.wgetrcâ kaudu luua tingimusi, et kĂ€ivitada sĂŒsteemis mĂ”nda programmi, kuid ilma argumentide edastamiseta. Juhuslike koodide kĂ€ivitamiseks on soovitatud kĂ€ivitada âproveâ programm, mis töötleb konfigureerimisfaili â.provercâ, mis lubab mÀÀrata valiku â--execâ mis tahes koodi kĂ€ivitamiseks.
Esimeses etapis luuakse kasutaja "obsservicerun" kodukaustas lĂ€bi ĂŒlaltoodud toimingute "download-manifest" kaudu fail " .proverc", mis sisaldab kĂ€ske, mis tĂ€idetakse protsessi "prove" kĂ€ivitamisel. Teises etapis luuakse fail " .wgetrc" parameetriga "use-askpass=\/usr\/bin\/prove", mis kutsub esile "prove". PĂ€rast nende failide ilmumist piisab, kui luua ĂŒleslaadimise tingimused mis tahes andmete jaoks wget'iga ja see toob kaasa rĂŒndaja koodi kĂ€ivitamise serveris kasutaja "obsservicerun" Ă”igustega. Kasutaja "obsservicerun" Ă”igused on piisavad, et hankida hoidlatest vĂ”tmeid, mida OBSi kasutajad pakettide allkirjastamiseks kasutavad.
TĂ€iendav teave: SUSE tootetehnika meeskond usub, et OBSi haavatavuse oht on ĂŒle hinnatud ja uurijate vĂ€ide, et probleem vĂ”imaldab kompromiteerida kĂ”ik paketid openSUSE'i distributsioonis, ei vasta tĂ”ele. Tuletatakse meelde, et build.opensuse.org infrastruktuuri teenuseid kĂ€itatakse isoleeritud konteineritega, mis uuesti luuakse ja ei sisalda kriitilist teavet. Leitud haavatavust peetakse ohtlikuks, kuid ebapiisavaks openSUSE'i ehitusinfrastruktuuri ja loodud pakettide kompromiteerimiseks. Samuti öeldakse, et OBSi liidese tegevusi, nagu on kirjeldatud rĂŒndes, vĂ”idi sooritada ainult OBSi variandi puhul, mis on arendaja tööjaamas kohalikult installitud.
Allikas: opennet.ru
