Jestli právě stavíte nebo nasazujete jakýkoliv projekt v Node.js, na chvíli zastavte buildy a zkontrolujte si závislosti. Během posledních několika hodin se naplno rozhořel jeden z nejnebezpečnějších supply chain útoků v historii JavaScriptového ekosystému.
Útok dostal název ChainDrop a nestojí za ním žádný začátečník. Všechno to začalo kompromitací GitHub účtu vývojáře odpovědného za extrémně populární balíček Keyv, který slouží pro jednoduché kešování v Node.js a má miliony stažení týdně. Jakmile se útočníci dostali k přístupovým údajům, okamžitě napadli i navázané knihovny jako cacheable, flat-cache nebo file-entry-cache.
Červ, který se šíří sám a těží z GitHub CI/CD
To nejschválnější na celém incidentu je způsob šíření. Škodlivý kód je variantou červa Mini Shai-Hulud. Spouští se automaticky při příkazu npm install skrz takzvaný preinstall hook. V té chvíli prohledá prostředí vývojáře nebo CI/CD pipeline a vysaje veškerá citlivá data, tokeny k npm, přístupy na GitHub, AWS klíče, Kubernetes tajnosti i Vault.
A tím to nekončí. Se získanými tokeny červ okamžitě vezme další balíčky, ke kterým má nakažený vývojář přístup, nakazí je a publikuje jejich nové verze do npm registru. Během pár hodin tak počet zasažených balíčků vyskočil na přes 440 knihoven a zasaženo bylo více než 2 000 konkrétních verzí. Celkový měsíční dosah těchto balíčků přesahuje dvě miliardy stažení.
Bezpečnostní analytici ze SecurityWeek navíc upozorňují na to, že útočníci zneužili přímo automatizované GitHub Actions pipelines původních správců. Díky tomu nakažené balíčky prošly s platným SLSA certifikátem původu (provenance attestations), což mnohé automatizované skenery zcela oklamalo. Pro řízení a komunikaci (C2) navíc červ využívá Ethereum blockchain (technika známá jako EtherHiding), což výrazně ztěžuje zablokování řídících serverů.
Co teď hned udělat v projektech?
Pokud držíte v CI/CD trubkách automatické zamykání závislostí nebo lokální cache, buďte velmi opatrní:
- Auditujte lockfile: Zkontrolujte, zda se vám do
package-lock.jsonneboyarn.locknedostaly nejnovější verze zasažených knihoven (keyv,cacheable,flat-cache,file-entry-cache). - Promažte cache: Vyčistěte lokální npm/yarn cache a stejně tak cache v GitHub Actions nebo GitLab CI.
- Rotace tokenů: Pokud jste v posledních 24 hodinách pouštěli
npm installs některým z napadených balíčků, berte všechny přístupové klíče (AWS, GitHub, npm) v daném prostředí za kompromitované a okamžitě je zrotujte.
Bezpečnostní týmy npm i bezpečnostních firem v tuto chvíli masivně stahují závadné verze z registru, ale červ se šíří rychleji, než stačí správci reagovat. Dejte si na to dnes při deployích sakra pozor.