Nel settembre 2023 una sola falla in un plugin per WordPress ha aperto la porta a migliaia di infezioni. È uno dei casi più istruttivi degli ultimi anni: mostra come lavora un malware moderno, perché è così difficile accorgersene e cosa serve per ripulire davvero un sito.

Lo ricostruiamo passo per passo, con i dati pubblicati dai ricercatori di sicurezza di Sucuri. In fondo trovi i controlli da fare sul tuo sito e le regole per non correre lo stesso rischio.

Il protagonista: Balada Injector

Balada Injector è una campagna di attacchi che da anni colpisce i siti WordPress sfruttando plugin e temi non aggiornati. Secondo Sucuri, nel solo settembre 2023 il suo scanner SiteCheck ha trovato varianti di Balada Injector su oltre 17.000 siti, quasi il doppio rispetto ad agosto. Più di 9.000 di questi casi erano legati alla falla che raccontiamo qui.

La porta d’ingresso: tagDiv Composer

  • tagDiv Composer è un plugin per costruire le pagine (un page builder) distribuito insieme ad alcuni temi commerciali molto usati dai siti di notizie e dai blog.
  • La falla, identificata come CVE-2023-3169, permetteva a chiunque, senza nemmeno essere registrato, di salvare codice JavaScript nelle impostazioni del sito. È stata resa pubblica a metà settembre 2023 e corretta con la versione 4.2 del plugin.
  • Gli attacchi sono partiti subito dopo. Molti siti, però, sono rimasti scoperti a lungo: i plugin inclusi nei temi a pagamento spesso si aggiornano solo insieme al tema, e per questo restano indietro più facilmente.

Come si sviluppa un’infezione

  1. L’ingresso. Il codice malevolo viene salvato in un’impostazione del database chiamata td_live_css_local_storage, dentro un blocco che comincia con <style id="tdw-css-placeholder">. Da lì viene stampato in tutte le pagine pubbliche del sito.
  2. I visitatori. Lo script carica altro codice da domini controllati dagli attaccanti e può dirottare chi visita il sito verso pagine truffa.
  3. Gli amministratori. Se a visitare il sito è un amministratore collegato, lo script agisce con i suoi permessi e crea un nuovo account amministratore. Nelle prime ondate si chiamava “greeceman”; poi i nomi sono diventati le prime quattro lettere del dominio seguite da “mann”, per esempio “exammann” per example.com. La password viene inviata agli attaccanti.
  4. Le porte di servizio. Per sopravvivere alla pulizia, il malware installa un plugin che si nasconde dall’elenco in bacheca (i nomi trovati da Sucuri sono wp-zexit e wp-swamp), inserisce una backdoor nel file 404.php del tema e aggiunge codice in cima ad alcuni file JavaScript di WordPress, come jquery-migrate.min.js.

Il risultato è un sito che a vista sembra normale, ma che lavora per qualcun altro. E cancellare solo la prima iniezione non basta: le porte di servizio rimettono tutto com’era.

Come accorgersene

Di solito non ci sono segnali evidenti. Questi controlli richiedono pochi minuti:

  • Guarda il codice delle pagine. Apri il sito da una finestra privata, premi Ctrl+U (su Mac Cmd+Opzione+U) e cerca script che non riconosci, soprattutto quelli offuscati, cioè scritti apposta per essere illeggibili, o con indirizzi strani.
  • Controlla gli utenti. Cerca amministratori che non hai creato, in particolare con i nomi visti sopra.
  • Guarda i plugin dal server, via FTP o dal pannello dell’hosting, e non solo dalla bacheca: alcuni plugin malevoli lì non compaiono.
  • Usa uno scanner online come SiteCheck di Sucuri per una prima diagnosi.
  • Leggi i log del server, se puoi: secondo Sucuri, richieste POST che ricevono una risposta 404 possono indicare che qualcuno sta usando la backdoor.

Come si ripulisce, passo per passo

Una regola prima di cominciare: finché lo script è attivo, ogni visita al sito da amministratore può reinfettarlo. Per questo la rimozione del malware va fatta per prima, e nel frattempo il sito non va navigato da collegati.

  1. Backup completo prima di toccare qualsiasi cosa. File e database, salvati fuori dalla cartella pubblica del sito. Anche una copia del sito infetto serve: per tornare indietro se qualcosa va storto e per capire cosa è successo.
  2. Rimuovi l’iniezione dal database. Trova il codice nell’impostazione td_live_css_local_storage, salvane una copia a parte e cancellalo.
  3. Elimina gli amministratori sconosciuti.
  4. Cerca plugin nascosti e backdoor: la cartella dei plugin sul server, il file 404.php del tema, i file JavaScript di WordPress modificati. Verifica che i file di WordPress siano quelli originali, per esempio con il comando wp core verify-checksums di WP-CLI.
  5. Svuota la cache. È il passaggio che si dimentica più spesso: le pagine salvate in cache continuano a servire il codice infetto anche dopo la pulizia.
  6. Controlla gli altri siti sullo stesso hosting. Quando più siti condividono lo spazio, un’infezione può spostarsi dall’uno all’altro.
  7. Togli la causa, non solo il sintomo. Aggiorna tagDiv Composer almeno alla versione 4.2 oppure, se non ti serve più, disattivalo ed eliminalo insieme al tema che lo richiede. Poi aggiorna WordPress, i temi e tutti i plugin.
  8. Cambia tutte le password (WordPress, pannello dell’hosting, database) e rigenera le chiavi di sicurezza di WordPress, così le sessioni eventualmente rubate smettono di funzionare.

Perché il malware punta agli amministratori

Questi script si attivano nel browser di chi visita il sito. Se il visitatore è un amministratore collegato, il codice può agire con i suoi permessi: creare utenti, installare plugin, modificare file. Per questo Sucuri consiglia di non navigare il proprio sito mentre si è collegati come amministratore: per vederlo come un lettore usa una finestra privata o un altro browser.

Le regole per non correre lo stesso rischio

  • Aggiorna subito WordPress, temi e plugin, soprattutto quando l’aggiornamento corregge una falla di sicurezza. Vale doppio per i plugin inclusi nei temi a pagamento, che non sempre si aggiornano dalla bacheca.
  • Meno plugin possibile. Ogni plugin è codice in più da tenere aggiornato. Quelli che non usi vanno disattivati e cancellati.
  • Solo fonti ufficiali. Temi e plugin “premium” scaricati gratis da siti non ufficiali sono una delle porte d’ingresso più comuni.
  • Backup automatici fuori dal server, e ogni tanto prova a ripristinarne uno.
  • Disattiva l’editor di file in bacheca aggiungendo define('DISALLOW_FILE_EDIT', true); al file wp-config.php: se qualcuno ruba un accesso, non può modificare il codice da lì.
  • Un account editor per scrivere. Usa l’account amministratore solo quando serve davvero.

Pensi che il tuo sito sia infetto?

  1. Non cancellare niente di getto: prima fai un backup, anche del sito infetto.
  2. Passa il sito in uno scanner online per una prima diagnosi.
  3. Se il sito usa tagDiv Composer, controlla subito la versione del plugin e l’impostazione td_live_css_local_storage nel database.
  4. Controlla utenti amministratori, plugin installati e file modificati di recente.
  5. Dopo la pulizia aggiorna tutto, svuota la cache e cambia tutte le password.

Se non te la senti di mettere mano al database, fatti aiutare da chi lo fa di mestiere: un intervento sbagliato può fare più danni dell’infezione.

Fonti

Archiviato in Virus Wordpress
Scritto da Davide Balzano
Tutti i suoi articoli →

Commenti

I commenti sono gestiti da Disqus: aprendoli accetti che vengano caricati i suoi contenuti e cookie.