A quanto pare oggi parliamo di un problema che non mi risulta essere stato ancora risolto e che può essere alquanto insidioso. Andiamo con ordine.
Nel luglio del 2016 viene scoperta una potenziale vulnerabilità che consentirebbe il reset della password di amministratore di WordPress, in alcuni casi all’insaputa dell’admin stesso. Questo succede attraverso il tool di recupero della password e la funzione di Apache UseCanonicalName.
In sostanza la funzione UseCanonicalName permette al client di inoltrare al server il nome a dominio su cui effettuare la richiesta. E’ una funzione praticamente vitale del webserver perché nel caso di più nomi a dominio, cioè la quasi totalità, questa funzione raccoglie tale richiesta e la indirizza sul vhost corretto.
E’ anche una delle funzioni utilizzate da noi sistemisti, ad esempio quando si deve fare il rollout di un nuovo sito, questo viene taroccato con la funzione del file hosts sul proprio computer, affinché venga inoltrata la richiesta su un server non pubblicato a livello di DNS, ma la richiesta termina in modo corretto come se lo fosse. Questo succede proprio grazie alla funzione UseCanonicalName.
Nel caso di WordPress questa peculiarità viene “iniettata” nella richiesta di reset della password. Il risultato è che i campi di Return-Path, From e Message-ID nella e-mail che contiene il codice di reset, porteranno il dominio di un attaccante e non il dominio di riferimento del nostro sito.
A questo punto ci sono quattro strade per l’attaccante di portare a termine il lavoro.
- Tentare un Mail DoS, ovvero tentare di riempire la casella di posta con messaggi che contengono allegati grossi, oppure colpire proprio a livello di Denial of Service il server MX di posta. In questo modo la mail non viene inviata all’admin del sito di WordPress perché irraggiungibile, ma ritorna indietro al campo FROM.
- Alcuni server di invio posta (postfix, sendmail) se mal configurati, mandano una mail di auto risposta a FROM con il contenuto della mail inviata, quindi con il codice.
- Invio multiplo di richieste di reset, al fine di indurre l’admin (in questo caso consentitemi, un po’ pollo) a rispondere alle stesse mail, dove è contenuto il campo FROM.
- Attacco preventivo, dove è stato compromesso in precedenza l’account di posta attraverso spyware eccetera.
Come si può vedere il ventaglio di opzioni è abbastanza largo, sebbene non propriamente facile. E’ quindi importante verificare che lo stato del demone di invio posta del webserver abbia una configurazione che non presti fianco a simili strumentalizzazioni.
Soluzioni.
La soluzione che viene proposta per la maggiore, visto che al momento in cui scrivo WordPress non mi risulta abbia risolto la situazione, è quella di disattivare UseCanonicalName nel vhost.
Sicuramente è necessario controllare il sistema di invio delle mail, nello specifico sulle configurazioni del demone che invia la posta. Qui o sapete come fare oppure è necessario un sistemista.
Tenere il sistema operativo e WordPress aggiornati all’ultima versione disponibile.
Una ulteriore strada è quella di forzare WordPress a mandare la posta solo ed esclusivamente al nostro dominio. Lo faremo utilizzando un plugin (oppure attraverso il file functions.php del proprio tema grafico) che andremo ad illustrare qui sotto. Questa soluzione è stata proposta da Plesk e si può leggere a questa pagina.
Creiamo una cartella sul nostro computer che si chiama wp_mail_from.
All’interno creiamo un file che si chiamerà wp_mail_from.php.
Il contenuto di questo file sarà il seguente:
<?php
/*
Plugin Name: wp_mail_from
Description: WordPress plugin that filters senders email address in mails sent by WordPress
Author:
Version: 1.0
License:
*/
add_filter('wp_mail_from', function ($from) {
return 'wordpress@YOUR_DOMAIN_NAME';
});
Abbiate cura DI MODIFICARE nel file YOUR_DOMAIN_NAME con il vostro nome a dominio del sito. Comprimente in formato zip la cartella con il file, e caricatela nel vostro wordpress attraverso la funzione “aggiungi nuovo” nella sezione plugin.
In alto ci sarà il tasto “carica plugin” che permetterà di caricare il file compresso appena creato. Una volta caricato dobbiamo solo attivarlo, ora il campo from sarà sovrascritto con il dominio del nostro sito.
Considerazioni.
Evidentemente ci sono delle considerazioni in essere all’interno del team di WordPress, che dovrebbe essere a conoscenza della vulnerabilità. Basterebbe infatti modificare il file wp-includes/pluggable.php prelevando il dominio dalle impostazioni generali. Non è stato ancora fatto, probabilmente perché questa potenziale soluzione impatta in altre funzionalità, penso ad esempio a siti dove il numero di utenti con mail (e quindi domini) siano variegati, ad occhio potrebbero essere appunto gli admin di siti come WordPress Multisite o siti con il sistema Buddypress. Se ricevete mail di reset della password, fate attenzione al dominio di ritorno della mail, se questo è diverso dal vostro dovete allarmarvi e controllare la situazione.