Un sito WordPress hackerato si riconosce spesso da sintomi lontani dalla causa. In questo caso, un sito di un’agenzia immobiliare pubblicava spam su casinò e scommesse da oltre un mese. La causa era un account amministratore compromesso, non una falla del core di WordPress: con quell’accesso l’attaccante aveva installato plugin falsi, una backdoor nella cartella mu-plugins e una password applicativa per pubblicare via API. L’articolo ricostruisce la cronologia, i controlli usati, gli interventi e i punti ancora aperti. Il cliente è anonimo. Il servizio corrispondente è il recupero di un sito WordPress hackerato.

I numeri del sito WordPress hackerato

NumeroCosa significa
66articoli spam pubblicati con l’account compromesso dal 25 agosto, su 69 pubblicati nello stesso periodo.
25+cartelle di plugin e temi falsi, molte con nome numerico basato sul timestamp.
1backdoor nella cartella mu-plugins, presente dal 28 luglio e invisibile nell’elenco plugin.
17.700richieste POST su xmlrpc.php nel solo mese di settembre.
235articoli spam spostati nel cestino di WordPress, compresi quelli tolti a mano.
15plugin aggiornati dopo la bonifica, con un secondo backup a lavori finiti.

La causa è un accesso amministrativo rubato. Resta aperta una domanda: come sono state ottenute le credenziali. Lo diciamo subito perché è la parte più importante del caso.

La cronologia dell’intrusione, ricostruita da file e log

I segni dell’intrusione non stavano in un unico posto. Le date dei file, i log del server e le tabelle del database hanno permesso di ricostruire una sequenza lunga mesi.

Data (2026)EventoCome si è visto
24 giugno, 8 agostoPrime cartelle di plugin e temi sospetteDate di modifica in wp-content
28 luglioCreato un file da 36 KB in mu-plugins, con un nome che richiama quello di un noto servizio di sicurezzaData del file
5 agostoCreata una password applicativa sull’utente compromessoTabella dei metadati utente
25 agostoIniziano gli articoli spam: 66 su 69 sono dell’utente compromessoQuery sul database
31 agosto, 16:09–17:54 UTCInstallazioni di plugin da più indirizzi IP, tramite wp-admin/update.phpLog di accesso: sessione amministrativa autenticata
31 agosto, 23:47Primo articolo spam via API REST (POST /wp-json/wp/v2/posts, risposta 201)Log di accesso
29 settembreUltimo uso della password applicativaMetadati della password applicativa
3 ottobreUltimo articolo spam, poi la bonificaDatabase

Come si trova una backdoor in un sito WordPress hackerato

Prima di toccare qualsiasi cosa: backup completo dell’account. Poi analisi in sola lettura, nell’ordine in cui i segnali sono più affidabili.

Utenti e password applicative

Elenco degli amministratori (wp user list --role=administrator) e delle password applicative di ciascuno (wp user application-password list). Qui la password “fantasma” era creata dal 5 agosto.

File ordinati per data

Le cartelle di plugin e temi creati in finestre strette di tempo sono il segno di un’installazione automatica. Il core si verifica con wp core verify-checksums, i plugin con wp plugin verify-checksums --all.

La cartella mu-plugins

I plugin must-use vengono caricati sempre e non compaiono nella schermata dei plugin. Un file lì dentro che nessuno ricorda di aver messo va letto riga per riga.

Log di accesso del server

Richieste POST a update.php e all’API REST, indirizzi IP, orari. Servono a distinguere un login normale dalla sessione usata per installare i componenti falsi.

Database con sole letture

Query di tipo SELECT su articoli, utenti e opzioni: chi ha scritto cosa e quando. Nessuna modifica finché il quadro non è chiaro.

Cosa abbiamo fatto, in modo reversibile

Regola del lavoro: si sposta, non si cancella. Tutti i componenti sospetti sono finiti in una cartella di quarantena fuori dal sito, con la possibilità di rimetterli al loro posto.

Backup prima

Backup completo prima delle modifiche e secondo backup a bonifica e aggiornamenti conclusi.

Quarantena

Più di 25 cartelle tra plugin e temi falsi, la backdoor, 8 temi predefiniti e 8 plugin inattivi.

Accessi chiusi

Revocata la password applicativa, disconnesse le sessioni dell’utente compromesso, attivati firewall e scansione.

Aggiornamenti

15 plugin aggiornati. Il blocco delle modifiche ai file (DISALLOW_FILE_MODS) è stato tolto solo per il tempo necessario e rimesso a true.

Contenuti

Articoli spam nel cestino: reversibile. La cancellazione definitiva spetta al titolare, dopo un controllo.

Report

Ogni intervento con dove è stato fatto e come tornare indietro. Si può verificare, non basta fidarsi.

Una pulizia senza password cambiate è una pausa, non una soluzione.

Le domande rimaste aperte nel caso

Un buon report dichiara i limiti. Al momento della consegna restavano aperti questi punti.

Come sono state rubate le credenziali. Non c’è una prova. L’ipotesi più probabile è una phishing o una password riutilizzata altrove; non è stata dimostrata. Il brute force su xmlrpc.php era costante, ma non c’è evidenza che sia andato a buon fine.

Gli altri account. Sei utenti, tutti amministratori. Uno compromesso con prove dirette, due da considerare a rischio per inferenza, tre a rischio basso. WordPress non registra l’ultimo accesso: senza un plugin di audit, non c’è modo di dire chi sia entrato.

Utenti cancellati in passato. Cinque ID mancano nell’elenco: erano account creati e poi rimossi. Non si può più sapere chi fossero.

Il database. I file sono stati ripuliti; il database no, oltre agli articoli. Dopo il cambio password vanno riguardati utenti, opzioni e pianificazioni.

Dopo la bonifica: l’indice di Google e gli URL spam

Gli articoli spam nel cestino restituiscono un 404, ma restano nell’indice finché Google non li ricontrolla. Ci sono due strade complementari: segnalare gli URL con lo strumento di rimozione di Search Console e lasciare che il 404 faccia il resto. Va anche controllata la sezione Azioni manuali. La documentazione di Google sui siti hackerati descrive il percorso. Un caso come questo può non ricevere alcuna azione manuale: si verifica, non si presume.

Checklist per un sito WordPress hackerato

PassoCosa fare
1Backup completo di file e database prima di modificare qualsiasi cosa
2Elenco degli utenti amministratori e delle loro password applicative
3Controllo di mu-plugins, plugin e temi per data di creazione e checksum
4Lettura dei log di accesso: POST su update.php, API REST, xmlrpc.php
5Quarantena dei componenti sospetti, senza cancellare
6Revoca delle password applicative e disconnessione delle sessioni
7Nuove password per WordPress, hosting, FTP e database; chiavi di sicurezza rigenerate
8Autenticazione a due fattori sugli amministratori e riduzione del loro numero
9Aggiornamento di core, plugin e temi; rimozione di ciò che non serve
10Search Console: URL spam, azioni manuali, eventuale richiesta di revisione

Hai gli stessi sintomi?

Scrivimi cosa vedi sul tuo sito: ti rispondo io, di persona, e ti dico da dove partire.

Recupero di un sito WordPress hackerato

Domande frequenti su questo caso

La causa era una falla di WordPress?+

No. Nel caso descritto, la causa è un accesso amministrativo rubato. WordPress core non risulta violato; i plugin vecchi hanno aumentato il rischio ma non sono la causa dimostrata.

Perché non si cancella tutto subito?+

Perché un componente scambiato per falso, ma in uso, rompe il sito. Spostare in quarantena permette di verificare e di tornare indietro.

Cos’è un plugin must-use?+

È un file nella cartella wp-content/mu-plugins che WordPress carica sempre, senza attivazione. Nell’elenco plugin compare in una sezione separata o non compare affatto: per questo è un nascondiglio frequente.

Il nome del cliente è pubblico?+

No. Il caso è reale ma anonimo: nomi, indirizzi email e indirizzi IP non vengono pubblicati.

Share This Story, Choose Your Platform!