Služba Polyfill.io byla napadena hackery

Používáte službu polyfill.io? Nedávno došlo k rozsáhlému zneužití této služby. Namísto distribuce oblíbené knihovny Polyfill.js začala služba odesílat podvržený kód, který přesměrovával návštěvníky na nežádoucí stránky.
Nálepky:
Pokud vaše webové stránky používají službu polyfill.io, okamžitě ji odstraňte a teprve poté se vraťte ke čtení tohoto článku. Nedávno totiž došlo k masivnímu zneužití této služby čínskými hackery, kteří infikovali více než 110 000 webových stránek škodlivým kódem.
Co je to polyfill?
Polyfill je kus kódu (většinou JavaScript), který implementuje funkce, které nejsou nativně podporovány ve všech webových prohlížečích. To umožňuje webovým vývojářům používat nejnovější standardy JavaScriptu nebo CSS bez nutnosti starat se o kompatibilitu napříč různými prohlížeči. Polyfill tak zajišťuje, že moderní webové aplikace mohou plně využívat pokročilé funkce a technologie, aniž by byly omezeny nedostatečnou podporou starších nebo méně používaných prohlížečů.
Nejznámější knihovnou, která dokáže automaticky detekovat prohlížeč a „dolepit” do něj nové funkcionality, je open source knihovna Polyfill.js
. Tato knihovna vznikla kolem roku 2010 v rámci širšího projektu vývojářů ve Financial Times. Služba Polyfill.io (záměrně bez odkazu) patřila k nejoblíbenějším veřejným CDN poskytujícím právě tuto knihovnu.
<script src="//cdn.polyfill.io"... // tak snadné to bylo
Podvržený kód
Jak již bylo řečeno službu Polyfill.io využívá přes 110 000 webů všemožně na světě. Začátkem tohoto roku (24. února 2024) převzala vlastnictví domény polyfill.io čínská společnost Funnull. Tehdy původní majitelé projektu varovali uživatele, aby nástroj okamžitě odstranili, protože nemohou nadále garantovat její bezpečnost. Více se dozvíte v archivu, protože původní GitHub issue bylo dávno smazáno novým majitelem.
V dubnu 2024 došlo k prvnímu incidentu, kdy byla doména Polyfill.io zneužita k distribuci malware. Hackeři změnili DNS záznamy a přesměrovali provoz cdn.polyfill.io
na servery obsahující škodlivý kód.
Chování tohoto malware, maskujícího se za Google Analytics, bylo následující:
- Malware nejprve provedl kontrolu, zda je uživatel na mobilním zařízení. Pokud ano, došlo po čase k přesměrování z původního webu na škodlivou webovou stránku (např. se sázkami na sport)
- Kód se aktivoval jen v určitý čas, aby znesnadnil automatickou detekci a odhalení.
- Malware se také pokoušel rozpoznat administrátora, případně vybrané analytické nástroje a včas se deaktivoval.
- Vše se odehrávalo prostřednictvím falešné domény
https://www.googie-anaiytics.com
Před použitím této služby začali varovat jak GitHub tak Cloudflare nebo Google a blokují je některá rozšíření jako například uBlock. Na problém upozorňuje stránka https://polykill.io
Co udělat?
Moderní prohlížeče a webové aplikace již takové knihovny obvykle nepotřebují. Pokud přesto nějakou funkci Polyfill potřebujete, doporučuji přejít na nějakou bezpečnější konkurenci například od společnosti Cloudflare nebo Fastly. Obě tyto služby provozují renomované a důvěryhodné společnosti.
Ne,nenapadli 100000 webů, to jen pošetilích 99000 webmásrů bezmyšlenkovitě includnulo 3rd party js
A přitom stačilo buď dát atribut hash nebo zkopírovat lokálně
Jak vubec došlo k dns provaru?
Je to přesně tak. Majitel útok popírá, dokonce si prý zaregistroval novou doménu, která už teda taky nefunguje.
Moc podobností jsem o příběhu útoku nenašel, takže upřímně nevím.
Ja používam NPM, a vždy keď pridávame novú knižnicu alebo aktualizujeme závislosti, tak kontrolujeme v kontajnery kde čo pristupuje, robíme si audit, a hĺbkovú analýzu. A samozrejme vždy kontrolujeme integritu. Ak to niekto nerobí, tak zrejme si o problém koleduje.
polyfill.io je služba, nejen knihovna, má různé odpovědi pro různé browsery, nejde kontrolovat integrita. Nepoužívá se přes npm. Všechno co děláte je sice fajn, ale pro polyfill.io to použít nejde/nešlo.
Bohužel nestačilo přidat hash atribut
integrity
ani zkopírovat lokálně ta knihovna nešla, protožepolyfill.io
byl/je „služba“: různým prohlížečům vrací různou odpověď podle toho co zrovna ten daný prohlížeč potřebuje polyfillnout.Takže teoreticky pro každý browser mohla být jiná odpověď a tím pádem i jiný hash. Skoro mám pocit že tuhle doménu si nevybrali náhodou :-) Sice jde/šlo tu službu self-hostovat, ale doména a GitHub účet patřil té samé firmě, tedy z bláta do louže, bylo tedy potřeba použít nějaký fork, který vznikl až tenhle rok, dlouho poté, co tu službu lidi začali používat. A to už se komplikuje natolik, že by to správně mělo znít spíš „a přitom stačilo v únoru po odhalení prodeje si toho nějak všimnout a tuhle věc přestat používat“.