Skip to main content
Blog
Blog Attacks

Web supply chain-aanval uitgelegd: het Polyfill.io-incident, volledige tijdlijn en lessen (2024-2026)

Een web supply chain-aanval keert vertrouwde code van derden tegen bezoekers. Zie hoe de Polyfill.io-aanval 490.000+ sites trof en wat dit leert over JavaScript-supply chain-risico.

Jun 14, 2026 11 min read
Web supply chain-aanval uitgelegd: het Polyfill.io-incident, volledige tijdlijn en lessen (2024-2026)

Kort samengevat: tijdlijn Polyfill.io-aanval

  • De koppen zeiden 100.000 sites en dat klopte niet, want dat was het standaardplafond van de PublicWWW-zoektool die onderzoekers gebruikten, en de werkelijke footprint was veel groter en zwaarder gericht op high-trust properties.
  • cside herhaalde de zoekopdracht voorbij dat plafond en vond meer dan 490.000 websites die polyfill.io laadden, en Censys telde onafhankelijk 384.773 getroffen hosts op 2 juli 2024 voordat OFAC Funnull op 29 mei 2025 sanctioneerde.
  • Als één vendor-script kwaadaardig kan worden na sinds 2015 vertrouwd te zijn, is bron-gebaseerde goedkeuring geen controle, dus monitor runtime-gedrag op elke sessie in plaats van te vertrouwen op een eenmalige akkoordverklaring.

Kort antwoord: een web supply chain-aanval compromitteert een bibliotheek of CDN-service van derden waarmee legitieme websites al vertrouwen hebben, en gebruikt dat vertrouwen vervolgens om aanvallergecontroleerde code in de browser van elke bezoeker te laten uitvoeren. De Polyfill.io-aanval is het meest gedocumenteerde voorbeeld: de vertrouwde polyfill-service werd in februari 2024 overgenomen door Funnull, werd in juni kwaadaardig en trof meer dan 490.000 websites voordat iemand het merkte. Deze pagina legt uit hoe de aanvalscategorie werkt, documenteert het Polyfill.io-incident volledig en laat zien wat je site anders moet doen.

Update 2026-07-19: een sectie toegevoegd over web supply chain-aanvalstypen en hoe de categorie werkt, plus nieuwe FAQ-vermeldingen. De kerntijdlijn en -gegevens van Polyfill.io zijn ongewijzigd.

Wat is een web supply chain-aanval?

Een web supply chain-aanval compromitteert een JavaScript-bibliotheek van derden, een CDN of een service die legitieme websites laden en vertrouwen. Omdat de pagina die code laadt alsof het zijn eigen code is, krijgt de aanvaller code-uitvoering in de browser van elke bezoeker zonder de doelsite direct aan te raken.

Een web supply chain-aanval heeft een aantal bepalende eigenschappen. De slachtoffersite heeft het script eenmalig goedgekeurd, en de aanvaller erft dat vertrouwen permanent. De payload wordt client-side uitgevoerd, nadat de server de pagina al heeft verzonden, waardoor één gecompromitteerde bibliotheek zich verspreidt naar elke site die hem laadt. WAF's, CDN-logs en server-side scanners zien geen enkele anomalie, omdat de aanval zich volledig in de browser afspeelt.

Polyfill.io is het meest gedocumenteerde geval in deze categorie. Een gratis, breed vertrouwde tool stond op honderdduizenden sites. Nieuwe eigenaren maakten er van de ene op de andere dag een aanvalsoppervlak van, en geen enkele site-eigenaar wijzigde één regel code.

Hoe web supply chain-aanvallen werken: vier belangrijkste vectoren

Web supply chain-aanvallen delen hetzelfde vertrouwensmisbruikmodel maar bereiken sites via verschillende ingangspunten.

AanvalstypeHoe het werktHoe de polyfill.io-aanval hierbij past
CDN-/domeinovernameAanvaller verkrijgt een domein dat sites al laden via scripttagsFunnull kocht polyfill.io; sites bleven het laden zonder enige codewijziging
npm-pakkethijackingEen populair pakket wordt overgenomen of een typosquat wordt gepubliceerd; CI-pipelines downloaden de kwaadaardige versie naar de buildNiet deze aanval, maar het risico is hetzelfde als de buildoutput het pakket client-side integreert
Compromittering van open source-repositoryMaintaineraccount wordt overgenomen; een kwaadaardige release wordt naar het officiële pakket gepushtDe GitHub-repository van polyfill.io wisselde samen met het domein van eigenaar
Dependency confusionEen interne pakketnaam wordt geregistreerd in het publieke register; de build download standaard de versie van de aanvallerNiet deze aanval, maar treft sites die dependencies bundelen en serveren vanuit hun eigen CDN

De rode draad: in alle vier gevallen eindigt code die jij niet hebt geschreven met uitvoering in de browsers van je gebruikers met hetzelfde vertrouwensniveau als je eigen JavaScript.

De Polyfill.io web supply chain-aanval: volledig dossier

De korte versie

  • Het domein polyfill.io werd in februari 2024 verkocht aan Funnull. Tegen juni serveerde het kwaadaardige omleidingen.
  • Er is geen incident-brede CVE; de identifier die er het dichtst bij komt, CVE-2024-38526, is afgebakend tot de documentatietool pdoc die polyfill.io laadde, niet de aanval zelf.
  • De werkelijke omvang was 490.000+ websites, niet de breed geciteerde 100.000. Dat getal was de standaard resultaatlimiet van PublicWWW. cside rapporteerde het echte getal als eerste.
  • De vastgelegde payload was een omleiding die alleen op mobiel werkte naar scam- en goksites, gebouwd om onderzoekers te ontwijken.
  • Op 2025-05-29 sanctioneerde OFAC Funnull en zijn beheerder Liu Lizhi.
  • Per 2026-05-18 bedden nog steeds meer dan 61.000 pagina's polyfill.io in. Als de jouwe daar een van is, verwijder het.

Volledige tijdlijn (2009-2026)

DatumGebeurtenis
2009-2010Remy Sharp bedenkt de term "polyfill"; het idee verspreidt zich door de webontwikkelaarscommunity
2014Andrew Betts bouwt de polyfill.io-service bij Financial Times Labs; één scripttag past polyfills aan op elke browser
2014-10-28HTML5 wordt een W3C Recommendation; evergreen, automatisch bijwerkende browsers maken polyfill.io al snel grotendeels overbodig
~2023De Financial Times draagt het project over aan zijn langdurige beheerder, Jake Champion
Feb 2024Het domein polyfill.io en de GitHub-repository worden verkocht aan Funnull, een door Chinezen geleid bedrijf
2024-02-25Andrew Betts waarschuwt publiekelijk: "Als je website polyfill.io gebruikt, verwijder het ONMIDDELLIJK"
2024-02-29Cloudflare publiceert een veilige cdnjs-mirror om het supply chain-risico te verkleinen; Fastly zet enkele dagen eerder zijn eigen mirror op
2024-06-24De Japanse onderzoeker "piyokango" signaleert het kwaadaardige gedrag
2024-06-25Sansec publiceert zijn forensische onthulling; cside publiceert dezelfde dag en rapporteert de werkelijke omvang van 490.000+
2024-06-26Cloudflare begint polyfill.io automatisch te herschrijven naar zijn mirror; Google waarschuwt getroffen adverteerders
2024-06-27Namecheap schorst het domein polyfill.io
2024-07-02Censys telt onafhankelijk 384.773 getroffen hosts
2025-05-29OFAC sanctioneert Funnull en beheerder Liu Lizhi; de FBI koppelt 548 Funnull-CNAMEs aan 332.000+ domeinen
2026-05-1861.593 pagina's bedden nog steeds polyfill.io in

Het getal van "100.000 sites" was fout

Bijna elk rapport over deze aanval gebruikte hetzelfde getal: ongeveer 100.000 sites. Dat getal is een artefact van de tool, niet een meting van de aanval.

Onderzoekers, cside inbegrepen, gebruikten PublicWWW om elke pagina te vinden die de polyfill.io-snippet bevatte. PublicWWW beperkt resultaten standaard tot 100.000. Dus elke telling die erop steunde, eindigde op "100.000+." Toen wij de zoekopdracht voorbij die limiet uitvoerden, was het echte getal meer dan 490.000 websites.

Dit doet ertoe omdat de getroffen verzameling niet willekeurig was. Ze leunde sterk naar bestemmingen met veel verkeer en veel vertrouwen: banken, overheidssites, grote uitgevers en bekende merken. "100.000" rapporteren onderschatte een aanval die bijna vijf keer zo groot was. cside bracht het werkelijke cijfer van 490.000+ naar buiten en corrigeerde daarmee het publieke verslag, en de onafhankelijke telling van Censys van 384.773 hosts op 2024-07-02 bevestigt dat de omvang ver boven de 100.000 lag.

Wat de kwaadaardige code eigenlijk deed

Het gedrag dat werd vastgelegd, gedecodeerd en gepubliceerd, was een omleiding. Sansecs forensische rapport van 2024-06-25 liet zien dat het gemanipuleerde script sommige mobiele bezoekers via een nep Google Analytics-typosquat, googie-anaiytics[.]com (let op de verwisselde letters), naar sportweddenschap- en adultsites stuurde.

De tradecraft maakte het gevaarlijk en moeilijk te betrappen. De omleiding:

  • vuurde alleen op mobiele apparaten, nooit op desktop;
  • varieerde per geografische regio en per tijdstip;
  • raakte elk apparaat of IP slechts één keer, zodat noch een slachtoffer noch een onderzoeker het bij een refresh kon reproduceren;
  • werd stil zodra het een beheerder of de aanwezigheid van webanalytics detecteerde;
  • werd geleverd met anti-reverse-engineering-pantser.

Omdat polyfill.io van nature een dynamische service was, kon de operator schone code aan de ene bezoeker en kwaadaardige code aan de volgende serveren. Subresource Integrity kon niet helpen, omdat het een hash van een vast bestand vastpint en deze service geen vast bestand had. Het script draaide first-party in de eigen origin van elke site, dus het had toegang tot de DOM, formulieren en cookies van die pagina, en het stond op de CSP-allowlists van honderdduizenden vertrouwde domeinen.

Was het alleen een omleiding? Dat is het eerlijke, onopgeloste deel. Onafhankelijke deobfuscatie van de herstelde payload vond omleidingslogica en niets anders, geen toetsaanslagvastlegging, geen diefstal van inloggegevens. Maar het ontwerp per verzoek betekent dat een variant gericht op één waardevolle bezoeker nooit in een publieke scan hoeft te verschijnen. De omleiding is wat werd betrapt. Wat er verder die maanden gedraaid kan hebben, valt op geen enkele manier te bewijzen. We hebben de capaciteitscasus in detail uiteengezet in De Polyfill.io-aanval: meer dan alleen een omleidingsaanval.

Voor het volledige incidentverslag van destijds, zie De Polyfill-aanval uitgelegd en ons rapport van dezelfde dag, Meer dan 490k websites doelwit van een web supply chain-aanval.

Is er een CVE voor de Polyfill.io-aanval?

Er is geen enkele CVE toegewezen aan het Polyfill.io-incident zelf. De identifier die er in de National Vulnerability Database het dichtst bij komt, is CVE-2024-38526, maar die is afgebakend tot pdoc, een Python-API-documentatietool die naar polyfill.io linkte in de documentatie die het genereerde (opgelost in pdoc 14.5.1). Het dekt cdn.polyfill[.]io of de bredere verzameling getroffen sites niet. Als je een kwetsbaarheidsprogramma beheert, houd dit incident dan bij via de getroffen domeinen (cdn.polyfill[.]io, plus de gerelateerde bootcdn[.]net, bootcss[.]com, staticfile[.]net, staticfile[.]org en unionadjs[.]com) in plaats van via één enkele CVE, en verwijs alleen naar CVE-2024-38526 voor pdoc-blootstelling.

De Funnull-connectie en de sancties van 2025

Polyfill.io was geen eenmalige zaak. De koper van het domein, Funnull, runde een veel grotere operatie.

Op 2025-05-29 sanctioneerde het Office of Foreign Assets Control van het Amerikaanse ministerie van Financiën Funnull Technology Inc. en zijn beheerder, Liu Lizhi. Treasury koppelde Funnulls infrastructuur aan meer dan 200 miljoen dollar aan door Amerikaanse slachtoffers gerapporteerde verliezen uit investeringsfraude, het patroon dat vaak pig butchering wordt genoemd. De aankondiging beschreef de polyfill-connectie zonder de service te noemen: in 2024 "kocht Funnull een coderepository die door webontwikkelaars werd gebruikt en wijzigde de code kwaadaardig om bezoekers van legitieme websites door te sturen naar scamwebsites en online goksites."

Dezelfde dag koppelde de FBI 548 Funnull-CNAMEs aan meer dan 332.000 domeinen. Dit is infrastructuurwitwassen: gerenommeerde cloud- en CDN-ruimte huren via illegale accounts en doorverkopen aan scammers zodat kwaadaardige sites legitiem lijken en moeilijk te verwijderen blijven. We behandelden de sancties en wat ze betekenen voor securityteams in Funnull gesanctioneerd: wat de Polyfill.io-aanval liet zien over infrastructuurwitwassen.

Wie er nog steeds blootgesteld is

Sancties verstoren een bedrijf. Ze verwijderen geen code van je site. Per 2026-05-18 vermeldde PublicWWW nog steeds 61.593 pagina's met polyfill.io, ruim een jaar nadat het domein was geschorst.

Die restanten zijn de echte les. Browserafhankelijkheden blijven lang nadat een domein is geblokkeerd ingebed, omdat mensen dingen niet verwijderen. Elk van die pagina's wijst nog steeds naar een domein dat al een keer is bewapend.

Hoe je Polyfill.io vandaag vindt en verwijdert

Begin met de pagina's die login, checkout, accountcreatie, betaling en persoonsgegevens raken.

  1. Doorzoek je broncode, tagmanagers, CMS-templates en oude snippets op polyfill.io, plus de gerelateerde domeinen bootcdn[.]net, bootcss[.]com, staticfile[.]net, staticfile[.]org en unionadjs[.]com.
  2. Verwijder de verwijzingen. Moderne browsers hebben deze polyfills niet meer nodig, dus verwijderen is veiliger dan een mirror inwisselen.
  3. Koppel elk overgebleven script van derden aan een eigenaar, een doel, een page scope en een niveau van datatoegang.
  4. Markeer scripts die meer scripts laden, URLs dynamisch bouwen of zich anders gedragen per user agent, regio of sessie.
  5. Gebruik Subresource Integrity alleen waar een script statisch is en de provider stabiele hashes ondersteunt.
  6. Versterk je Content Security Policy op gevoelige flows, beginnend in report-only-modus.
  7. Monitor wat scripts runtime daadwerkelijk doen, zodat een eigenaarswissel of een nieuwe payload zichtbaar is wanneer echte gebruikers de pagina laden.

Wat deze aanval leert over web supply chain-beveiliging

De Polyfill.io-aanval werkte omdat vertrouwen als permanent werd behandeld. Een script dat één keer was goedgekeurd, bleef draaien nadat het bedrijf erachter was veranderd en nadat de code die het serveerde was veranderd. Serverlogs zagen het niet. Vendorvragenlijsten betrapten het niet. De browser voerde het toch uit.

Die kloof, tussen vertrouwde insluiting en runtime-uitvoering, is precies wat cside is gebouwd om te dichten. cside werkt op de browserlaag, waar scripts van derden echt draaien. Het laat zien welke scripts op echte pagina's laden, wat ze aanroepen, hoe ze veranderen en of ze verdacht gedrag proberen, zoals onverwachte omleidingen of datatoegang. In het geval van Polyfill.io is die runtime-view wat een vertrouwde afhankelijkheid markeert op het moment dat die vijandig wordt.

De volgende polyfill.io staat al ergens op het web, ingebed en vertrouwd. De enige betrouwbare manier om die te betrappen, is kijken naar wat je scripts doen, niet alleen naar wie ze heeft geleverd. Beveilig je site gratis met cside en zie elk script dat je gebruikers echt laden.

Simon Wijckmans
Founder & CEO

Founder and CEO of cside. Previously a product manager on Cloudflare Page Shield (now Cloudflare Client-Side Security). Co-chair of the W3C Anti-Fraud Community Group and a Forbes 30 Under 30 honoree. Building accessible security against client-side attacks, web security is not an enterprise-only problem.

FAQ

Frequently Asked Questions

Een web supply chain-aanval vindt plaats wanneer een aanvaller een JavaScript-bibliotheek van derden, een CDN of een dienst compromitteert die legitieme websites integreren. Omdat de doelsite die code laadt met hetzelfde vertrouwen als zijn eigen assets, krijgt de aanvaller uitvoering in de browser van elke bezoeker die de pagina laadt. De aanval omzeilt server-side verdedigingen omdat hij volledig client-side wordt uitgevoerd. Veelvoorkomende vectoren zijn CDN-domeinovername, npm-pakkethijacking en compromittering van open source-repositories.

Polyfill.io was een populaire service die JavaScript-polyfills aan websites leverde via één enkele scripttag. In februari 2024 werden het domein en de bijbehorende GitHub-repository verkocht aan Funnull, een door Chinezen geleid bedrijf. Tegen juni 2024 serveerde de service kwaadaardige code die mobiele gebruikers doorstuurde naar scam- en sportweddenschapsites. Omdat het script first-party draaide op elke site die het had ingebed, kon de operator op elk moment aanpassen wat er werd geserveerd.

De meeste berichtgeving sprak van 100.000. Dat getal was fout. Het was de standaard resultaatlimiet van PublicWWW, de code-zoektool die onderzoekers gebruikten om embeds te tellen. cside voerde dezelfde zoekopdracht voorbij die limiet uit en vond meer dan 490.000 websites die het script droegen. Censys telde op 2024-07-02 onafhankelijk 384.773 getroffen hosts. De werkelijke omvang was veel groter dan het kopcijfer, en sterk gericht op sites met veel verkeer en veel vertrouwen.

De belangrijkste typen zijn: CDN-/domeinovername (een aanvaller verkrijgt een domein dat sites al laden via scripttags, de polyfill.io-methode); npm-pakkethijacking (een typosquat of accountcompromittering plaatst kwaadaardige code in een veelgebruikt pakket); compromittering van een open source-repository (een maintaineraccount wordt overgenomen en een kwaadaardige release wordt gepubliceerd); en dependency confusion (een interne pakketnaam wordt geregistreerd in het publieke register, waardoor CI/build-pipelines de versie van de aanvaller downloaden). In alle vier gevallen eindigt code die jij niet hebt geschreven met uitvoering in de browsers van je gebruikers of in je build-pipeline.

Nee. Er is geen enkele CVE voor het Polyfill.io-incident zelf. CVE-2024-38526 is de identifier die er in de National Vulnerability Database het dichtst bij komt, maar die is afgebakend tot pdoc, een Python-documentatietool die polyfill.io in de gegenereerde documentatie laadde (opgelost in pdoc 14.5.1), niet het domein cdn.polyfill[.]io of de honderdduizenden andere sites die het script hadden ingebed.

Het gedrag dat werd vastgelegd en gedecodeerd, was een omleiding. Het stuurde sommige mobiele bezoekers naar een nep Google Analytics-typosquat (googie-anaiytics[.]com) en vervolgens naar gok- en adultsites. De omleiding vuurde alleen op mobiel, varieerde per regio en tijdstip, raakte elk apparaat één keer en werd stil zodra het een beheerder of analytics detecteerde. Onafhankelijke deobfuscatie vond in het herstelde sample alleen omleidingslogica. Omdat de service per verzoek code genereerde, kon een gerichte variant op gegevensdiefstal die op specifieke bezoekers was gemikt nooit worden uitgesloten, maar er is er nooit een publiek vastgelegd.

Funnull kocht het domein polyfill.io begin 2024. Op 2025-05-29 sanctioneerde OFAC van het Amerikaanse ministerie van Financiën Funnull Technology Inc. en zijn beheerder Liu Lizhi voor het leveren van infrastructuur die was gekoppeld aan meer dan 200 miljoen dollar aan door Amerikaanse slachtoffers gerapporteerde scamverliezen. De aankondiging van Treasury beschreef hoe Funnull een coderepository kocht die door webontwikkelaars werd gebruikt en die wijzigde om bezoekers door te sturen, wat overeenkomt met het Polyfill.io-incident.

Doorzoek je broncode, tagmanagers, CMS-templates en oude snippets op polyfill.io, plus de gerelateerde domeinen bootcdn[.]net, bootcss[.]com, staticfile[.]net, staticfile[.]org en unionadjs[.]com. Verwijder alle verwijzingen. Moderne browsers hebben deze polyfills niet meer nodig, dus de veiligste oplossing is verwijdering. Monitor daarna welke scripts van derden er daadwerkelijk runtime laden, want een vertrouwd vendordomein kan van eigenaar wisselen of na goedkeuring van gedrag veranderen.

Web application firewalls, inbraakdetectiesystemen en server-side scanners inspecteren verzoeken en antwoorden op de netwerklaag. Een web supply chain-aanval wordt uitgevoerd in de browser van de bezoeker, nadat de pagina al is afgeleverd. Het kwaadaardige script laadt van wat een vertrouwd domein lijkt, wordt uitgevoerd met volledige DOM-toegang en exfiltreert gegevens of stuurt bezoekers om zonder de server te raken. Tools die alleen server-side verkeer inspecteren, zien niets. Alleen runtime browser-monitoring kan de aanval observeren terwijl die daadwerkelijk wordt uitgevoerd.

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

Wanneer schikt het om te praten?

Je hebt wat tijd op onze website doorgebracht en we leren je graag kennen. Laten we een moment inplannen om te kijken waar we kunnen helpen.

We laten je zien:

Welke scripts van derden er nu op je site draaien
Hoe je ervoor staat op PCI DSS 6.4.3 en 11.6.1
Welk deel van je verkeer uit bots en AI-agents bestaat

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