È di qualche giorno fa la notizia, anche se poco diffusa ancora, della scoperta di bug di sicurezza molto serio all’interno del plugin “Duplicator” per WordPress. Duplicator è un plugin molto utilizzato, utile per clonare o migrare un intero sito WordPress.
Secondo il blog Wordfence, noto plugin WordPress dedicato alla sicurezza e alla documentazione ufficiale di Synacktiv, Duplicator è vittima di una vulnerabilità RCE (Critical Code Execution) che è stata corretta con l’ultima versione 1.2.42, disponibile dal 24 Agosto scorso.
Le versioni interessate da questo problema di sicurezza sono tutte quelle disponibili fino alla versione di Duplicator 1.2.40 compresa.
Il codice “buggato” non è presente all’interno della stessa directory (o cartella) del plugin Duplicator ma si manifesta quando si utilizza lo stesso plugin per migrare o ripristinare una copia di backup di un sito WordPress.
Come funziona Duplicator
Il plugin funziona nel seguente modo: crea il backup di un sito generando due file entrambi necessari per ripristinare il contenuto del sito. Il file .zip archiviato e lo script che lo decomprime e lo configura: installer.php.
Questi file possono essere spostati su un nuovo server e inseriti in una directory appropriata, quindi l’amministratore può visitare il file /installer.php nel proprio browser per iniziare il processo di ripristino dei file e del database.
Una volta completato il ripristino, viene richiesto al’utente di accedere al nuovo sito.
Al login, viene visualizzata la pagina seguente:
In questa pagina l’utente deve compilare alcuni passaggi e lo stesso sistema ricorda agli utenti di rimuovere i file rimasti dalla loro migrazione di Duplicator.
Infatti, se non si rimuovono questi file, viene visualizzato un messaggio nella dashboard di WordPress fino a quando i file non saranno stati rimossi o Duplicator verrà disinstallato.
Questo avviso è molto importante perché lasciare gli script di installazione in una posizione accessibile dal Web può essere MOLTO pericoloso.
Il bug di Duplicator
Nel caso Duplicator non fosse stato aggiornato all’ultima release, lo script installer.php (e le copie generate, come installer-backup.php che si troveranno nella radice del sito dopo l’apertura e lo scompattamento del file .zip) scrive i valori nome utente, nome del database, password e host direttamente nel file wp-config.php senza che questi vengano prima “disinfettati” (letteralmente “sanitize”) da una sql injection che consente di scrivere i valori direttamente nel nuovo wp-config.php.
È normale che il file wp-config.php contenga questi dati in chiaro, ma il pezzo di codice malevolo inserisce un insieme di espressioni regolari per identificare le stringhe di connessione del database nel precedente file wp-config.php, quindi definisce i nuovi valori per queste stringhe.
Mentre ci sono alcune protezioni di base nello script di installazione che impediscono ad un amministratore di sovrascrivere un file wp-config.php esistente dall’interfaccia web dell’installatore, queste possono essere aggirate semplicemente fornendo il parametro POST “action_ajax=3”, dicendo efficacemente all’installer che quei controlli sono già passati.
Per quanto riguarda l’elaborazione della stringa, invece, i dati utili alla connessione di WordPress con il database vengono inseriti in modo molto prevedibile grazie ad una chiamata define() esistente nel file di configurazione, come DB_HOST o DB_USER.
Un utente malintenzionato ha la possibilità di aggiungere qualsiasi codice desiderato al file wp-config.php del sito interessato, comprese backdoor e/o possono essere eseguite attività molto dannose.
La Patch
Duplicator 1.2.42 risolve il problema andando ad aggiornare gli script generati come l’installer.php che ora usa la stringa “addslashes()” per sistemare la connessione al database immesse dagli utenti: in questo modo i malintenzionati non sono in grado di inserire codice PHP malevolo.
Inoltre durante la creazione dei backup è stata aggiunta una nuova impostazione facoltativa per consentire agli utenti di proteggere con password gli script di installazione generati. Ciò garantisce agli utenti una sicurezza aggiuntiva durante il processo di installazione chiudendo l’accesso agli script.
Tuttavia, questa opzione è nascosta da un menu comprimibile all’inizio quando si generano nuovi pacchetti, quindi gli utenti che non ne sono a conoscenza potrebbero non accorgersene.
Sebbene questa patch assicuri una migliore sicurezza nella migrazione di un sito WordPress con Duplicator, ricordatevi sempre di rimuovere tutti i file di installazione una volta che questi non sono più necessari.
Anche se le stringhe fornite dall’utente sono ora sicure e nel file wp-config.php viene impedito che il nuovo codice venga introdotto ed eseguito, i valori esistenti vengono comunque rimpiazzati da questo processo.
Ciò significa che se viene trovato un file installer.php con la patch ma non è protetto, un utente malintenzionato ha la possibilità di eliminare un sito semplicemente fornendo le credenziali del database MySQL errate all’installer.
Ecco cosa intendiamo per “fornire credenziali errate al database MySQL” una volta che un utente malintenzionato va a cambiare i parametri al wp-config.php. Collegandoci al nostro sito, il browser restituirà il seguente messaggio:
Conclusioni
Invitiamo tutti ad aggiornare, se lo state utilizzando, il plugin Duplicator alla nuova versione 1.2.42, così da mettersi al riparo da questa grossa problematica.
Oltre ad aggiornare il plugin è bene sapere che se avete utilizzato Duplicator in passato, dovete controllare che tutti i file del processo siano stati rimossi correttamente.
Se state utilizzando il plugin dedicato alla sicurezza Wordfence, per quanto riguarda gli utenti Premium, questi saranno i primi a ricevere l’avviso direttamente dal sistema “scan” del plugin.
Inoltre è stata aggiunta una nuova regola per proteggere gli utenti Premium WAF (Web Application Firewall) dalla vulnerabilità di Remote Code Execution, ovviamente in questo caso però la protezione estesa deve essere attivata.
Per gli account gratuiti di Wordfence invece, riceveranno queste regole tra circa una trentina di giorni.
Noi di FlameNetworks ricordiamo sempre che usare plugin senza cognizione di causa può portare molti problemi, come dimostra questo bug che ha interessato Duplicator. Come si dice in questi casi: da grossi poteri derivano grosse responsabilità.
Non ci resta che darvi appuntamento al prossimo articolo.
Salve.
Se con Duplicator scrivo su un database non vuoto, ma che non è un database WP, ma un db fatto da me, lo cancella ugualmente, o cancella solo gli eventuali vecchi DB con tabelle WP?
E in caso, esiste un metodo alternativo per aggiungere le tabelle wp al database esistente?
Grazie