Drupal è uno dei CMS più utilizzati al mondo per la pubblicazione e la gestione di contenuti sul web. Non è popolare tanto quanto Joomla né come WordPress (a cui va la palma d’oro in assoluto): Drupal è infatti complessivamente utilizzato dal 9% dei 10mila siti web più trafficati su scala planetaria.
Una notizia ha scosso in queste ore gli utenti di Drupal: una vulnerabilità presente in tutte le versioni del CMS può consentire a un aggressore remoto di acquisire pieno controllo del sito web altrui.
La falla viene valutata come gravissima da parte dello stesso team di sviluppo di Drupal (21 punti su un massimo di 25; vedere questa pagina) perché un malintenzionato può riuscire a prendere possesso di un sito Drupal semplicemente inviando una richiesta HTTP o HTTPS verso uno specifico URL.
Battezzata Drupalgeddon2 (il primo “Drupalgeddon” risale al 2014 quando fu scoperta una falla che permetteva l’avvio di attacchi di tipo SQL injection), la nuova pericolosissima vulnerabilità affonda le sue radici nella mancata sanitizzazione dell’input.
Inviando una particolare richiesta a Drupal, il CMS viene tratto in inganno e il malintenzionato ha gioco facile per violare l’applicazione web.
Gli utenti di Drupal sono quindi invitati ad aggiornare immediatamente alle versioni 7.58 o 8.5.1 per evitare rischi di attacco.
Il team di sviluppo di Drupal ha preferito non fornire i dettagli tecnici sulle modalità di attacco così da dare il tempo agli utenti di mettere in sicurezza le loro installazioni.
È tuttavia assai probabile che i criminali informatici si siano già messi al lavoro per analizzare le correzioni apportate da Drupal al sorgente del CMS e che quindi nei prossimi giorni possano avere inizio gli attacchi veri e propri, prima molto specifici e poi su vasta scala.
La “leggerezza” commessa dagli sviluppatori di Drupal in fase di programmazione potrebbe avere a che fare con la gestione degli array e in particolare sull’utilizzo della sintassi [] che permette di passare una serie di parametri all’applicazione web PHP.
Richiamando via HTTP o HTTPS un ipotetico file core.php
, infatti, e usando una sintassi simile a https://…./core.php?p[]=1&p[]=2&p[]=3
, PHP provvederà lato server a generare un array a partire dai valori trasmessi.
Quando Drupal recupererà i dati in input con un’istruzione $_GET['p']
, il risultato sarà l’automatica costruzione di un array con i valori specificati. Combinando questa caratteristica con l’utilizzo del carattere speciale “cancelletto” (#), è verosimile che sia possibile sferrare un attacco RCE (Remote Code Execution).
The essence of the diff between Drupal 7.57 and 7.58 (CVE-2018-7600, SA-CORE-2018-002) appears to be this. #drupal #drupalgeddon2 pic.twitter.com/ZNvckNLTpb
— Arto Bendiken (@bendiken) 28 marzo 2018