Byla zaznamenána druhá útok na balíčky v repozitáři NPM, prováděná s použitím modifikace samorozšiřujícího se červa Shai-Hulud, který vkládá škodlivý software do závislostí. V důsledku útoku byly publikovány škodlivé verze 605 balíčků, které celkem zaznamenaly více než 100 milionů stažení.
Pro provedení útoku útočníci pomocí phishingu zachytili parametry účtu správce jednoho z populárních balíčků, který se používá jako závislost u velkého počtu balíčků. Využitím zachyceného účtu útočníci publikovali verzi balíčku, do které byl přidán kód pro aktivaci červa při instalaci postiženého balíčku mezi závislostmi. Spuštěný červ vyhledává přihlašovací údaje v aktuálním prostředí a stahuje a spouští utilitu TruffleHog.
V případě nalezení tokenu pro připojení k adresáři NPM červ automaticky publikuje nové škodlivé verze pro balíčky vyvíjené v aktuálním prostředí. Tímto způsobem je po řetězci napadeno celé strom závislostí. Kromě NPM tokenu červ uchovává přístupové klíče k GitHubu a cloudovým službám AWS, Azure a GCP (Google Cloud Platform), stejně jako proměnné prostředí a další důvěrné údaje, které je schopen najít scanner TruffleHog.
Nalezené v systému důvěrné údaje jsou umístěny na GitHubu vytvořením repozitářů s chaotickými názvy (například „qzx15djl71alh6p80h“) a frází „Sha1-Hulud: The Second Coming“ v popisu, a také v zakódované podobě se zobrazují v logách GitHub Actions. V vytvářeném repozitáři je umístěn soubor ve formátu JSON (například jsonactionsSecrets.json nebo contents.json), ve kterém je obsažena řetězec se zakódovanými metodou base64 informacemi o systému, proměnnými prostředí a zachycenými údaji. Aby se informace dostaly ven ze systémů kontinuální integrace na základě GitHubu, červ vytváří handler GitHub Actions s názvem „.github/workflows/formatter_123456789.yml“ a nastavuje runner s názvem SHA1HULUD.
Rozdíly od podobného zářijového útoku spočívají v jiném způsobu vkládání škodlivého kódu do balíčku. V generovaných červem škodlivých verzích je deklarována implementace podpory JavaScriptové platformy Bun. Do souboru package.json v sekci „preinstall“, která definuje skripty spouštěné před začátkem instalace, je přidán příkaz „node setup_bun.js“.

V souboru „setup_bun.js“ se nachází kód pro vykonání obfuskovaného skriptu „bun_environment.js“, který obsahuje kód červa. Pro další šíření červ nalezne kód balíčků, provede změny v souboru package.json (zvýší číslo verze a zahrne volání setup_bun.js), přidá soubory setup_bun.js a bun_environment.js, přepracuje balíček a provede příkaz „npm publish“ pro zveřejnění nové verze.
Mezi kompromitovanými populárními balíčky: @zapier/zapier-sdk (2,8 milionu stažení týdně), @posthog/core (2,8 milionu), posthog-node (1,5 milionu), @asyncapi/specs (1,4 milionu), @postman/tunnel-agent (1,2 milionu). Předpokládá se, že útok začal kompromitací doprovodného balíčku @asyncapi/specs.
Zdroj: opennet.ru
