Shai-Hulud-masken infekterar npm-paket: en djupdykning i leveranskedjeincidenten

Senaste uppdateringen: 09/25/2025
Författare: C SourceTrail
  • Hundratals npm-paket komprometterades av en självreplikerande mask kallad Shai-Hulud, där GitHub tog bort över 500 kontaminerade versioner.
  • Skadlig programvara stjäl hemligheter (npm-tokens, GitHub PAT:er, molnnycklar) och publicerar om infekterade paket med hjälp av offrens publiceringsrättigheter.
  • Bevis pekar på Linux- och macOS-inriktning, missbruk av TruffleHog och ett GitHub Actions-arbetsflöde som exfiltrerar data.
  • Omedelbara steg: rotera tokens, granska beroenden och GitHub-repos, tillämpa MFA/2FA och leta efter IoC:er inklusive bundle.js och webhook.site-trafik.

Shai-Hulud npm-maskattack

Det som började som ytterligare en skräckattack i leveranskedjan i JavaScript-världen har eskalerat till en stor incident som påverkar npm-ekosystemet. Rapporter från flera källor bekräftar en självspridande skadlig kodstam, spårad som Shai-Hulud, som äventyrar utvecklarens inloggningsuppgifter, exponerar kod och publicerar om skadade paket för att hålla infektionen igång.

Även om siffrorna skiljer sig åt mellan olika källor är konsensusen tydlig: vi har att göra med hundratals förgiftade utsläpp, inklusive ett flitigt använt bibliotek som laddas ner miljontals gånger i veckan. GitHub tog bort över 500 komprometterade versioner för att stoppa spridningen, och säkerhetsteam världen över uppmanar utvecklare att rotera inloggningsuppgifter och genomsöka sina databaser och pipelines för att hitta tecken på intrång.

Vad hände och varför det är viktigt

Utredningar tyder på att operationen troligen började med lockbete för att samla in autentiseringsuppgifter, förfalska npm, vilket uppmanar utvecklare att "uppdatera" MFA-inställningar. Med åtkomst till hands distribuerade hotbildsaktören en mask som körs efter installationen, jagar efter hemligheter och publicerar om infekterade versioner under offrets identitet – vilket förvandlar betrodda utvecklare till förstärkare av attacken.

Shai-Hulud kombinerar två farliga idéer: automatiserad spridning och hemlighetsstöldDen missbrukar stulna npm-tokens för att publicera nya versioner av paket och utnyttjar GitHub-tokens och molnnycklar (AWS, GCP, Azure) för att flytta lateralt och extrahera data. Denna kombination ökar explosionsradien och låter en kompromiss sprida sig över otaliga nedströmsanvändare.

Målen verkar snedvridna mot Unix-liknande system. Analysen noterar att de flesta skadlig logik körs på Linux och macOS, baserat på miljökontroller, även om fasen med att upptäcka hemligheter (särskilt med TruffleHog) kan ske i ett bredare spektrum. Det fokuset begränsade maskens fotavtryck men lämnade fortfarande ett brett spektrum av utvecklarmaskiner exponerade.

Paket från flera framstående organisationer påverkades, tillsammans med populära communitymoduler. I ett uppmärksammat exempel, @ctrl/litenfärg paketet – som laddades ner miljontals gånger i veckan – drogs in i striden, vilket visade hur djupt infektionen kunde borra sig in i beroendegrafen.

npm-paket kompromissillustration

Hur masken fungerar (teknisk översikt)

Kärnnyttolasten levereras som en rejäl JavaScript-fil, vanligtvis kallad bundle.js (över 3 MB i observerade exempel). Den körs via en postinstall-hook som läggs till i package.json, vilket innebär att den skadliga koden körs automatiskt direkt efter att en användare installerar paketet från npm.

Inuti bundle.js finns moduler för GitHub API-interaktion, moln-SDK:er (AWS/GCP), nätverkshjälpfunktioner och rutiner för att köra TruffleHog för att upptäcka hemliga data. Skriptet inventerar operativsystemet, lokaliserar en npm-token och söker efter en giltig GitHub-token; om ingen hittas, avbryts funktionen – annars startar den exfiltrering och replikering.

En anmärkningsvärd egenhet: vissa infekterade paket innehöll ett arkiv med namnet paket.tar istället för den vanliga namngivningskonventionen, en indikator som hjälpte forskare att flagga komprometterade artefakter. Analytiker observerade också en variant som kördes som en preinstall-hook; ett tidigt fall som nämndes var ngx-bootstrap 18.1.4, vilket kan ha fungerat som ett första strandhuvud i spridningen.

När den skadliga programvaran körs listar den utvecklarens mest nedladdade paket via npm-sök-API:et, packar upp varje tar-boll, tar bort bundle.js, injicerar ett postinstall-kommando, uppgraderar versionen och publicerar om till npm med offrets token. Detta gör utvecklarens portfölj till ett verktyg för ytterligare infektioner.

Hemlighetsexfiltrering och GitHub-arbetsflöden

För insamling av autentiseringsuppgifter skannar Shai-Hulud efter npm-tokens, GitHub Personal Access Tokens och moln-API-nycklar (AWS, GCP, Azure). Sedan skapas ett offentligt GitHub-arkiv med namnet 'Shai‑Hulud' under offrets konto, och en datafil (t.ex. data.json) med de stulna hemligheterna sparas – vilket i praktiken exponerar dem för världen.

Parallellt observerade forskare en listig GitHub Actions-vinkel: masken skapar en gren med namnet 'shai-hulud' över tillgängliga databaser och skickar en arbetsflödesfil (shai-hulud-workflow.yml). Arbetsflödet, som utlöses vid push-besked, samlar in hemligheter och skickar dem till angriparens infrastruktur, ibland efter dubbel Base64-kodning att dölja innehåll under överföring.

Det finns också bevis på ett migrationsskript som klonar privata/interna repositorier från organisationer som offret har åtkomst till, och omhostar dem i användarens konto som offentliga speglar. Målet verkar vara automatiserad källkodsstöld från privata projekt, vilket ökar trycket på drabbade organisationer.

Flera rapporter noterar artefakter av AI-hjälp i bash-skripten (kommentarer och till och med emojis), vilket tyder på att angriparen kan ha använt en Jur.kand. ska accelerera utvecklingen av skadlig programvarans automatiseringskomponenter.

Omfattning och anmärkningsvärda paket

Över samordnade borttagningar tog GitHub bort 500+ komprometterade versioner för att stoppa maskens spridning. Medan den exakta totalsumman fortsätter att utvecklas, spänner listan över ett flertal ekosystem och organisationer, med nedströms påverkan på utvecklare som uppdaterade under det aktiva fönstret.

Bland ofta citerade paket och namnrymder: @ctrl/litenfärg (miljontals nedladdningar per vecka), flera @folkmassastrike/* komponenter (som commitlint och UI-bibliotek) och ett brett utbud av communitymoduler inklusive ngx-bootstrap, ng2-filuppladdning, ngx-toasteroch mer. CrowdStrike indikerade att dess kärnplattform förblev opåverkad och att nycklarna roterades snabbt efter att ha upptäckt skadliga poster i det offentliga registret.

  • Exempel kopplade till vågen: @ctrl/tinycolor; @crowdstrike/commitlint; @crowdstrike/foundry-js; @crowdstrike/glide-core; ngx-bootstrap; ng2-file-upload; ngx-toastr; @nativescript-community/*; @teselagen/*; @things-factory/*; och andra.
  • Forskarna såg också flera skadliga versioner per paket i vissa fall – troligen på grund av att masken sprids via flera ansvarigas konton inom samma projekt.

Plattformsrespons och säkerhetsändringar

GitHubs omedelbara åtgärder inkluderade rensar kända dåliga paket från npm och blockering av uppladdningar som matchar kompromissindikatorer (IoC). Företaget rullar också ut strängare publiceringskontroller: obligatorisk 2FA för lokal publicering, kortare livslängd på detaljerade tokens (t.ex. sju dagar) och bredare användning av Betrodd publicering för att minska beroendet av långlivade hemligheter.

Kommande ändringar kommer att avveckla äldre klassiska tokens och TOTP-baserad 2FA för publicering, standard att inte tillåta tokenpubliceringoch utöka leverantörer för Trusted Publishing. GitHub har signalerat en gradvis utrullning med dokumentation och migreringsguider, medvetet om att vissa arbetsflöden kommer att behöva justeras.

Hotinformations- och incidenthanteringsteam inom hela branschen (inklusive Unit 42, Kaspersky, Trend Micro med flera) har utfärdade riktlinjer och upptäckter samtidigt som de delar Ioc:er med kollegor och allianser för att påskynda skyddsuppdateringar.

Hur man minskar risken just nu

Agera snabbt under antagandet att alla utvecklarmaskiner som nyligen installerat npm-paket kan ha läckt hemligheter. Prioriteten är att innehåller missbruk av inloggningsuppgifter, stoppa persistens och eliminera skadade beroenden från byggkedjor.

  • Rotera npm-tokens, GitHub PAT:er/SSH-nycklar och molnuppgifter (AWS/GCP/Azure) omedelbart; betrakta alla hemligheter som finns på utvecklarvärdar som komprometterade.
  • Granska beroenden via package-lock.json/yarn.lock; ta bort eller fäst bort från kända komprometterade versioner; installera om från rena källor.
  • Tillämpa MFA/2FA på GitHub och npm; övergå till Trusted Publishing där det är möjligt för att ta bort långlivade tokens från loopen.
  • Granska GitHub efter oväntade publika repos med namnet 'Shai‑Hulud', okända grenar eller arbetsflöden och avvikande Actions-körningar.
  • Härda CI/CD med RBAC med lägsta privilegium, artefaktsignering/verifiering och kontinuerlig SCA-skanning; behandla konsumtion av öppen källkod som en hanterad risk.

Tips för hotjakt (kontroller av höga signaler)

Leta efter utgående anslutningar till webhook.site domäner, särskilt den URI som observerats i flera rapporter. Sök efter förekomsten av bundle.js i tillfälliga kataloger eller paketkataloger och för en GitHub Actions-fil med namnet shai-hulud-workflow.yml.

  • Nätverkstelemetri: DNS/URL-loggar som innehåller webhook.site; flagga den specifika sökvägen bb8ca5f6‑4175‑45d2‑b042‑fc9ebb8170b7 om den syns.
  • Filtelemetri: skapande eller exekvering av bundle.js; förekomsten av shai-hulud-workflow.yml på Linux/macOS-utvecklarvärdar.
  • Processtelemetri: TruffleHog-anrop där det inte förväntas (observera att legitim användning kan förekomma i vissa organisationer).

Indikatorer för kompromiss (IoCs)

Ledtrådar från fil och sträng som setts i utredningar inkluderar bundle.js och shai-hulud-workflow.yml, med den litterala strängen 'shai-hulud' som visas i grenar, repos och arbetsflöden.

  • Filer: bundle.js; shai-hulud-workflow.yml
  • Strängar: shai-hulud; package.tar
  • Hashes (selected): 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09; b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777; dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c; 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db; C96FBBE010DD4C5BFB801780856EC228; 78E701F42B76CCDE3F2678E548886860
  • Nätverk: https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 (varianter och undersökvägar observerade)

Tidslinje och pågående analys

Rapporter tillskriver den första upptäckten till mitten av september 2025, med högsta inneslutningsåtgärder runt 16–19 septemberGitHub och flera leverantörer har sedan dess uppdaterat skydd, identifieringar och riktlinjer. Förvänta dig ytterligare retroaktiva resultat när organisationer slutför incidentgranskningar och utökar listor över berörda versioner.

Vissa bevis tyder på att händelsen byggt på tidigare hemliga läckor, vilket understryker hur långlivade tokens och cachade autentiseringsuppgifter kan ge upphov till nya vågor av komprometterade data månader senare. Detta bör förstärka ansträngningarna att förkorta tokens livslängd och anta publiceringsmodeller som minimera hemlig spridning.

Inte alla rapporter är överens om exakta totalsummor eller först-i-kedjan-paket, men den allmänna bilden stämmer överens: a självreplikerande npm-mask som beväpnade utvecklarförtroende och automatiserade publiceringsrättigheter för att skala upp snabbt – snabbare än många team kunde upptäcka enbart genom manuell granskning.

Händelsen illustrerar hur snabbt moderna byggpipelines kan förvandlas till motorvägar för skadlig kod. skärpta autentiseringen, ta bort långlivade tokens från vägen, hårdgöra CI/CD och aggressivt jaga efter IoC:er, kan organisationer begränsa exponeringen idag och göra nästa våg mycket svårare att genomföra.

Relaterade inlägg: