Cercetătorii de securitate de la compania Fenrisk au dezvăluit informații despre vulnerabilitățile din instrumentele Pagure și OBS (Open Build Service), care permiteau compromiterea infrastructurilor de generare a pachetelor pentru distribuțiile Fedora și openSUSE. Cercetătorii au demonstrat posibilitatea efectuării unui atac pentru executarea de cod arbitrar pe serverele cu Pagure și OBS, ceea ce putea fi folosit pentru a introduce modificări în pachete în repozitoarele Fedora și openSUSE.
În platforma Pagure, utilizată în Fedora pentru colaborarea cu codul și metadatele pachetelor, au fost identificate 4 vulnerabilități. Pentru a exploata problemele identificate, este necesară o cont în serviciul Pagure, pe care o poate obține oricine (în prezent, în Pagure.io sunt înregistrați 24.899 de utilizatori). Trei dintre probleme permit citirea fișierelor din sistem, iar una dintre probleme permite executarea unui cod propriu pe server. Problemele au fost identificate pe 1 ianuarie 2024, raportate prin bugzilla.redhat.com pe 25 aprilie 2024 și remediate în Pagure în termen de 3 ore.
- Vulnerabilitățile CVE-2024-4981 și CVE-2024-47515 sunt cauzate de o gestionare incorectă a legăturilor simbolice în funcțiile de actualizare a fișierului și generare a arhivelor. Aceste vulnerabilități permit citirea conținutului fișierelor locale pe server, de exemplu, se pot obține informații despre fișierul cu parametrii sesiunii administratorului Pagure și acces la drepturile acestuia. Exploatarea vulnerabilității în funcția _update_file_in_git() constă în crearea unui repozitoriu în Pagure; adăugarea unui commit cu un fișier nou, care este creat ca o legătură simbolică la fișierul sistemului dorit; deschiderea acestui fișier pentru editare în interfața web.
- Vulnerabilitatea (CVE-2024-4982) în funcția view_issue_raw_file() permite ieșirea din directorul de bază prin specificarea caracterului „/..” în parametrii Issue solicitat. Problema permite citirea fișierelor din sistem, în limitele permisiunilor procesului sub care rulează interfața web. De exemplu, pentru a vizualiza fișierul /etc/passwd se poate deschide pagina „http://pagure.local:5000/your-repository/issue/raw/../../../../../../etc/passwd”.
- Vulnerabilitatea (CVE-2024-47516) din funcția PagureRepo.log() permite substituirea comenzilor proprii și executarea codului pe server. Problema este cauzată de faptul că, atunci când se vizualizează istoricul modificărilor fișierului prin intermediul interfeței web, este apelată comanda „git” cu transmiterea identificatorului ramurii în linia de comandă (de exemplu, „/usr/bin/git —pretty=oneline —abbrev-commit — README.md”). Corectitudinea identificatorului nu este verificată, așa că se poate transmite în locul acestuia orice opțiune de linie de comandă, de exemplu, „—output=/tmp/foo.bar” pentru redirecționarea ieșirii într-un fișier. Atacatorul poate suprascrie un fișier din sistem prin trimiterea unei cereri de tipul: http://pagure.local:5000/test/history/README.md?identifier=—output=/tmp/foo.bar
Pagure funcționează sub utilizatorul git, astfel încât se pot suprascrie doar fișierele acestui utilizator. Pentru a executa codul propriu pe server, se poate folosi un serviciu pentru accesul la depozit prin SSH, la care se execută comanda „bash -c /usr/libexec/pagure/aclchecker.py”. Atacatorul poate folosi vulnerabilitatea pentru a suprascrie fișierul „/srv/git/.bashrc”, iar acest fișier va fi rulat de interpretul de comenzi bash la accesarea depozitului prin ssh.
Atacul constă în înregistrarea în sistemul Pagure, crearea unui depozit, adăugarea în depozit a fișierului README.md cu o notă de commit de tipul „|| /bin/bash” și trimiterea unei cereri „http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc”. În timpul acestor pași, în fișierul „/srv/git/.bashrc” va fi scrisă o linie de tipul „34а5с43 || /bin/bash”. Pentru a rula fișierul creat „/srv/git/.bashrc”, este suficient să te conectezi la depozit prin SSH cu propriul cont. Executarea codului cu drepturile utilizatorului git pe serverul Pagure permite controlul întregului conținut al depozitelor cu pachete.
În platforma OBS (Open Build Service), utilizată în openSUSE și în alte distribuții pentru construirea pachetelor, a fost descoperită o vulnerabilitate (CVE-2024-22033) care permite executarea codului propriu pe server. Vulnerabilitatea a fost identificată pe 27 iunie 2024, raportată proiectului openSUSE pe 29 iunie și remediate pe 10 iulie.
Vulnerabilitatea există în serviciul «obs-service-download_url», unde nu a fost efectuată o verificare adecvată a URL-ului utilizat la lansarea utilitarului wget din scriptul care descarcă codul sursă în OBS. Atacatorul poate specifica în serviciul OBS configurația pachetului generat, în care, în loc de URL-ul pentru descărcarea codului, va fi indicată o opțiune de linie de comandă pentru wget, de exemplu: —output-document=\/tmp\/test tempfile
Pentru a evita returnarea unei erori la încercarea de a rula wget fără URL, în exemplu a fost specificată opțiunea «download-manifest», care permite indicarea unei liste de URL-uri într-un fișier separat. Exemplul menționat mai sus va conduce la executarea comenzii: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 —output-document=\/tmp\/test
care permite salvarea în fișierul \/tmp\/test a conținutului descărcat de la linkul specificat în fișierul \/srv\/obs\/service\/XXXXX\/src\/tempfile din codul încărcat de atacator în OBS prin intermediul interfeței build.opensuse.org, care permite înregistrarea liberă. Pe lângă suprascrierea fișierului de pe server, atacatorul poate, de asemenea, să trimită orice fișier pentru sine, specificând în loc de «—output-document» opțiunea «—post-file», de exemplu, «—post-file=\/etc\/passwd». Astfel, atacatorul poate citi și scrie fișiere pe server în funcție de permisiunile pe care le are, sub care rulează serviciul OBS.
Pentru a transforma posibilitatea de scriere într-un fișier în executarea codului pe server, cercetătorii au propus o metodă formată din două etape. Cele două etape sunt necesare, deoarece atacatorul poate crea un fișier «.wgetrc» cu setări pentru wget, dar aceasta nu este suficient pentru a rula comenzi. Dar, prin intermediul «.wgetrc», se pot crea condiții pentru executarea oricărei programe în sistem, dar fără a-i transmite argumente. Pentru a lansa cod arbitrar, s-a propus lansarea programului «prove», care procesează fișierul de configurație «.proverc», care permite specificarea opțiunii «—exec» pentru a executa orice cod.
În prima etapă, prin manipulările menționate mai sus cu „download-manifest” în directorul personal al utilizatorului „obsservicerun”, se creează un fișier „.proverc”, care include comenzi ce vor fi executate la lansarea procesului „prove”. În a doua etapă, se creează un fișier „.wgetrc” cu parametrul „use-askpass=\/usr\/bin\/prove”, care duce la apelarea „prove”. După apariția acestor fișiere, este suficient să se creeze condițiile pentru descărcarea oricăror date folosind wget, ceea ce va duce la execuția codului atacatorului pe server cu drepturile utilizatorului „obsservicerun”. Drepturile utilizatorului „obsservicerun” sunt suficiente pentru a extrage din repozitoare cheile utilizate de utilizatorii OBS pentru semnarea pachetelor.
Complement: Echipa de Securitate a Produselor SUSE consideră că pericolul vulnerabilității din OBS este supraevaluat și afirmația cercetătorilor că problema permite compromiterea tuturor pachetelor din distribuția openSUSE nu este fondată. Se remarcă faptul că serviciile din infrastructura build.opensuse.org sunt lansate folosind containere izolate, recreate și fără informații critice. Vulnerabilitatea descoperită este apreciată ca fiind periculoasă, dar nu suficientă pentru a compromite infrastructura de construire openSUSE și pachetele generate. Mai mult, s-a menționat că acțiunile în interfața OBS, descrise în exemplul atacului, ar fi putut fi realizate doar în varianta OBS, instalată local pe stația de lucru a dezvoltatorului.
Sursa: opennet.ro
