WordPress malware torna sotto i riflettori con una campagna piuttosto ingegnosa, capace di nascondere i propri comandi all’interno dei profili Steam. Quasi 2.000 siti basati sulla piattaforma di blogging più diffusa al mondo sono finiti nel mirino di un attacco che sfrutta i commenti pubblici della community di Valve per occultare i dati di comando e controllo, evitando così di dover gestire un’infrastruttura separata e rendendo molto più difficile il lavoro dei sistemi di rilevamento tradizionali.
Il meccanismo è tanto semplice quanto efficace. Chi ha orchestrato l’operazione ha usato caratteri Unicode invisibili per codificare un payload, che poi serve a costruire l’indirizzo di uno script dannoso. In pratica, sfruttando una piattaforma legittima e popolarissima come Steam, l’attaccante riesce a mimetizzarsi nel traffico ordinario. La campagna è stata individuata per la prima volta a luglio 2025, e da allora gli ingegneri di sicurezza hanno rintracciato il malware su circa 1.980 siti WordPress.
Come funziona l’infezione e il ruolo dei profili Steam
Resta poco chiaro il modo esatto in cui gli aggressori riescono a violare i siti, ma le ipotesi sul tavolo sono diverse. Si va dalle credenziali di amministrazione rubate agli accessi FTP o SFTP compromessi, fino allo sfruttamento di un tema o plugin vulnerabile di WordPress, senza escludere un attacco alla catena di fornitura. Insomma, le porte d’ingresso non mancano.
Una volta dentro, il malware di primo stadio entra in azione durante il caricamento delle pagine. Si collega a specifici profili Steam ed estrae il testo da commenti che, a una prima occhiata, sembrano del tutto innocui. Il trucco sta proprio lì: dentro quel testo si annidano caratteri Unicode nascosti che custodiscono il payload, a volte camuffato persino come ASCII art.
I ricercatori hanno individuato sei caratteri invisibili usati per la codifica: lo zero-width non-joiner (U+200C), lo zero–width joiner (U+200D), il function application (U+2061), l’invisible times (U+2062), l’invisible separator (U+2063) e l’invisible plus (U+2064). Il decoder ignora qualsiasi carattere visibile e associa quelli invisibili a un numero corrispondente, per poi convertirli in binario e ricostruire i byte. I caratteri visibili, quindi, fanno solo da copertura. Sono quelli invisibili a trasportare il payload vero e proprio.
Lo script malevolo, il backdoor e come difendersi
Una volta decodificato, il payload costruisce un indirizzo che punta al dominio hello-mywordl[.]info, da cui viene servito codice JavaScript iniettato in ogni pagina frontend del sito. Per non destare sospetti, il file malevolo si traveste da libreria legittima, con nomi come asahi-jquery-min-bundle e lodash.core.min.js. L’ultima fase prevede l’installazione di un backdoor che risponde a richieste POST costruite ad hoc, contenenti un cookie di autenticazione specifico. Se è presente il cookie “tEcaKKXEsb”, il backdoor accetta codice PHP codificato in base64 tramite parametro POST.
Il malware mette in campo diverse tecniche di evasione: stringhe offuscate con escape ottali ed esadecimali, nomi di funzione casuali, finto codice di logging disattivato e l’uso delle API standard di WordPress per confondersi con l’attività ordinaria. Tutto pensato per passare inosservato il più a lungo possibile.
Chi gestisce un sito può proteggersi controllando alcuni segnali precisi. Tra questi: riferimenti a URL della community di Steam, iniezioni sospette di JavaScript esterno, connessioni in uscita dai server WordPress verso Steam e script che si caricano da domini come hello-mywordl[.]info. Altri indizi da tenere d’occhio sono i caratteri Unicode invisibili, voci sospette nella cache transient, la verifica SSL disabilitata nelle richieste cURL e le richieste POST che contengono il cookie di autenticazione del malware o il parametro newcode.