Een magecart skimmer steelt kaartgegevens op je checkout zonder dat je het merkt. Zo detecteer je hem, verwijder je hem echt en voorkom je een herhaling.
Een magecart skimmer is vaak maar een paar regels JavaScript. Die regels staan op je checkout en sturen kaartgegevens van je klanten door naar een server van een ander. Je shop blijft gewoon werken. Orders komen binnen. Je merkt niets, tot je PSP, een bank of een klant aan de bel trekt.
Dit artikel gaat over die ene aanval: hoe een creditcard skimmer in je webshop komt, hoe je hem vindt en hoe je hem echt verwijdert. Heb je een breder incident en wil je weten wat er in de eerste 24 uur moet gebeuren? Lees dan Magento 2 gehackt: wat nu?. Hier gaan we dieper op de skimmer zelf.
Wat is een Magecart skimmer?
Magecart is de verzamelnaam voor groepen die betaalgegevens stelen met JavaScript in de browser van de klant. Het is client-side skimming. De aanvaller hoeft je database niet te lezen. Hij leest wat de klant intikt, op het moment dat de klant het intikt.
Twee eigenschappen maken dit lastig:
- Het is onzichtbaar voor de klant. De checkout ziet er normaal uit en werkt normaal.
- Het is onzichtbaar voor je servermonitoring. CPU, load en foutlogs blijven rustig.
Daarom blijven skimmers vaak lang zitten. Ze verdwijnen ook niet door een cache flush. De code staat ergens persistent: in een bestand, in de database of bij een externe partij.
Hoe een skimmer in je checkout komt
Er zijn vijf routes die we steeds terugzien in de bekende aanvalspatronen. De aanvaller wil één ding: eigen JavaScript laten draaien op de betaalpagina.
1. Gecompromitteerd admin-account
Een gelekt of hergebruikt wachtwoord is genoeg. Wie in de admin kan, kan scripts toevoegen aan de pagina. Geen exploit nodig. Zonder 2FA op de admin is dit de goedkoopste route.
2. Kwetsbare extensie of verouderde Magento-versie
Een kwetsbaarheid in een module of in de core geeft de aanvaller schrijfrechten op bestanden of database. Daarna plaatst hij zijn script. Tijdig patchen is je belangrijkste verdediging. Zie ook de Magento 2 security checklist.
3. Script van een derde partij
Je laadt een chat widget, tag manager of tracking pixel van een extern domein. Wordt die partij gehackt, dan draait de aanvaller code op jouw checkout. Jij hebt niets fout gedaan en toch lekt je shop.
4. Injectie in CMS-blokken en admin-velden
In Magento kun je HTML en scripts plaatsen via CMS-blokken, CMS-pagina's en de design-configuratie (head en footer). Een aanvaller met admin-toegang, of met een SQL-injectie, zet daar een script neer. Het staat dan in de database, niet in een bestand.
5. Directe wijziging in core_config_data
De design-instellingen voor extra scripts in de head en footer staan in de tabel core_config_data. Bijvoorbeeld onder de paden design/head/includes en design/footer/absolute_footer. Een file integrity check ziet dit niet. Veel schoonmaakacties missen het daardoor ook.
Detecteren: waar kijk je?
Een skimmer vind je niet met één tool. Je kijkt op vijf plekken. Doe ze alle vijf, want een aanvaller laat vaak meer dan één achterdeur achter.
| Plek | Wat je zoekt | Wat je daarvoor nodig hebt |
|---|---|---|
| Bestanden op de server | Gewijzigde of onbekende PHP- en JS-bestanden | Vergelijking met een schone release of Git-repo |
| Database | Scripts in CMS-blokken, pagina's en core_config_data | Zoekopdrachten op script-tags en externe domeinen |
| Checkout in de browser | Scripts van domeinen die je niet kent | Developer tools, tabblad Network |
| CSP-rapporten | Geblokkeerde of onverwachte bronnen | Een reporting-endpoint |
| Uitgaand verkeer | Verbindingen naar onbekende hosts | Server- of netwerklogs |
Stap 1: vergelijk bestanden met een schone bron
Heb je je code in Git en deploy je vanuit een pipeline? Dan is dit snel. Vergelijk wat op productie staat met wat je zou deployen. Elk verschil dat je niet kunt verklaren is verdacht.
Heb je geen schone bron, dan installeer je dezelfde Magento-versie en dezelfde extensies vers en vergelijk je de checksums. Let vooral op:
- bestanden in
pub/enapp/codedie niet bij een module horen; - recent gewijzigde bestanden met een datum die niet bij een deploy past;
- JS- en PHP-bestanden met onleesbare, versleutelde of sterk geobfusceerde inhoud;
- templates en layout XML die extra scripts laden.
Er bestaan ook scanners voor Magento. Gebruik ze als aanvulling. Een scanner die niets vindt bewijst niets: skimmers zijn vaak speciaal gebouwd om detectie te omzeilen.
Stap 2: scan de database
Doe dit apart van de bestanden. Zoek in:
core_config_data, op de design-paden voor head en footer;cms_blockencms_page, in de kolom met de inhoud;- eventueel extra tabellen van pagebuilder- of banner-modules.
Zoek op

