Un attacco a WordPress, e cosa abbiamo imparato

4 minuti di lettura

Una notte di luglio su un sito WordPress dei nostri server sono comparsi quattro amministratori che nessuno aveva creato. Come l'abbiamo gestito e perché il controllo l'abbiamo fatto su tutto il server.

A luglio 2026, su un sito WordPress ospitato su uno dei nostri server, sono comparsi di notte quattro utenti amministratori. Nessuno di noi li aveva creati, e nessuno del cliente.

Avevano nomi come w2s_ seguito da una fila di caratteri esadecimali, e indirizzi email che finivano in @wp2shell.local. Li aveva creati un attaccante per avere le chiavi del pannello.

Cosa è successo

Dai log, l'attacco arrivava da indirizzi IP di Google Cloud. L'attaccante ha provato a caricare un plugin «webshell», cioè una porta di servizio che permette di dare comandi al server dal browser. Il caricamento è fallito.

Lo stesso IP aveva sondato anche una dozzina di altri domini ospitati sullo stesso server. Andava a tappeto, alla ricerca di una porta aperta.

Negli stessi giorni arrivavano richieste a raffica all'endpoint REST wp-json/batch/v1, l'indirizzo di WordPress che permette di mandare più operazioni in una sola chiamata. Venivano da una ventina di IP diversi.

Cosa abbiamo fatto

  1. Via gli intrusi. Abbiamo cancellato i quattro utenti.
  2. Controllo su tutti i database del server. Abbiamo cercato quegli utenti sito per sito. Nessun altro sito li aveva.
  3. Chiavi nuove. Le chiavi segrete salvate nel sito le abbiamo considerate compromesse e rigenerate. Se l'attaccante le aveva lette, adesso non gli servono più.
  4. IP bloccati. Gli indirizzi coinvolti non entrano più.
  5. Regole per tutto il server. Abbiamo scritto regole ModSecurity, il firewall applicativo che gira sul server, valide per tutti i siti. Bloccano la firma dell'attacco, cioè il parametro _w2s, e l'endpoint batch.

Su un singolo sito la stessa idea si esprime anche nel file .htaccess. Questa regola rifiuta con un errore 403 qualsiasi richiesta che contenga il parametro _w2s:

RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)_w2s= [NC]
RewriteRule ^ - [F,L]

Sul server l'abbiamo messa a livello di ModSecurity. Così vale anche per i siti nati dopo, e per quelli dove nessuno si ricorderebbe di toccare l'.htaccess.

La lezione: si guarda tutto il server

Davanti a un sito bucato la tentazione è sistemare quel sito e chiudere la pratica. Ma lo stesso IP aveva provato una dozzina di domini sullo stesso server, e attacchi di questo genere girano in automatico su tutto quello che trovano.

Per questo, quando troviamo un'intrusione su un sito, il controllo lo facciamo su tutti i database e tutti i siti della macchina, e le contromisure le scriviamo per tutti. Se un sito era vulnerabile, il vicino potrebbe esserlo allo stesso modo.

Cosa può fare chi ha un sito WordPress

L'ultima domanda è quella che si fa meno spesso. Se la risposta è «sistemiamo il vostro», vale la pena insistere: su un server condiviso la sicurezza di ogni sito dipende anche da quella dei vicini.

note di lavoro

Ultime dal laboratorio.

la prossima storia

Qual è la prossima storia?

Raccontateci cosa non funziona. Il primo incontro serve a capire se conviene fare qualcosa, e se la risposta è no ve lo diciamo subito.

Telefono
351 240 7196
Studio
Via Vincenzo Arangio Ruiz 83, 80122 Napoli
Il messaggio che partirà Scegliete qualcosa qui sopra…
Apri WhatsApp col messaggio pronto

Oppure chiamateci: 351 240 7196 · [email protected]