Vai al contenuto
🛡 Protezione WordPress tramite pentest: una guida all'hardening

🛡 Protezione WordPress tramite pentest: una guida all'hardening

Un sito su WordPress funziona per un mese, sei mesi, un anno, poi arriva una mail dal provider: «Dal tuo account viene inviato spam». Oppure chiama un cliente nel panico perché la home page ora reindirizza a un dominio di phishing.

Le checklist di sicurezza standard aiutano a coprire le basi: aggiornamenti, password robuste, backup. Ma non mostrano cosa si romperà per primo nella tua configurazione specifica fatta di tre dozzine di plugin, un tema personalizzato e modifiche nel functions.php.

Un penetration test su un sito WordPress non è solo «un altro controllo». È un attacco deliberato al tuo sito, seguito da un elenco documentato di vulnerabilità, classificate in base al pericolo reale. E, cosa più importante, con passi concreti per chiudere le falle in modo che non si riaprano dopo l'aggiornamento successivo.

persona in camicia nera a maniche lunghe che usa un MacBook Pro

💡 Panoramica rapida:

  • Andare oltre la checklist di sicurezza: un pentest guarda il sito con gli occhi di un attaccante
  • Trovare le tipiche vulnerabilità WordPress: dai log di debug in produzione al XSS tramite form
  • Percorrere un ciclo completo di hardening: perimetro, correzione, quick win, retest, proxy WAF
  • Preparare il sito correttamente per un pentest: staging, ruoli di test, logging

Perché un pentest è più efficace di una checklist di sicurezza

Una checklist è «fai e dimentica». XML-RPC disabilitato, limite ai tentativi di login impostato, prefisso delle tabelle cambiato. Caselle spuntate, senso di appagamento presente.

Un pentest ribalta la prospettiva. Guarda il sito con gli occhi di un attaccante e spesso trova cose che non compaiono nelle checklist. Ad esempio, un endpoint REST personalizzato che lo sviluppatore del tema ha lasciato senza controlli sui permessi. Oppure due plugin per form installati «per sicurezza», di cui uno non viene aggiornato da due anni e si trascina dietro una libreria vulnerabile.

Un pentest professionale è una procedura pianificata con un perimetro definito, risultati documentati e raccomandazioni prioritarie. Ciò che lo distingue da uno scanner automatico è la profondità: uno scanner automatico rileva le firme delle vulnerabilità note, ma resta cieco di fronte a logiche di ruolo personalizzate, a un tema specifico o a route REST scritte a mano.

Il risultato di un pentest non è solo un elenco di «questo è un problema». È una prova: ecco la richiesta che abbiamo inviato, ecco la risposta che abbiamo ottenuto, ecco perché è pericoloso ed ecco come risolverlo. Per un imprenditore è un argomento spendibile in una discussione sul budget; per uno sviluppatore, una mappa operativa già pronta.

Tre vulnerabilità tipiche di WordPress: come le individua un pentest

I problemi di WordPress sono raramente esotici. In anni di amministrazione di siti vediamo schemi ricorrenti: cambiano i nomi di plugin e temi, ma le classi di vulnerabilità restano le stesse. Di seguito tre esempi che un pentest porta alla luce in modo sistematico.

Esempio 1: hosting e configurazione di WordPress insicuri

La cattiva configurazione della sicurezza è uno dei problemi più diffusi. Funzionalità extra sono abilitate, gli account predefiniti non sono stati rinominati e i messaggi di errore riversano dettagli sull'ambiente direttamente nel browser. Alcune questioni stanno sul lato del provider, ma WordPress permette di chiuderle.

Cosa vede un penetration tester:

  • Elenco delle directory abilitato: chiunque può sfogliare il contenuto di /wp-content/uploads/
  • Informazioni di debug nel frontend: WP_DEBUG impostato a true in produzione
  • Pannello di amministrazione senza protezione aggiuntiva: accesso diretto a /wp-login.php senza restrizioni

L'output di debug nel browser rivela percorsi dei file, versioni dei componenti e struttura del database. Un penetration tester usa questi dati per mappare i vettori di attacco.

Disabilitare WP_DEBUG nel wp-config.php è la prima e più rapida correzione: una costante rimuove tutte le informazioni di debug dall'accesso pubblico.

La soluzione, disabilitare il debug in produzione:

Chiudere l'elenco delle directory a livello di server o tramite .htaccess.

Il rate limiting su /wp-login.php blocca gli attacchi brute force prima ancora che raggiungano WordPress.

Regole di protezione lato server (regole WAF a livello di host o CDN). Il plugin Solid Security (ex iThemes Security) copre molti di questi vettori in modo centralizzato; la versione gratuita è sufficiente per una protezione di base.

Esempio 2: zoo di plugin e permessi gonfiati

Aggiornamenti regolari di core, temi e plugin sono le basi che ogni guida alla sicurezza non smette mai di ricordare. Nella pratica, però, ciò che conta più del fatto che un singolo plugin sia aggiornato è la configurazione complessiva dell'installazione.

L'approccio di hardening in questo caso è sistematico:

  • Costruire un inventario completo di plugin e temi
  • Rimuovere tutto ciò che non è in uso
  • Assegnare una chiara responsabilità per gli aggiornamenti

Ruoli e permessi seguono rigorosamente il principio del minimo privilegio. Un editor non ha bisogno di accedere alle impostazioni dei plugin, e uno specialista SEO non ha bisogno di accedere all'installazione dei temi.

Caso reale: un sito usa due plugin per i form «per ragioni storiche».

Un penetration test mostra che solo uno è effettivamente in uso. Il secondo è lì come peso morto, ma i suoi endpoint sono esposti e richiamano una versione vulnerabile di una libreria. L'hardening qui non consiste nell'aggiungere un ulteriore strato di protezione sopra, ma semplicemente nel rimuovere il plugin inutilizzato. Audit periodici dei plugin e uno sguardo critico su ogni componente installato sono parte integrante del ciclo di sicurezza, non un'azione una tantum.

Esempio 3: injection e XSS tramite il front end

OWASP mette le injection in cima alla sua classifica delle minacce. In WordPress, si verificano ovunque uno sviluppatore tratti l'input utente come «sicuro per impostazione predefinita»:

  • Form di contatto e moduli di iscrizione alla newsletter
  • Ricerca e filtri in negozi e cataloghi
  • Commenti e campi personalizzati

Protezione di base: quattro regole che chiudono la maggior parte dei vettori:

  • Validare l'input lato server (mai fidarsi del client)
  • Effettuare l'escape dell'output in base al contesto (HTML, JS, SQL, URL)
  • Mantenere i plugin aggiornati
  • Revisionare periodicamente il codice dei temi personalizzati

Un penetration test fornisce la cosa principale: una prova riproducibile. Una richiesta specifica, una risposta specifica del sistema: questo è un argomento che non richiede di spiegare i dettagli tecnici dell'attacco a un manager o a un cliente.

Processo di hardening WordPress: dal report alla protezione

L'errore più comune dopo un pentest è correre a sistemare tutto in una volta. Serve invece un processo che bilanci priorità tecnica, impegno e tenuta delle correzioni dopo gli aggiornamenti.

Step 1: definire ambito e priorità

Non tutti i rilievi in un report sono critici. Un buon report di pentest include severità, URL interessati e una descrizione del danno potenziale. Questo consente di stabilire un ordine:

  • Vulnerabilità sfruttabili da remoto senza autenticazione (priorità critica)
  • Vulnerabilità nell'area autenticata con vettore d'attacco semplice
  • Errori di configurazione e difesa in profondità (priorità bassa, ma numerosi)

Step 2: implementare le correzioni in modo che sopravvivano agli aggiornamenti

Un classico punto dolente: applichi una correzione, una settimana dopo arriva un aggiornamento automatico del tema e si rompe tutto. Il punto in cui collochi la correzione ne determina la durabilità:

  • Livello server o hosting: header, TLS, limiti di velocità, permessi dei file. Il più affidabile, vive indipendentemente da WordPress.
  • Tema child o hook puliti: modifiche a template e funzionalità. Nessuna modifica diretta al tema padre.
  • Sostituire un plugin invece di un "plugin cerotto": se un componente è problematico per architettura, è più facile sostituirlo con un'alternativa moderna che rattopparlo all'infinito.

La documentazione sull'hardening di WordPress descrive i punti tipici e sottolinea l'importanza delle pratiche operative: aggiornamenti, controllo accessi, auditing. A volte sostituire un paio di componenti obsoleti cambia radicalmente il punteggio di sicurezza di un sito.

Step 3: partire dalle quick win

Quick win che producono un effetto sproporzionatamente grande:

  • Ridurre il numero di account amministratore, attivare l'autenticazione a due fattori, impostare una lunghezza minima della password
  • Verificare XML-RPC: se non serve (nessuna app o connessione Jetpack), disabilitarlo. Se serve, proteggerlo tramite Solid Security
  • Impostare i permessi di file e directory: il server web deve scrivere solo nelle cartelle dove è realmente necessario. Discuterne separatamente con gli hoster, non tutte le maschere dei file sono ugualmente sicure quando si cambia
  • Testare non solo la creazione del backup ma anche il ripristino da esso. Un backup senza un restore verificato è falsa tranquillità

Step 4: il retest è obbligatorio

Una correzione si considera chiusa solo quando è verificata. Un pentest ripetuto controlla: se la vulnerabilità è realmente eliminata e se sono comparsi effetti collaterali. Questo è critico per misure come Content Security Policy o header HTTP restrittivi, che rompono il frontend al minimo errore di configurazione.

Step 5: considerare un proxy WAF

Il concetto di firewall proxy è efficace e collaudato nel tempo: ogni richiesta al sito passa prima attraverso un livello proxy, dove viene analizzata e filtrata, e solo dopo raggiunge il server web. Questo blocca un'enorme quantità di attacchi prima ancora che contattino WordPress. Sucuri, un'opzione per questo tipo di protezione. Alternative: Cloudflare WAF, Wordfence Premium con protezione endpoint.

Come rendere un pentest più veloce ed efficace

Un pentest dà il massimo valore quando le condizioni sono preparate in anticipo. Il Penetration Testing Execution Standard evidenzia la fase di Pre-Engagement, il momento in cui le parti concordano obiettivi, regole e confini del test.

Cosa significa per te come proprietario di un sito WordPress:

  • Ambiente di staging invece della produzione: riduce il rischio per gli utenti reali e consente test più aggressivi. Se lo staging non è disponibile, almeno un clone su un sottodominio con accesso limitato via IP.
  • Account di test con ruoli diversi: come minimo editor e amministratore. Senza questi, il test delle autorizzazioni è inutile.
  • Logging abilitato: eventi di login, modifiche ai file, installazioni di plugin. Queste registrazioni sono preziose durante l'analisi degli incidenti.
  • Coordinamento con servizi di terze parti: se il sito si integra con un gateway di pagamento, CRM o sistemi di tracking, definire in anticipo cosa può e non può essere toccato durante il test.

Prossimi passi dopo un pentest

1. Costruire un inventario di plugin e temi, rimuovere quelli inutilizzati, impostare un ritmo di aggiornamento

2. Rivedere ruoli e account amministratore, permessi rigorosamente sul principio del minimo privilegio

3. Predisporre un ambiente di staging e un processo di deployment delle correzioni che sopravviva agli aggiornamenti

4. Preparare screenshot per la documentazione: panoramica del report, esempio di richiesta con risposta, confronto degli header o della configurazione prima/dopo.

5. Pianificare un retest con una data specifica, l'hardening non deve fermarsi al presupposto "abbiamo sistemato tutto".

Questo approccio trasforma un pentest da un "controllo buchi" una tantum in un ciclo continuo: testa, correggi, verifica, ripeti. Nel tempo, il sito diventa non solo "coperto" ma realmente resiliente agli attacchi, e tu lo sai non perché lo dice una checklist, ma perché la verifica lo ha confermato.

⁉️🤔 Domande frequenti

Serve un pentest se uso Solid Security e faccio backup?

I plugin di sicurezza coprono i vettori d'attacco noti ma non vedono le vulnerabilità personalizzate: un endpoint REST scritto in proprio senza controlli di permesso, la logica di redirect in un tema o un buco in un plugin abbandonato che risulta "attivo". Un pentest trova esattamente questi punti d'ingresso non standard. I backup non prevengono una violazione, aiutano a recuperare dopo. Sono livelli di protezione diversi e si completano a vicenda.

In cosa un pentest è diverso da uno scanner automatico come WPScan?

WPScan controlla un sito rispetto a un database di firme: guarda le versioni di core, plugin e temi e le confronta con i CVE noti. È utile per un controllo di base, ma uno scanner non capisce il contesto. Non vede che un modulo di iscrizione perde dati senza validazione o che un ruolo personalizzato "store manager" ha accidentalmente ottenuto i diritti di editor dei temi. Un pentester (o pentest manuale) analizza la logica applicativa, non solo i numeri di versione.

Ogni quanto va fatto un pentest?

Dopo ogni cambiamento significativo: un aggiornamento maggiore del core, un cambio di tema, l'aggiunta di un nuovo plugin critico (pagamenti, membership, campi personalizzati). Per siti con un costo di fermo elevato (e-commerce, portali membership), un pentest programmato ogni 6-12 mesi è giustificato. Idealmente, il pentest diventa parte del ciclo di sviluppo: rilascia modifiche → testa in staging → correggi → in produzione.

Posso fare un pentest da solo, senza ingaggiare specialisti?

I passaggi di base sono accessibili: eseguire WPScan, controllare gli header di sicurezza tramite Security Headers, percorrere manualmente la OWASP Top 10 per applicazioni web. Ma un pentest completo richiede esperienza: capire come combinare i vettori d'attacco, come leggere le risposte del server e come distinguere un falso positivo da un buco reale. Per un sito commerciale, è più saggio commissionare un pentest a un team professionale e usare i propri controlli come minimo igienico tra un audit e l'altro.

Cosa fare se un pentest ha trovato decine di vulnerabilità ma il budget per la remediation è limitato?

Dai priorità in modo spietato. Primo livello: vulnerabilità sfruttabili senza autenticazione (accesso remoto ai dati, RCE). Secondo: problemi nell'area autenticata che consentono escalation di privilegi. Terzo: difesa in profondità (logging, header, porte aperte non necessarie). Le quick win dello step 3 qui sopra chiudono molte voci con sforzo minimo. Il resto va in un piano con una scadenza, non in un backlog senza.

Mettere in sicurezza WordPress dopo un penetration test: da dove iniziare oggi

Un penetration test non rende un sito sicuro. Rende visibili le falle che già esistono nel sito. Il sito diventa sicuro solo dopo aver chiuso quelle falle e verificato che non si siano riaperte.

Se il budget per un penetration test professionale non è ancora stato approvato, iniziate con ciò che è disponibile da subito:

  • Lanciate WPScan gratuito contro il vostro sito (almeno in modalità passiva --no-banner --enumerate vp)
  • Applicate i quick win del punto 3; richiede un'ora e chiude i vettori d'attacco più comuni
  • Costruite un inventario di tutto ciò che è installato nel pannello di amministrazione e rimuovete tutto quello che non usate da più di un mese

Quando sarà il momento di un penetration test completo, sarete già pronti: l'ambiente di staging è attivo, i plugin sono sotto controllo, i ruoli sono stati ripuliti. Il penetration tester non spenderà il vostro budget per enumerare ciò che già conoscete, ma si concentrerà sulle vulnerabilità reali. Ed è esattamente per questo che lo avete ingaggiato.