CVE-2017-9841 è una vulnerabilità che permette a un attaccante remoto di eseguire codice PHP arbitrario su siti web che utilizzano versioni vulnerabili di PHPUnit, un framework di testing ampiamente usato per il PHP. SI tratta di una vulnerabilità nota che è stata resa nota il 27 giugno 2017​.

In buona sostanza, la CVE-2017-9841 è una vulnerabilità che ha messo a rischio la sicurezza di innumerevoli sistemi PHP e purtroppo, risulta presente su diverse piattaforme ancora oggi. Questa falla di sicurezza non è stata semplicemente un’entità astratta nel vasto universo della sicurezza informatica, ma rappresenta un richiamo all’azione per sviluppatori e professionisti IT.

CVE-2017-9841

Una breve premessa

Le autorità di cyber sicurezza, come la CISA, hanno prontamente incluso la CVE-2017-9841 nei cataloghi di vulnerabilità critiche. Il cuore della vulnerabilità si trova nel file “Util/PHP/eval-stdin.php” di PHPUnit. Tutte le versioni precedenti alla 4.8.28 e alla 5.x prima della 5.6.3 sono affette.

L’exploit avviene mediante richieste HTTP POST con dati che iniziano con la sottostringa “< ?php”. Questo malware può essere utilizzato per creare una rete di computer infetti (botnet) per lanciare attacchi contro altri sistemi, per lo spyware per monitorare l’attività del sistema, o ransomware per crittografare dati e chiedere un riscatto. Ma non è certo finita qui.

Gli attacchi sfruttando questa vulnerabilità potrebbero anche portare ad una minaccia denial-of-service (DoS), rendendo l’applicazione web colpita non disponibile agli utenti legittimi. Ciò può avere un impatto diretto sulle operazioni aziendali e sulla soddisfazione del cliente.

Casistica di sfruttamento e difesa

Il malware Kinsing si serviva di questa specifica vulnerabilità per colpire le sue potenziali vittime e o faceva attraverso un processo ben specifico.

Innanzitutto, l’attaccante individuava i server web che avevano lasciato esposto il file denominato: “eval-stdin.php” di PHPUnit. Questo file non avrebbe dovuto essere accessibile dall’esterno poiché era destinato solo a scopi di testing in fase di sviluppo.;

Una volta individuato un server con questo file accessibile, il malware inviava una richiesta POST al file contenente codice PHP malevolo. A causa della natura di “eval-stdin.php”, che valutava ed eseguiva il codice PHP passato direttamente attraverso l’input (una pratica notoriamente insicura), il codice inviato veniva eseguito dal server.

Il codice PHP malevolo, una volta eseguito, apriva una backdoor nel sistema, che poteva essere utilizzata dagli aggressori per eseguire ulteriori operazioni dannose, come il deploy di script per il mining di criptovalute o la creazione di accessi remoti per consentire agli attaccanti di controllare la macchina compromessa.

In sostanza, il malware Kinsing si appoggiava alla vulnerabilità CVE-2017-9841 per inserire codice dannoso nei sistemi vulnerabili e per ottenere accessi non autorizzati, sfruttando una pratica di sviluppo insicura: l’esposizione di file interni di testing in un ambiente di produzione.

Implicazioni ulteriori della minaccia

Imperva evidenzio l’entità della minaccia con circa nove milioni di tentativi di attacco basati su questa CVE, soprattutto tra il 2019 e l’inizio del 2020, evidenziando il suo ruolo nelle attività dannose come quelle del malware XsamXadoo Bot.

Prevenzione e difesa

Per prevenire sfruttamenti simili, è fondamentale seguire le best practice di sicurezza fornite da Cyberment, che includono:

La prima e più ovvia misura è aggiornare PHPUnit alle versioni che non sono vulnerabili a CVE-2017-9841.
Le versioni sicure sono PHPUnit 4.8.28+ e 5.6.3+.

  • Si dovrebbe procedere all’aggiornamento attraverso Composer, il gestore di dipendenze per PHP, eseguendo il comando composer update nel progetto per assicurarsi che tutte le dipendenze siano aggiornate alla versione più recente e sicura.
  • Inoltre, è essenziale verificare la configurazione del server web per assicurarsi che i file e le directory di testing non siano accessibili pubblicamente tramite il web. Questo comporta la modifica dei file di configurazione del server (come .htaccess su Apache o la configurazione di Nginx) per bloccare l’accesso a questi file.
  • Seguire le best practice per la sicurezza dello sviluppo software, assicurandosi che tutti gli ambienti di testing e sviluppo siano isolati dall’ambiente di produzione.
  • Non includere mai strumenti di sviluppo e test, come PHPUnit, nel codice che viene spedito in produzione.
  • Infine, ma non per importanza predisporre regolarmente revisioni del codice e scansioni di web vulnerability assessment per scoprire e mitigare vulnerabilità potenziali prima che possano essere sfruttate.

Conclusione

La presenza della falla di sicurezza CVE-2017-9841 costituisce un problema oggettivo per l’azienda e la mitigazione della CVE-2017-9841 va ben oltre un semplice aggiornamento del software: richiede un approccio multi fattore e una policy aziendale che incorpori la sicurezza in ogni fase dello sviluppo e del mantenimento dei sistemi informatici.

Tuttavia, resta sottinteso che gli strumenti di sviluppo come PHPUnit siano utilizzati in maniera appropriata e che non siano mai lasciati all’interno di ambienti di produzione dopo il completamento del testing.