I ricercatori della sicurezza di Fenrisk hanno rivelato informazioni su vulnerabilità negli strumenti Pagure e OBS (Open Build Service), che hanno permesso di compromettere le infrastrutture di creazione dei pacchetti per le distribuzioni Fedora e openSUSE. I ricercatori hanno dimostrato la possibilità di lanciare un attacco per eseguire codice arbitrario sui server con Pagure e OBS, potendo così sostituire le modifiche nei pacchetti nei repository di Fedora e openSUSE.
Quattro vulnerabilità sono state scoperte nella piattaforma Pagure, utilizzata in Fedora per la collaborazione su codice e metadati dei pacchetti. Per sfruttare i problemi individuati, è necessaria un'utenza nel servizio Pagure, che chiunque può ottenere (attualmente in Pagure.io ci sono 24899 utenti registrati). Tre di queste vulnerabilità consentono di leggere file nel sistema, mentre una permette di eseguire codice su. server. I problemi sono stati identificati il 1 gennaio 2024, segnalati il 25 aprile 2024 su bugzilla.redhat.com e risolti in Pagure in 3 ore.
- Le vulnerabilità CVE-2024-4981 e CVE-2024-47515 sono causate da un'errata gestione dei collegamenti simbolici nelle funzioni di aggiornamento dei file e generazione di archivi. Queste vulnerabilità permettono di leggere il contenuto di file locali sul server, ad esempio, si può ottenere il contenuto del file con i parametri di sessione dell'amministratore Pagure e accedere con i suoi diritti. Sfruttare la vulnerabilità nella funzione _update_file_in_git() consiste nel creare un repository in Pagure; aggiungere un commit con un nuovo file creato come collegamento simbolico a un file di sistema desiderato; aprire questo file per la modifica nell'interfaccia web.
- La vulnerabilità (CVE-2024-4982) nella funzione view_issue_raw_file() consente di oltrepassare la directory principale specificando i caratteri «/..» nei parametri dell'Issue richiesto. Questo problema consente di leggere file nel sistema, a seconda dei permessi del processo sotto cui viene eseguita 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 l'inserimento dei propri comandi ed l'esecuzione di codice sul server. Questo problema è causato dal fatto che, durante la visualizzazione della cronologia delle modifiche di un file attraverso l'interfaccia web, viene eseguita una comando «git» con il passaggio dell'identificativo del ramo nella riga di comando (ad esempio, «/usr/bin/git —pretty=oneline —abbrev-commit <HERE> — README.md»). L'identificativo non viene convalidato, quindi si può passare qualsiasi opzione della riga di comando, ad esempio «—output=/tmp/foo.bar» per reindirizzare l'output in 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 con l'utente git, quindi è possibile sovrascrivere solo i file di questo utente. Per eseguire il proprio codice sul server, si può utilizzare un servizio di accesso al repository via SSH, attraverso il quale viene eseguita la comando «bash -c /usr/libexec/pagure/aclchecker.py». L'attaccante può sfruttare la vulnerabilità per sovrascrivere il file «/srv/git/.bashrc», e questo file sarà eseguito dal command interpreter bash quando si accede al repository via ssh.
L'attacco consiste nella registrazione nel sistema Pagure, creando un repository, aggiungendo al repository un file README.md con una nota di commit del tipo «|| /bin/bash» e inviando la richiesta «http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc». Durante questi passaggi, nel file «/srv/git/.bashrc» verrà scritta una riga del tipo «34a5c43 || /bin/bash». Per eseguire il file creato «/srv/git/.bashrc» è sufficiente connettersi al repository via SSH con il proprio account. L'esecuzione di codice con i permessi dell'utente git sul server Pagure consente di controllare tutto il contenuto dei repository con pacchetti.
Nella piattaforma OBS (Open Build Service), utilizzata in openSUSE e in alcune altre distribuzioni per la creazione di pacchetti, è stata identificata una vulnerabilità (CVE-2024-22033) che permette di eseguire il proprio codice sul server. La vulnerabilità è stata scoperta il 27 giugno 2024, segnalata al progetto openSUSE il 29 giugno ed è stata risolta il 10 luglio.
La vulnerabilità è presente nel servizio «obs-service-download_url», dove mancava il corretto controllo dell'URL utilizzato durante l'avvio dello strumento wget dallo script che carica il codice sorgente in OBS. L'attaccante può specificare nel servizio OBS una configurazione del pacchetto generato, in cui, invece dell'URL per il download del codice, viene indicata un'opzione della riga di comando per wget, ad esempio: —output-document=/tmp/test tempfile
Per evitare il ritorno di un errore quando si tenta di eseguire wget senza URL, nell'esempio viene indicata l'opzione «download-manifest», che consente di indicare un elenco di URL in un file separato. L'esempio sopra citato 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 scaricato dal link indicato nel file /srv/obs/service/XXXXX/src/tempfile del codice caricato dall'attaccante in OBS tramite l'interfaccia build.opensuse.org, che consente libera registrazione. Oltre alla sovrascrittura dei file sul server, l'attaccante può anche inviare a sé stesso qualsiasi file, specificando invece di «—output-document» l'opzione «—post-file», ad esempio, «—post-file=/etc/passwd». In questo modo l'attaccante può leggere e scrivere file sul server, a seconda dei permessi di accesso con cui il servizio OBS è eseguito.
Per trasformare la possibilità di scrittura in un'esecuzione di codice sul server, i ricercatori hanno proposto un metodo in due fasi. Due fasi sono necessarie, poiché l'attaccante può creare un file «.wgetrc» con le impostazioni per wget, ma questo non è sufficiente per eseguire comandi. Tuttavia, attraverso «.wgetrc» è possibile creare condizioni per l'esecuzione di qualsiasi programma nel sistema, ma senza passargli argomenti. Per eseguire codice arbitrario, è stato proposto di eseguire il programma «prove», che elabora il file di configurazione «.proverc», permettendo di specificare l'opzione «—exec» per eseguire qualsiasi codice.
Nel primo passo, attraverso le manovre sopra descritte con «download-manifest», nella home directory dell'utente «obsservicerun», viene creato un file «.proverc» che include i comandi da eseguire all'avvio del processo «prove». Nel secondo passo, viene creato un file «.wgetrc» con il parametro «use-askpass=/usr/bin/prove», che porta alla chiamata di «prove». Una volta generati questi file, è sufficiente creare le condizioni per il caricamento di qualsiasi dato tramite wget, il che darà inizio all'esecuzione del codice dell'attaccante sul server con i diritti dell'utente «obsservicerun». I diritti dell'utente «obsservicerun» sono sufficienti per estrarre le chiavi dai repository utilizzate dagli utenti OBS per la firma dei pacchetti.
Nota: Il Team di Sicurezza Prodotti SUSE ritiene che il rischio della vulnerabilità in OBS sia sovrastimato e che la dichiarazione dei ricercatori secondo cui il problema consente di comprometterne tutti i pacchetti nella distribuzione openSUSE non corrisponda al reale. È stato notato che i servizi nell'infrastruttura build.opensuse.org vengono eseguiti utilizzando contenitori isolati, ricreati di volta in volta e privi di informazioni critiche. La vulnerabilità identificata è stata valutata come pericolosa, ma non sufficiente a compromettere l'infrastruttura di build di openSUSE e i pacchetti generati. Inoltre, è stato indicato che le azioni nell'interfaccia OBS, descritte nell'esempio di attacco, potrebbero essere state eseguite solo nella versione di OBS installata localmente sulla workstation dello sviluppatore.
Fonte: opennet.ru
