La vulnerabilità di Duplicator mette a rischio le migration di WordPress
La vulnerabilità di Duplicator identificata come CVE-2026-82814 può trasformare un normale commento WordPress in codice dannoso che si attiva durante una successiva migration del sito. Wordfence Threat Intelligence ha scoperto la falla il 30 agosto 2026, durante una valutazione della sicurezza di WordPress 7.1 assistita dal proprio sistema di ricerca Argus. Duplicator conta più di un milione di installazioni attive. Il problema ha ottenuto un punteggio di 8,8 su 10 nel Common Vulnerability Scoring System ed è classificato come High.
Le versioni interessate sono Duplicator Free fino alla 1.5.17 e Duplicator Pro fino alla 4.6.10. Il difetto è una PHP Object Injection non autenticata: qualcuno privo di un account può fornire dati archiviati che PHP trasforma in seguito in un oggetto software con un comportamento potenzialmente pericoloso. È anche una second-order vulnerability: la richiesta iniziale dell'attaccante non provoca danni immediati. L'esecuzione dipende da una successiva azione legittima di un amministratore.
Il percorso dimostrato inizia dall'endpoint pubblico wp-comments-post.php di WordPress. Un attaccante può inviare un commento senza account, cookie o nonce, ossia un controllo monouso destinato a confermare che una richiesta sia legittima. Il commento contiene un oggetto PHP dannoso codificato in base64, un metodo per rappresentare i dati come testo normale. L'approvazione è irrilevante perché WordPress archivia nel proprio database anche i commenti in attesa. Se in seguito un amministratore crea un package Duplicator, il commento archiviato viene copiato al suo interno.
Il payload rimane inattivo mentre il package viene creato o archiviato. Viene eseguito soltanto se un amministratore utilizza quel package per una migration o un'importazione standard che esegue il processo di search-and-replace Update Data di Duplicator. Questo processo modifica valori del database, come il vecchio indirizzo del sito web e il path del filesystem, affinché corrispondano alla destinazione. I serialized data, che memorizzano i valori insieme a dettagli quali la lunghezza delle stringhe e i nomi delle classi, richiedono una gestione particolare quando tali valori cambiano.
Gli installer interessati passano possibili valori di serialized data alla funzione nativa unserialize() di PHP tramite DUPX_UpdateEngine::unserializeTest(), senza impedire la creazione di classi. PHP può quindi richiamare metodi speciali quali __wakeup() e __destruct(). Una sequenza utile di questi metodi è chiamata gadget chain e può fare in modo che dati controllati dall'attaccante eseguano azioni mai previste dallo sviluppatore del plugin. Prima di testarli, il migration engine decodifica inoltre i valori del database codificati interamente in base64, consentendo a un commento codificato di raggiungere la funzione vulnerabile.
Le conseguenze variano a seconda dell'edizione. Duplicator Free 1.5.17 includeva Requests 1.7 nel proprio installer generato. Wordfence ha combinato la classe DbUserMode di Duplicator con Requests_Utility_FilteredIterator, il cui metodo current() richiama una callback selezionata dai serialized data. Poiché l'attaccante controlla sia la callback sia il relativo argomento, una funzione PHP come system() può eseguire un comando del sistema operativo scelto dall'attaccante. Wordfence ha verificato la command execution diretta con i permessi dell'account che esegue il web server e ha utilizzato la stessa gadget chain anche per eliminare un file.
Duplicator Pro 4.6.10 disponeva di una libreria Requests più recente, quindi quella callback chain non era disponibile. Il suo installer includeva tuttavia Duplicator\Libs\Index\IndexList. Il destructor della classe elimina il file identificato dalla sua proprietà path. Wordfence ha prima confermato la file deletion con file di prova e poi ha eliminato wp-config.php, il file contenente la configurazione principale del database di un sito WordPress, in un'installazione temporanea. Il file deve esistere e il processo PHP che esegue l'installer deve disporre dell'autorizzazione per modificare la directory in cui si trova.
Senza wp-config.php, WordPress presenta il normale processo di configurazione. Wordfence ha dimostrato che un attaccante che vi accede prima del proprietario può fornire un database raggiungibile sotto il proprio controllo, creare un amministratore e installare un plugin proof-of-concept per eseguire codice PHP. Questo percorso non espone il database o le credenziali del sito originale, ma può consentire all'attaccante di assumere il controllo di WordPress sul dominio e sul filesystem interessati.
Diverse condizioni limitano l'attacco. Il valore dannoso nel database deve esistere prima della creazione del package e un amministratore deve successivamente avviare una migration o un'importazione standard che esegua la sostituzione nel database. La creazione o la semplice conservazione di un backup non attiva il payload. Wordfence non ha dimostrato la gadget chain tramite le modalità restore o recovery di Duplicator. La disattivazione dei commenti pubblici elimina il percorso di distribuzione dimostrato, ma Wordfence ha avvertito che altri contenuti del database controllati da un attaccante potrebbero comunque raggiungere lo stesso engine vulnerabile.
Duplicator 5.0.0 corregge il percorso di migration vulnerabile. Il metodo SnapUtil::safeUnserialize() richiama unserialize() impostando allowed_classes su false, impedendo ai dati di creare istanze delle classi indicate in questo punto. Il valore restituito viene utilizzato soltanto per stabilire se l'input è valido e viene poi eliminato. Duplicator Free 5.0.0 ha inoltre smesso di utilizzare il componente Requests meno recente coinvolto nella command execution diretta. Wordfence ha verificato la correzione nella versione Free, ha esaminato Duplicator Pro 5.0.5 e ha constatato che i file di sicurezza pertinenti erano identici a quelli dell'implementazione Free corretta, mentre lo sviluppatore ha confermato che Pro 5.0.0 ha ricevuto la stessa correzione.
L'aggiornamento non riscrive i package già esistenti. Un archivio creato con una versione interessata conserva l'installer di quella versione. Durante i test, il normale workflow Import di Duplicator Pro 5.0.5 ha eseguito l'installer meno recente di un package Pro 4.6.10 e ha raggiunto il percorso vulnerabile. Il workflow Restore automatico ha invece imposto la modalità restore, ha ignorato il processo di sostituzione interessato e non ha attivato la falla. Duplicator Free 5.0.0 ha rifiutato di ripristinare automaticamente un package Free 1.5.17 e ha invece indicato all'amministratore di scaricare ed eseguire manualmente il relativo installer. L'esecuzione dell'installer incluso come migration standard può rimanere pericolosa se il package contiene un valore dannoso.
Wordfence ha comunicato il problema il 31 agosto e lo sviluppatore ne ha confermato la ricezione il 2 settembre. La versione 5.0.0 è stata pubblicata l'8 settembre, con la conferma della patch il 25 settembre. Wordfence ha completato la propria analisi il 9 ottobre. La protezione firewall Generic Object Injection già esistente offriva già un certo livello di copertura agli utenti gratuiti e a pagamento. Una regola più mirata è stata resa disponibile ai clienti Premium, Care e Response il 15 ottobre, mentre la disponibilità per gli utenti gratuiti è prevista per il 14 novembre 2026. La copertura del firewall rappresenta un livello di protezione aggiuntivo, non un'alternativa all'aggiornamento.
I proprietari dei siti dovrebbero aggiornare entrambe le edizioni alla versione 5.0.0 o successiva, creare un nuovo package prima di una migration o di un'importazione quando possibile e rimuovere i file installer standalone che rimangono accessibili pubblicamente quando non sono più necessari. Per le organizzazioni che preferiscono non gestire autonomamente l'infrastruttura WordPress, AEU Hosting offre hosting WordPress gestito e protetto end-to-end.