Yuzo Related Posts – Falla di sicurezza nel plugin WordPress Una vulnerabilità critica presente nel codice del noto plugin WordPress Yuzo Related Post ha provocato l'inserimento di redirect verso siti non autorizzati come hellofromhony.org e silken.ru

Permalink e URL semantiche su Wordpress con IIS

Decisamente una brutta settimana per Lenin Zapata, autore del noto plugin Yuzo Related Post per WordPress. Il plugin, installato su oltre 60.000 siti web, è stato rimosso dalla directory dei plug-in di WordPress.org il 30 marzo 2019 a seguito della divulgazione pubblica di una vulnerabilità presente all’interno del codice. La vulnerabilità, ad oggi ancora priva di patch, consente all’attacker di inserire uno script all’interno delle pagine dei siti web che hanno il plugin installato mediante una tecnica nota come Cross-Site Scripting (XSS).

La vulnerabilità presente nel plugin è frutto di un utilizzo improprio della funzione is_admin(), che ha il preciso scopo di verificare se la URL a cui si accede si trova nella sezione di amministrazione ma che viene erroneamente utilizzata da molti sviluppatori di plugin WordPress per controllare se l’utente corrente  dispone o meno di privilegi amministrativi. Un “fraintendimento” tutt’altro che banale, al punto che il WordPress Codex ravvisa in modo esplicito la necessità di astenersi da questo utilizzo errato:

This Conditional Tag checks if the Dashboard or the administration panel is attempting to be displayed. It is a boolean function that will return true if the URL being accessed is in the admin section, or false for a front-end page. This function does not verify whether the current user has permission to view the Dashboard or the administration panel. Use current_user_can() instead.

Di seguito il punto di codice sorgente incriminato, presente nel file assets/ilenframework/core.php e comune a tutte le versioni più recenti del plugin:

Come si può vedere, il codice consente la chiamata a self::ini() a tutte le request dirette verso una pagina di amministrazione, incluse le varie /wp-admin/options-general.php e /wp-admin/admin-post.php, che consente all’attacker di inoculare una request di tipo POST e, di conseguenza, modificare arbitrariamente le opzioni del plugin sfruttando una chiamata alla funzione self::save_options() presente più avanti nel codice. Tra le varie opzioni del plugin che è possibile modificare in questo modo vi è anche la yuzo_related_post_css_and_style, che consente di inserire codice HTML personalizzato all’interno della pagina: il posto perfetto per inserire un Cross-Site Script al fine effettuare una serie di azioni non autorizzate, tra cui il redirect verso un altro sito.

Come è ormai noto, la scelta dell’attacker è stata stata proprio quella, provocando un redirect coatto di tutti i siti oggetto dell’attacco prima sul dominio hellofromhony.org, dove era ospitato lo script, e successivamente su siti non sicuri come silken.ru.

Questo il codice JavaScript inoculato all’interno dell’opzione yuzo_related_post_css_and_style:

Lo script malevolo si compone di una singola istruzione eval(), una funzione tipicamente utilizzata per eseguire codice JavaScript “offuscato” sotto forma di una stringa codificata. Il codice, una volta decodificato, si può leggere in questo modo:

Come si può vedere, si tratta di un banale (ma tutt’altro che innocuo) script di redirect, che consente all’attacker di “dirottare” il browser di ciascun visitatore su una pagina web a sua scelta.

Un grazie a Wordfence.com, il sito ufficiale dell’ottimo plugin di sicurezza per WordPress Wordfence Security, per aver pubblicato la notizia, mettendo così in guardia l’intera comunità WordPress su una delle minacce più rilevanti degli ultimi tempi.

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.