I ricercatori della sicurezza di Fenrisk hanno rivelato informazioni sulle vulnerabilità negli strumenti Pagure e OBS (Open Build Service), che consentivano di compromettere le infrastrutture di creazione dei pacchetti delle distribuzioni Fedora e openSUSE. I ricercatori hanno dimostrato la possibilità di eseguire un attacco per eseguire codice arbitrario sui server con Pagure e OBS, che poteva essere utilizzato per inserire modifiche nei pacchetti nei repository di Fedora e openSUSE.
Nella piattaforma Pagure, utilizzata in Fedora per la collaborazione sul codice e sui metadati dei pacchetti, sono state individuate 4 vulnerabilità. Per sfruttare i problemi identificati è necessaria un'account nel servizio Pagure, a cui può accedere chiunque (attualmente ci sono 24899 utenti registrati su Pagure.io). Tre problemi consentono di leggere file nel sistema, mentre uno permette di eseguire il proprio codice su server. I problemi sono stati identificati il 1 gennaio 2024, segnalati tramite bugzilla.redhat.com il 25 aprile 2024 e corretti in Pagure entro 3 ore.
- Le vulnerabilità CVE-2024-4981 e CVE-2024-47515 sono causate da un'elaborazione errata dei collegamenti simbolici nelle funzioni di aggiornamento dei file e generazione degli archivi. Le vulnerabilità consentono di leggere il contenuto dei file locali sul server; ad esempio, è possibile accedere al contenuto del file contenente i parametri di sessione dell'amministratore di Pagure e ottenere accesso con i suoi privilegi. Lo sfruttamento della vulnerabilità nella funzione _update_file_in_git() si concretizza nella creazione di un repository in Pagure; nell'aggiunta di un commit con un nuovo file, creato come collegamento simbolico a un file di sistema desiderato; e nell'apertura di questo file per la modifica nell'interfaccia web.
- La vulnerabilità (CVE-2024-4982) nella funzione view_issue_raw_file() consente di uscire al di fuori della directory di base tramite l'indicazione dei caratteri "../.." nei parametri dell'issue richiesto. Il problema consente di leggere i file nel sistema, a seconda dei diritti di accesso del processo sotto cui è in esecuzione l'interfaccia web. Ad esempio, per visualizzare il file /etc/passwd è possibile aprire la pagina "http://pagure.local:5000/your-repository/issue/raw/../../../../../../etc/passwd".
- La vulnerabilità (CVE-2024-47516) nella funzione PagureRepo.log() consente di inserire propri comandi ed eseguire codice sul server. Il problema è causato dal fatto che, durante la visualizzazione della cronologia delle modifiche di un file tramite l'interfaccia web, viene eseguito il comando «git» con il passaggio dell'ID del ramo nella riga di comando (per esempio, «/usr/bin/git —pretty=oneline —abbrev-commit — README.md»). La correttezza dell'ID non viene verificata, quindi è possibile passare qualsiasi opzione della riga di comando, ad esempio «—output=/tmp/foo.bar» per reindirizzare l'output a un file. L'attaccante può sovrascrivere un file nel sistema inviando una richiesta del tipo: http://pagure.local:5000/test/history/README.md?identifier=—output=/tmp/foo.bar
Pagure viene eseguito come utente git, quindi è possibile sovrascrivere solo i file di questo utente. Per eseguire il proprio codice sul server, è possibile utilizzare un servizio di accesso al repository tramite SSH, al quale viene eseguito il comando «bash -c /usr/libexec/pagure/aclchecker.py». L'attaccante può sfruttare la vulnerabilità per sovrascrivere il file «/srv/git/.bashrc» e questo file verrà eseguito dal terminale bash quando si accede al repository tramite ssh.
L'attacco consiste nel registrarsi nel sistema Pagure, creare un repository, aggiungere al repository un file README.md con una nota di commit del tipo «|| /bin/bash» e inviare una richiesta «http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc». Durante questi passaggi, nel file «/srv/git/.bashrc» verrà registrata una stringa del tipo «34а5с43 || /bin/bash». Per eseguire il file creato «/srv/git/.bashrc», è sufficiente connettersi al repository tramite SSH con il proprio account. L'esecuzione di codice con i diritti dell'utente git sul server Pagure consente di controllare tutto il contenuto dei repository con i pacchetti.
Nella piattaforma OBS (Open Build Service), utilizzata in openSUSE e in altre distribuzioni per la creazione di pacchetti, è stata identificata una vulnerabilità (CVE-2024-22033) che consente di eseguire il proprio codice sul server. La vulnerabilità è stata scoperta il 27 giugno 2024, segnalata al progetto openSUSE il 29 giugno e corretta il 10 luglio.
La vulnerabilità è presente nel servizio «obs-service-download_url», nel quale mancava un'adeguata verifica dell'URL utilizzato durante l'esecuzione dell'utilità wget dallo script che gestisce il download del codice sorgente in OBS. L'attaccante può specificare nella configurazione del pacchetto creato nel servizio OBS un'opzione per wget al posto di un URL per il download del codice, ad esempio: —output-document=\/tmp\/test tempfile
Per evitare di ricevere un errore quando si tenta di eseguire wget senza URL, nell'esempio è inclusa l'opzione «download-manifest», che consente di specificare un elenco di URL in un file separato. L'esempio sopra descritto porterà all'esecuzione del comando: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 —output-document=\/tmp\/test
che consente di scrivere nel file \/tmp\/test il contenuto caricato dal link specificato nel file \/srv\/obs\/service\/XXXXX\/src\/tempfile dal codice caricato dall'attaccante in OBS tramite l'interfaccia build.opensuse.org, che consente registrazione libera. Oltre a sovrascrivere il file sul server, l'attaccante può anche inviare a sé stesso qualsiasi file, specificando l'opzione «—post-file» invece di «—output-document», ad esempio, «—post-file=\/etc\/passwd». In questo modo, l'attaccante può leggere e scrivere file sul server, a seconda dei diritti di accesso con cui viene eseguito il servizio OBS.
Per trasformare la possibilità di scrivere in un file in un'esecuzione di codice sul server, i ricercatori hanno proposto un metodo composto da due fasi. Le due fasi sono necessarie perché l'attaccante può creare un file «.wgetrc» con le impostazioni per wget, ma ciò non è sufficiente per eseguire comandi. Tuttavia, tramite «.wgetrc» è possibile creare condizioni per eseguire qualsiasi programma nel sistema, ma senza passare argomenti. Per eseguire codice arbitrario, è stato proposto di avviare il programma «prove», che elabora il file di configurazione «.proverc», consentendo di specificare l'opzione «—exec» per eseguire qualsiasi codice.
Nella prima fase, tramite le manipolazioni sopra descritte con "download-manifest" nella home directory dell'utente "obsservicerun", viene creato il file ".proverc", che include comandi che verranno eseguiti all'avvio del processo "prove". Nella seconda fase, viene creato il file ".wgetrc" con il parametro "use-askpass=\/usr\/bin\/prove", che porta alla chiamata di "prove". Dopo che questi file sono stati creati, è sufficiente stabilire le condizioni per scaricare qualsiasi dato utilizzando wget, il che porterà all'esecuzione del codice dell'attaccante sul server con i diritti dell'utente "obsservicerun". I diritti dell'utente "obsservicerun" sono sufficienti per estrarre dalle repository le chiavi utilizzate dagli utenti di OBS per firmare i pacchetti.
Nota aggiuntiva: il team di SUSE Product Security ritiene che il rischio dell vulnerabilità in OBS sia sopravvalutato e che l'affermazione dei ricercatori secondo cui il problema consente di compromettere tutti i pacchetti nella distribuzione openSUSE non corrisponda alla realtà. Si nota che i servizi nell'infrastruttura di build.opensuse.org vengono avviati utilizzando container isolati, ricreati e privi di informazioni critiche. La vulnerabilità rilevata è stata valutata come pericolosa, ma non sufficientemente grave da compromettere l'infrastruttura di costruzione di openSUSE e i pacchetti generati. Inoltre, è stato indicato che le azioni nell'interfaccia di OBS descritte nell'esempio di attacco potrebbero essere state effettuate solo nella versione di OBS installata localmente sulla stazione di lavoro dello sviluppatore.
Fonte: opennet.ru
