Vulnerabilità in cdnjs che ha consentito l'esecuzione di codice sui server Cloudflare

Nella rete di distribuzione dei contenuti cdnjs, fornita da Cloudflare e destinata ad accelerare la consegna delle librerie JavaScript, è stata scoperta una vulnerabilità critica che consente l'esecuzione di codice arbitrario sui server CDN. Il rischio della problematica è amplificato dal fatto che circa il 12,7% di tutti i siti web utilizza il servizio per caricare le librerie JavaScript, e la compromissione dell'infrastruttura permette di sostituire le librerie fornite da qualsiasi sito.

Il servizio cdnjs carica pacchetti da Git o dal repository NPM, consentendo a qualsiasi sito di utilizzare gratuitamente la rete di distribuzione dei contenuti Cloudflare per accelerare il caricamento delle librerie JavaScript. Durante l'analisi del codice dei componenti cdnjs pubblicati su GitHub, è emerso che per estrarre i pacchetti NPM all'interno di archivi tgz viene utilizzato il modulo di archiviazione tar scritto in Go, che restituisce l'elenco dei file così com'è, senza normalizzazione dei percorsi. Nel caso in cui lo script esegua l'estrazione del contenuto basandosi sull'elenco fornito, la presenza in archivio di file del tipo "../../../../../../../tmp/test" potrebbe portare alla sovrascrittura di file arbitrari nel sistema, a seconda dei diritti di accesso.

Si è ipotizzato che l'attaccante possa richiedere l'aggiunta della propria libreria in cdnjs e caricare nel repository NPM un archivio appositamente formattato, contenente file con il carattere «../» nel percorso. Nei server di cdnjs viene eseguita periodicamente un'operazione di «autoupdate», durante la quale il gestore carica nuove versioni della libreria proposta e ne estrae il contenuto. Utilizzando file con percorsi «../», l'attaccante può provocare la sovrascrittura dei file di script del servizio ed eseguire il proprio codice su server su cui avveniva l'estrazione.

Nel caso di caricamento degli aggiornamenti da Git, è emerso che il gestore degli aggiornamenti non considerava i collegamenti simbolici durante la copia dei file da Git. Questa caratteristica consentiva di organizzare la lettura di qualsiasi file con server attraverso l'aggiunta di collegamenti simbolici in Git.

Gli esperimenti sulla dimostrazione dell'hacking di cdnjs per ottenere premi su HackerOne sono iniziati con una verifica dell'ipotesi riguardo alla lettura dei file. È stato aggiunto un collegamento simbolico test.js al repository Git della libreria JavaScript distribuita tramite CDN, puntando al file /proc/self/maps. Dopo la pubblicazione di una nuova versione della libreria, il gestore degli aggiornamenti ha elaborato questo repository e ha pubblicato il file indicato su cdnjs (test.js è stato creato come collegamento simbolico e, quando veniva richiesta, restituiva il contenuto di /proc/self/maps).

Sostituendo il collegamento simbolico al file /proc/self/environ, l'autore dello studio ha notato che all'interno dei dati restituiti erano presenti i valori delle variabili ambientali GITHUB_REPO_API_KEY e WORKERS_KV_API_TOKEN. Nella prima variabile era memorizzata la chiave API per l'accesso con diritti di scrittura al repository robocdnjs su GitHub. Nella seconda variabile era memorizzato il token per lo storage KV in cdnjs. Sfruttando queste informazioni, un attaccante potrebbe apportare modifiche a cdnjs e compromettere completamente l'infrastruttura.

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