
Szeptember közepén egy komplex, önreplikáló ellátólánc támadást – a kutatók által Shai-Hulud néven említett kampányt – dokumentálták az npm csomagtárban. A rosszindulatú kampány által fertőzött csomagok telepítéskor átvizsgálják a fejlesztői és CI környezeteket érzékeny adatok után, például tokenek, kulcsok és jelszavak után kutatva, majd a begyűjtött információkat a támadók által irányított szerverekre vagy GitHub tárhelyekre továbbítják. A támadás különlegessége, hogy a kártevő automatikusan fertőzi tovább azokat a csomagokat, amelyek publikálására a kompromittált karbantartók jogosultak. Emiatt gyors, láncszerű terjedésre képes.
A kompromittált csomagokba beépített kód (egy bundle.js nevű komponens) a következő lépéseket hajtja végre:
- letölti és futtatja a TruffleHog típusú hitelesítő keresést végző komponenseket, majd a fájlrendszerben és környezeti változókban tokenek, kulcsok után kutat; konkrét célpontok például a GITHUB_TOKEN, NPM_TOKEN, AWS_ACCESS_KEY_ID és AWS_SECRET_ACCESS_KEY;
- validálja az npm/GitHub tokeneket (pl. whoami végponttal) és ha érvényes GitHub token áll rendelkezésre, API-hívásokkal képes új repositoriumok létrehozására vagy adat feltöltésére már meglévőkbe (a kutatások „Shai-Hulud” repo-ok megjelenését is kimutatták);
- létrehoz vagy ír be GitHub Actions workflow-okat (.github/workflows), amelyek a repositoryba bekerülve tartós, CI-szinten is kivitelezett exfiltrációs csatornát hoznak létre;
- a kód képes felhőmetadata-felfedezésre build-agentekben, ami rövid életű cloud-hitelesítőket is kiszivárogtathat.
Ezek a viselkedések együttesen azt eredményezik, hogy a fertőzés nem csupán egy helyi incidens marad: a fejlesztői gépen elindulva hozzáférést szerezhet CI folyamatokhoz és szervezeti erőforrásokhoz is.
A Socket elemzése szerint a támadó több verziót (seedereket) és legalább hét különböző worm verziót hozott létre; ezek a verziók finomhangolták a kód megbízhatóságát, a célzott alkatrészeket (pl. AWS vs. GCP), és növelték a fertőzés sebességét (például karbantartónként egy menetben vizsgált csomagok számának növelése). A kód nem szerkeszti önmagát. Különböző seeder események és hash-ek igazolják a többszörös indítást és a gyors, robbanásszerű publikálást. Ez a megoldás tette lehetővé, hogy napokon belül több száz csomag érintetté váljon.
Az rxnt-authentication rosszindulatú verzióját szeptember 14-én azonosították, és ezt tekintik a kampány kiindulópontjának (Patient Zero). A kompromittált npm-karbantartói fiók megszerzése (például tokenlopás, phishing vagy sérülékeny CI-action kihasználása) volt a láncindítás kulcsa.
A különböző elemzések szerint a kampány legalább néhány száz, egyes jelentések szerint közel 500 npm csomagot érintett. A Socket elemzése említette, hogy több CrowdStrike-scoped csomag kompromittálására is sor került. A nyilvános GitHubon megjelent „Shai-Hulud Migration” elnevezésű repo-k és a GitHubba feltöltött data.json-ok további bizonyítékot szolgáltatnak a tömeges exfiltrációra.
A teljes, folyamatosan bővülő lista elérhető a Socket és paloaltonetworks publikációiban.
Gyakorlati teendők
Függőségellenőrzés: Javasolt átnézni a projekt(ek) összes függőségét, közvetlen és tranzitív csomagokat egyaránt, és ellenőrizni, hogy nem szerepelnek-e köztük az érintett csomagok.
Hitelesítő adatok kezelése: Ha a felsorolt csomagok bármelyike jelen van fejlesztői gépeken vagy CI környezetben, az érintett tokeneket és kulcsokat azonnal cserélni kell. Célszerű rövid élettartamú tokenekre és többlépcsős hitelesítésre (2FA/MFA) váltani.
CI-ellenőrzés: Minden repository .github/workflows könyvtárát javasolt átvizsgálni; fel kell keresni az ismeretlen vagy új workflow-fájlokat, és szükség esetén el kell távolítani azokat.
Publikálási jogosultságok korlátozása: Javasolt minimalizálni, hogy ki és hogyan tud csomagot publikálni. Ajánlott dedikált CI-tokeneket használni a publikáláshoz ahelyett, hogy személyes, hosszú életű tokeneket alkalmaznánk.
Monitoring és gyors reagálás: Javasolt hitelesítő adatokat ellenőrző eszközöket telepíteni, és rendszeresen auditálni a GitHub audit naplóit (API-hívások, repository-létrehozások), hogy észlelni tudjuk a támadó helyi vagy CI-szintű tevékenységét.
A Shai-Hulud kampány alkalmasint a JavaScript/Node ökoszisztéma egyik legsúlyosabb ellátólánc-eseménye: önreplikáló komponense, CI-szintű kitartása és a sokrétű exfiltrációs csatornák miatt a hatása tág körű lehet. A megelőzés és a gyors reagálás (audit, token-rotálás, CI-ellenőrzés) kritikus és a közösség szereplőinek (npm, GitHub, csomag-karbantartók) összehangolt lépései elengedhetetlenek a teljes körű fertőzés megállításához.
