Red Hot Cyber

Sicurezza informatica, cybercrime, hack
news, e altro ancora
  • English

PHP PEAR: 2 bug di 15 anni possono portare ad attacchi in supply-chain

PEAR (abbreviazione di PHP Extension and Application Repository) ha una vulnerabilità di 15 anni che permetteva attacchi alla catena di approvvigionamento, incluso l’accesso per pubblicare pacchetti fraudolenti tramite l’esecuzione di codice arbitrario.

Nello specifico, PEAR è un framework di distribuzione per componenti PHP riutilizzabili. Thomas Chauchefoin di SonarSource ha parlato di un annoso problema che lo affligge.

Secondo lui, il bug è apparso nel codice nel lontano 2007 ed era associato all’uso della funzione mt_rand() crittograficamente non sicura usata per la reimpostazione della password, che ha aiutato l’attaccante a:

“rilevare una password valida e ripristinare il token in meno di 50 tentativi”.

L’esperto ha inoltre riportato che:

Advertisements

“Un utente malintenzionato che utilizza il bug potrebbe accedere a qualsiasi account di sviluppo e pubblicare una versione dannosa, mentre il secondo bug consente l’accesso permanente al server PEAR”

Armato di un exploit, un utente malintenzionato potrebbe quindi attaccare gli account dello sviluppatore o dell’amministratore per prenderne il controllo e quindi pubblicare codice contenente del malware, il che porterebbe a una compromissione diffusa della catena di approvvigionamento.

La seconda vulnerabilità menzionata dall’esperto dovrebbe essere utilizzata insieme alla prima per ottenere l’accesso iniziale. Il bug si basa su una versione precedente di Archive_Tar che è suscettibile a un problema di path traversal (CVE-2020-36193) che può portare all’esecuzione di codice arbitrario remoto.

 “Queste vulnerabilità esistono da più di un decennio ed erano facili da trovare e da sfruttare, sollevando dubbi sulla mancanza di contributi sulla sicurezza da parte delle aziende che si affidano a queste soluzioni”

Ha riassunto Chauchefouin.

Lo sfruttamento del rese password

le istanze pearweb non consentono l’autoregistrazione: gli account sono riservati agli sviluppatori disposti a proporre pacchetti da inserire nel repository ufficiale di PEAR. La richiesta di account può essere eseguita con il modulo Richiedi account, in cui il richiedente deve fornire informazioni sulla propria identità e sul progetto che desidera distribuire. Le richieste vengono quindi convalidate manualmente dagli amministratori PEAR. 

Advertisements

Si tratta di una scelta interessante per ridurre gli abusi e ridurre al minimo la superficie di attacco del servizio: escluso il bug tracker, le uniche funzionalità “interessanti” disponibili senza account sono questo modulo di richiesta account, la funzionalità di autenticazione e reimpostazione della password. 

Dopo aver scansionato questo progetto su SonarCloud, il nostro motore ha identificato un Security Hotspot in un metodo chiamato resetPassword() : 

SonarCloud segnala l'uso di un generatore di numeri non sicuro in resetPassword()

Questo codice genera un valore casuale, un hash MD5 e quindi lo inserisce nel database insieme ad altri dettagli necessari per la reimpostazione della password. L’uso di MD5 non è un problema, fintanto che il valore hash è abbastanza forte e unico.

Il problema è spiegato in dettaglio nella descrizione della regola SonarCloud: mt_rand() non dovrebbe essere usato per motivi di sicurezza. 

Advertisements

Esaminiamo i valori concatenati insieme e quindi sottoposti a hash con md5() :

  • mt_rand(4,13) : è un numero intero compreso tra 4 e 13 (limiti inclusi);
  • $user : il nome utente dell’account da resettare, conosciuto e controllato dall’attaccante;
  • time() : il timestamp corrente;
  • $pass1 : la nuova password da utilizzare, conosciuta e controllata dall’attaccante.

Dal punto di vista dell’attaccante, il valore finale si basa solo su due incognite, che sono l’output di mt_rand() e time() : il primo non può produrre molti valori (10), e il secondo può essere facilmente approssimato da l’attaccante. 

Inoltre, il server HTTP di pear.php.net aggiunge un’intestazione Date alle sue risposte, restringendola a pochi valori (< 5). 

Potremmo concludere che gli aggressori possono scoprire un token di reimpostazione della password valido in meno di 50 tentativi ed è stato sviluppato uno script per sfruttare questa debolezza e confermarne l’impatto: questo è il primo passaggio del video introduttivo.

Advertisements

Come aneddoto, questo bug è stato introdotto nel marzo 2007 durante la prima implementazione di questa funzionalità . 

Utilizzando questo exploit contro gli account degli sviluppatori o amministratori esistenti, gli aggressori potrebbero pubblicare nuove versioni di pacchetti esistenti dopo avervi incluso del codice dannoso. Verrebbe quindi scaricato ed eseguito automaticamente ogni volta che qualcuno recupera questi pacchetti da PEAR.