← AEU Hosting Blog

Un malware WordPress furtivo nasconde un amministratore tramite un must-use plugin

2026-10-06

Un malware WordPress furtivo nasconde un amministratore tramite un must-use plugin

Un campione di malware WordPress appena documentato mostra come un must-use plugin dannoso, un file speciale che viene eseguito automaticamente a ogni richiesta WordPress e non può essere disattivato dalla normale schermata dei Plugin, possa nascondere un account amministratore non autorizzato, raccogliere password di accesso e ripristinarsi dopo l'eliminazione. Il Wordfence Threat Intelligence Team ha identificato il campione a metà giugno durante la pulizia di un sito. Il malware utilizza Etherhiding, una tecnica che nasconde la posizione dei server di comando dell'attaccante dietro uno smart contract sulla blockchain Ethereum, rendendo il canale di comando difficile da abbattere. Wordfence ha sviluppato e rilasciato una firma di rilevamento del malware dopo il suo processo di revisione di domande e risposte il 23 giugno 2026. I clienti Wordfence Premium, Wordfence Care e Wordfence Response hanno ricevuto la firma immediatamente, mentre le versioni gratuite l'hanno ricevuta dopo il consueto ritardo di 30 giorni. Wordfence afferma che il suo scanner di plugin rileva oltre il 99 percento dei campioni e degli indicatori di compromissione quando si utilizza il set di firme premium, e il suo database di threat intelligence contiene più di 4,4 milioni di campioni dannosi unici.

I must-use plugin vivono al di fuori del sistema di plugin regolare, il che li rende attraenti per gli attaccanti: vengono eseguiti prima dei plugin normali e non sono elencati nella normale schermata dei Plugin. Wordfence riferisce che questo particolare campione era mascherato da strumento automatizzato di controllo dello stato e reportistica, completo di un nome autore plausibile e un collegamento a un repository di codice. Nelle sue rilevazioni, il malware è apparso con più di 4.000 nomi di file diversi. I più comuni erano drop-in WordPress dall'aspetto legittimo come advanced-cache.php e db.php, nonché il file functions.php di un tema. Anche il nome, l'autore e i campi URI del plugin variano tra i campioni, quindi quei metadati non sono indicatori affidabili per il rilevamento.

Per evitare l'analisi e l'attenzione degli amministratori, il malware utilizza uno schema di offuscamento delle stringhe personalizzato. A differenza del comune malware WordPress che utilizza pattern riconoscibili come eval(base64_decode(...)), questo campione mantiene visibili le normali chiamate API di WordPress come add_action() e get_option() ma nasconde i valori passati ad esse, inclusi nomi di hook, nomi di opzioni, costanti e percorsi di file, dietro un decoder personalizzato. Il decoder è costruito attorno a due funzioni: una memorizza una grande tabella di ricerca di stringhe codificate, e l'altra recupera e decodifica una stringa quando necessario. Il trucco è un semplice cifrario a sostituzione: due alfabeti sono allineati carattere per carattere, e ogni carattere nella stringa codificata viene sostituito dal carattere nella stessa posizione nell'alfabeto reale. Ad esempio, la stringa codificata gw|hIW|'Il decodifica in get_option. Anche alcune istruzioni SQL sono nascoste sostituendo singoli caratteri con codici esadecimali, che PHP interpreta correttamente in fase di esecuzione, quindi le query al database vengono eseguite normalmente; la sequenza esadecimale \x55\x50\x44\x41\x54\x45 viene letta da PHP come UPDATE. In aggiunta, il malware aggancia diversi filtri e utilizza tecniche aggiuntive per tenersi fuori dalla dashboard di WordPress. Aggancia il filtro show_advanced_plugins e rimuove il plugin dannoso dall'elenco dei must-use plugin prima che WordPress renderizzi la pagina, e nasconde anche il plugin dalla normale pagina dei Plugin, dalle notifiche di aggiornamento e dalla schermata Site Health.

La persistenza inizia con l'accesso come amministratore. Il malware controlla prima se ha già creato un account amministratore leggendo un nome utente da un'opzione memorizzata sotto la chiave `bu`. Se esiste un account bersaglio, reimposta la password di quell'account e adotta il suo login, lasciando invariato il numero totale di utenti. Se non esiste alcun account, costruisce un nome utente da un pool di quattro prefissi, admin_, adm_, administrator_ e backup_, e aggiunge un suffisso casuale di sei caratteri. Quindi crea l'account con il ruolo di amministratore e una password generata casualmente, e scrive il nome utente e la password nelle proprie opzioni WordPress denominate bu e bp. Per evitare che l'account non autorizzato venga individuato, il malware aggancia tre filtri. Il primo modifica la query che WordPress esegue prima di elencare gli utenti, aggiungendo una condizione che esclude il nome utente nascosto. Il secondo applica la stessa esclusione alla REST API utilizzando il parametro login__not_in. Il terzo sottrae uno dai conteggi visualizzati per le viste Tutti e Amministratore, così i totali appaiono coerenti con l'elenco filtrato. Poiché l'account è nascosto sia dalla dashboard che dagli elenchi della REST API, Wordfence osserva che ispezionare direttamente il database è il modo affidabile per vedere l'account.

Il malware raccoglie anche le password in chiaro degli amministratori. Aggancia il filtro authenticate di WordPress, che viene attivato dopo ogni accesso e riceve l'oggetto utente autenticato, il nome utente e la password in chiaro direttamente da WordPress. Il gestore agisce solo sugli account con la capacità di amministratore, e memorizza la password in chiaro in un'opzione WordPress denominata `ic`, indicizzata per nome utente. Ciò significa che ogni accesso amministratore riuscito viene registrato nel database in chiaro, fornendo all'attaccante un flusso costante di credenziali.

L'auto-riparazione e l'auto-riattivazione rendono difficile la pulizia. Il malware registra la sua routine di ripristino su plugins_loaded con priorità 0, quindi viene eseguita presto a ogni richiesta WordPress. Un transient limita il controllo a una volta all'ora. Se il file del plugin è mancante o più piccolo di 5.000 byte, la routine recupera una copia memorizzata dall'opzione `src` e la riscrive su disco. Quindi utilizza touch() per retrodatare l'ora di modifica e chmod() per impostare la modalità del file a 0444, facendo apparire il file ripristinato vecchio e di sola lettura. Separatamente, il plugin si riscrive anche direttamente nell'opzione active_plugins, bypassando il normale processo di attivazione dei plugin di WordPress. Legge wp-config.php per ottenere il nome del database e il prefisso delle tabelle, costruisce il nome qualificato della tabella delle opzioni, e sotto una transazione bloccata si aggiunge all'opzione active_plugins. Questo meccanismo si applica alle copie collocate nella directory standard wp-content/plugins.

Infine, il malware si diffonde ad altre installazioni WordPress sullo stesso server. Cerca nel filesystem installazioni WordPress, prendendo di mira le radici comuni dei server web tra cui /home, /var/www, /var/www/vhosts, /var/www/html, /srv/www, /srv/users e /usr/local/www, nonché percorsi relativi alla propria posizione. La routine di diffusione viene eseguita al massimo una volta ogni tre giorni, controllata da un transient denominato sc_spread_interval. Legge il proprio codice sorgente e scrive una copia in ogni installazione accessibile. In un ambiente di hosting condiviso dove più siti condividono lo stesso server, una singola infezione può diffondersi silenziosamente su tutti loro.

I proprietari di siti dovrebbero considerare questo come un promemoria che gli account amministratore nascosti e le cartelle dei must-use plugin meritano una revisione manuale regolare, non solo uno sguardo alla dashboard. La firma di Wordfence è disponibile per i suoi utenti, e i suoi servizi premium includono la rimozione di malware e la risposta agli incidenti. Per la più ampia comunità WordPress, i passaggi pratici qui sotto delineano come verificare questo tipo di infezione. L'hosting WordPress gestito come AEU Hosting, che include backup automatici, rafforzamento della sicurezza e supporto esperto, offre ai proprietari di siti un percorso di ripristino più rapido quando viene trovato malware nascosto, ma il primo istinto dovrebbe comunque essere quello di verificare il database e il filesystem per qualsiasi cosa che non dovrebbe esserci.