Una società di sicurezza finlandese, Klikky Oy, ha scoperto una vulnerabilità nelle versioni 3.x di WordPress che potrebbe essere sfruttata da un malintenzionato per compiere diversi attacchi verso i browser degli utenti. Il bug è rimasto senza patch per oltre quattro anni, ovvero per l’intervallo di tempo compreso tra il rilascio di WordPress 3.0 (giugno 2010) e WordPress 4.0 (settembre 2014). Il team di sviluppo ha infatti corretto la vulnerabilità nell’ultima release della piattaforma CMS.
In base alle statistiche aggiornate al 24 novembre 2014, circa l’85% dei siti usa WordPress 3.x e quindi rischia di subire un attacco informatico, nel caso in cui l’amministratore non ha modificato le impostazioni predefinite, che consentono la scrittura dei commenti senza login. Klikky ha specificato che il bug viene sfruttato mediante la pubblicazione di un commento contenente codice JavaScript. Il problema risiede nella funzione wptexturize()
che trasforma virgolette, apostrofi, trattini, puntini di sospensione, il simbolo di marchio di fabbrica e il simbolo di moltiplicazione nelle corrispondenti versioni tipografiche.
Il codice inserito nei commenti viene eseguito automaticamente quando il visitatore visualizza il testo. La vulnerabilità assume una maggiore gravità se l’utente che legge il commento è l’amministratore. In questo caso, infatti, un malintenzionato potrebbe guadagnare il controllo del suo account, modificando la password e quindi prendendo possesso dell’intero sito o blog. In casi estremi potrebbe anche scrivere codice PHP sul server, usando l’editor dei plugin, ed eseguire una richiesta AJAX per accedere direttamente al sistema operativo.
L’azienda ha sviluppato un proof-of-concept che esegue tutte le operazioni descritte, senza lasciare traccia del codice JavaScript nel database. L’amministratore quindi non si accorge di nulla, in quanto l’exploit funziona in background. La soluzione migliore è installare WordPress 4.0. In alternativa è consigliabile disattivare la “testurizzazione”, aggiungendo la riga return $text;
alla funzione suindicata.