Crv Shai-Hulud inficira npm pakete: dubinska analiza incidenta u lancu opskrbe

Zadnje ažuriranje: 09/25/2025
  • Stotine npm paketa kompromitirao je samoreplicirajući crv nazvan Shai-Hulud, a GitHub je uklonio više od 500 zaraženih verzija.
  • Zlonamjerni softver krade tajne (npm tokene, GitHub PAT-ove, cloud ključeve) i ponovno objavljuje zaražene pakete koristeći prava objavljivanja žrtava.
  • Dokazi ukazuju na ciljanje Linuxa i macOS-a, zlouporabu TruffleHog-a i tijek rada GitHub Actions koji krade podatke.
  • Neposredni koraci: rotiranje tokena, revizija ovisnosti i GitHub repozitorija, provođenje MFA/2FA i traženje IoC-ova, uključujući promet bundle.js i webhook.site.

Napad crva Shai-Hulud npm

Ono što je započelo kao još jedna panika u lancu opskrbe u svijetu JavaScripta eskaliralo je u veliki incident koji utječe na npm ekosustav. Izvješća iz više izvora potvrđuju samošireći soj zlonamjernog softvera, praćen kao Shai-Hulud, koji ugrožava vjerodajnice programera, otkriva kod i ponovno objavljuje zaražene pakete kako bi infekcija nastavila rasti.

Iako se brojke razlikuju ovisno o izvoru, konsenzus je jasan: imamo posla s stotine otrovanih ispuštanja, uključujući široko korištenu biblioteku koja se preuzima milijune puta tjedno. GitHub je uklonio preko 500 kompromitiranih verzija kako bi zaustavio širenje, a sigurnosni timovi diljem svijeta potiču programere da rotiraju vjerodajnice i pretražuju svoje repozitorije i cjevovode u potrazi za tragovima upada.

Što se dogodilo i zašto je to važno

Istrage pokazuju da je operacija vjerojatno započela s prikupljanje vjerodajnica mami lažiranje npm-a, potičući održavatelje da "ažuriraju" postavke MFA. S pristupom u rukama, napadač je instalirao crva koji se pokreće nakon instalacije, traži tajne i ponovno objavljuje zaražene verzije pod identitetom žrtve - pretvarajući pouzdane održavatelje u pojačivače napada.

Šaj-Hulud kombinira dvije opasne ideje: automatizirano širenje i krađa tajniZloupotrebljava ukradene npm tokene za objavljivanje novih verzija paketa i koristi GitHub tokene i cloud ključeve (AWS, GCP, Azure) za lateralno premještanje i izvlačenje podataka. Ovo uparivanje dodatno pojačava radijus eksplozije, omogućujući da se jedan kompromis proširi na bezbroj korisnika.

Čini se da su ciljevi iskrivljeni prema Unix-sličnim sustavima. Analiza primjećuje da većina zlonamjerna logika izvršava se na Linuxu i macOS-u, na temelju provjera okruženja, iako se faza otkrivanja tajni (posebno kod TruffleHoga) može odvijati šire. Taj je fokus suzio utjecaj crva, ali je i dalje ostavio širok raspon razvojnih strojeva izloženima.

Paketi nekoliko značajnih organizacija bili su pogođeni, zajedno s popularnim modulima zajednice. U jednom poznatom primjeru, @ctrl/miniboja Paket - preuzet milijunima puta tjedno - bio je uvučen u sukob, pokazujući koliko duboko infekcija može prodrijeti u graf ovisnosti.

ilustracija kompromitiranja npm paketa

Kako crv radi (tehnički pregled)

Osnovni teret se isporučuje kao velika JavaScript datoteka, obično nazvana snop.js (preko 3 MB u promatranim uzorcima). Izvršava se putem postinstall hook-a dodanog u package.json, što znači da se zlonamjerni kod automatski pokreće odmah nakon što korisnik instalira paket iz npm-a.

Unutar bundle.js datoteke nalaze se moduli za Interakcija GitHub API-ja, cloud SDK-ovi (AWS/GCP), mrežne pomoćnike i rutine za pokretanje TruffleHoga za otkrivanje tajnih podataka. Skripta inventarizuje OS, locira npm token i provjerava valjani GitHub token; ako se ne pronađe nijedan, odustaje - u suprotnom započinje s izvlačenjem i replikacijom.

Značajna neobičnost: neki zaraženi paketi sadržavali su arhivu pod nazivom paket.tar umjesto uobičajene konvencije imenovanja, tell koji je pomogao istraživačima da označe kompromitirane artefakte. Analitičari su također primijetili varijantu koja se izvršavala kao preinstall hook; jedan od ranih navedenih slučajeva bio je ngx-bootstrap 18.1.4, koji je možda poslužio kao početno uporište u širenju.

Nakon pokretanja, zlonamjerni softver nabraja najčešće preuzete pakete programera putem npm API-ja za pretraživanje, raspakira svaku tarball datoteku, izbacuje bundle.js, ubrizgava naredbu nakon instalacije, nadograđuje verziju i ponovno objavljuje na npm-u s tokenom žrtve. To pretvara portfelj programera u sredstvo za daljnje infekcije.

Izvlačenje tajni i tijekovi rada na GitHubu

Za prikupljanje vjerodajnica, Shai-Hulud skenira npm tokene, GitHub Personal Access tokene i ključevi API-ja u oblaku (AWS, GCP, Azure). Zatim stvara javni GitHub repozitorij pod nazivom 'Shai‑Hulud' pod računom žrtve, pohranjujući podatkovnu datoteku (npr. data.json) s ukradenim tajnama - učinkovito ih izlažući svijetu.

Paralelno s tim, istraživači su primijetili lukav kut GitHub Actions: crva stvara granu pod nazivom 'shai-hulud' preko dostupnih repozitorija i šalje datoteku tijeka rada (shai‑hulud‑workflow.yml). Pokrenut prilikom slanja, tijek rada prikuplja tajne i šalje ih infrastrukturi napadača, ponekad nakon dvostruko Base64 kodiranje za prikrivanje sadržaja tijekom prijenosa.

Također postoje dokazi o migracijskom skriptu koji klonovi privatnih/internih repozitorija od organizacija kojima žrtva može pristupiti, ponovno ih smještajući na korisničkom računu kao javne mirrore. Čini se da je cilj automatizirana krađa izvornog koda iz privatnih projekata, povećavajući pritisak na pogođene organizacije.

Više izvješća bilježi artefakte AI pomoći unutar bash skripti (komentare, pa čak i emojije), što sugerira da je napadač možda koristio LLM za ubrzanje razvoja komponenti automatizacije zlonamjernog softvera.

Opseg i značajni paketi

Tijekom koordiniranih uklanjanja, GitHub je uklonio 500+ kompromitiranih verzija kako bi se zaustavilo širenje crva. Iako se točan ukupan broj i dalje mijenja, popis obuhvaća brojne ekosustave i organizacije, s naknadnim utjecajem na razvojne programere koji su ažurirali tijekom aktivnog prozora.

Među često citiranim paketima i imenskim prostorima: @ctrl/miniboja (milijuni tjednih preuzimanja), višestruki @crowdstrike/* komponente (kao što su commitlint i UI biblioteke) i širok raspon modula zajednice, uključujući ngx-bootstrap, ng2-prijenos-datoteke, ngx-toastri više. CrowdStrike je naznačio da njegova osnovna platforma nije pogođena i da ključevi su se brzo rotirali nakon otkrivanja zlonamjernih unosa u javnom registru.

  • Primjeri vezani uz val: @ctrl/tinycolor; @crowdstrike/commitlint; @crowdstrike/foundry‑js; @crowdstrike/glide‑core; ngx‑bootstrap; ng2‑file‑upload; ngx‑toastr; @nativescript‑community/*; @teselagen/*; @things‑factory/*; i drugi.
  • Istraživači su također vidjeli više zlonamjernih verzija po paketu u nekim slučajevima - vjerojatno zbog širenja crva putem nekoliko računa održavatelja unutar istog projekta.

Odgovor platforme i sigurnosne promjene

GitHubove neposredne akcije uključivale su brisanje poznatih loših paketa od npm-a i blokiranja prijenosa koji odgovaraju indikatorima kompromitiranja (IoC-ovima). Tvrtka također uvodi strože kontrole objavljivanja: obveznu 2FA za lokalno objavljivanje, kraćetrajne granularne tokene (npr. sedam dana) i širu primjenu Pouzdano izdavaštvo smanjiti oslanjanje na dugovječne tajne.

Nadolazeće promjene ukinut će naslijeđene klasične tokene i TOTP-baziranu 2FA za objavljivanje, zadano je onemogućeno objavljivanje tokenai proširiti pružatelje usluga za pouzdano objavljivanje. GitHub je signalizirao postupno uvođenje s dokumentacijom i vodičima za migraciju, prepoznajući da će neke tijekove rada trebati prilagoditi.

Timovi za obavještajne podatke o prijetnjama i odgovor na incidente u cijeloj industriji (uključujući Unit 42, Kaspersky, Trend Micro i druge) izdane smjernice i otkrića dok istovremeno dijeli IoC-ove s kolegama i savezima kako bi se ubrzala ažuriranja zaštite.

Kako smanjiti rizik upravo sada

Djelujte brzo pod pretpostavkom da je svako razvojno računalo koje je nedavno instaliralo npm pakete možda odalo tajne. Prioritet je sadrže zlouporabu vjerodajnica, zaustaviti perzistenciju i ukloniti oštećene ovisnosti iz lanaca izgradnje.

  • Odmah rotirajte npm tokene, GitHub PAT-ove/SSH ključeve i cloud vjerodajnice (AWS/GCP/Azure); smatrajte sve tajne podatke prisutne na hostovima razvojnih programera kompromitiranima.
  • Revidirajte ovisnosti putem package-lock.json/yarn.lock; uklonite ili odvojite od poznatih kompromitiranih verzija; ponovno instalirajte iz čistih izvora.
  • Provedite MFA/2FA na GitHubu i npm-u; prijeđite na pouzdano objavljivanje gdje je to moguće kako biste iz petlje izbacili dugotrajne tokene.
  • Pažljivo pregledajte GitHub za neočekivane javne repozitorije pod nazivom 'Shai‑Hulud', nepoznate grane ili tijekove rada i anomalna izvršavanja akcija.
  • Ojačajte CI/CD s RBAC-om s najmanjim privilegijama, potpisivanjem/provjerom artefakata i kontinuiranim SCA skeniranjem; tretirajte Konzumacija otvorenog koda kao upravljani rizik.

Savjeti za traženje prijetnji (provjere visokog signala)

Potražite odlazne veze prema webhook.site domene, posebno URI uočen u više izvješća. Na krajnjim točkama potražite prisutnost snop.js u privremenim ili paketnim direktorijima i za GitHub Actions datoteku pod nazivom shai-hulud-workflow.yml.

  • Mrežna telemetrija: DNS/URL zapisnici koji sadrže webhook.site; označite specifičnu putanju bb8ca5f6‑4175‑45d2‑b042‑fc9ebb8170b7 ako se vidi.
  • Telemetrija datoteka: stvaranje ili izvršavanje bundle.js; prisutnost shai‑hulud‑workflow.yml na Linux/macOS developer hostovima.
  • Telemetrija procesa: Pozivanja TruffleHoga gdje se ne očekuje (imajte na umu da legitimna upotreba može postojati u nekim organizacijama).

Pokazatelji kompromitiranja (IoC)

Tragovi datoteka i nizova uočeni tijekom istraga uključuju snop.js i shai-hulud-workflow.yml, s doslovnim nizom 'shai‑hulud' koji se pojavljuje u granama, repozitorijima i tijekovima rada.

  • Datoteke: bundle.js; shai‑hulud‑workflow.yml
  • Nizovi: shai-hulud; package.tar
  • Hashes (selected): 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09; b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777; dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c; 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db; C96FBBE010DD4C5BFB801780856EC228; 78E701F42B76CCDE3F2678E548886860
  • Mreža: https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 (uočene varijante i podputovi)

Vremenski okvir i tekuća analiza

Izvješća pripisuju početno otkriće sredini rujna 2025., s vrhunac mjera suzbijanja oko 16. i 19. rujnaGitHub i više dobavljača od tada su ažurirali zaštite, detekcije i smjernice. Očekujte daljnje retroaktivne nalaze kako organizacije završavaju preglede incidenata i proširuju popise pogođenih verzija.

Neki dokazi ukazuju na to da je incident izgrađeno na prethodnim tajnim curenjima, naglašavajući kako dugotrajni tokeni i predmemorirani podaci mogu potaknuti nove valove kompromitiranja mjesecima kasnije. To bi trebalo pojačati napore za skraćivanje životnog vijeka tokena i usvajanje modela objavljivanja koji minimizirati širenje tajni.

Ne slažu se sva izvješća o točnim ukupnim brojevima ili paketima koji su prvi u lancu, ali opća slika se poklapa: a samoreplicirajući npm crv to je pretvorilo povjerenje programera u oružje i automatizirana prava objavljivanja u brzo skaliranje - brže nego što bi mnogi timovi mogli otkriti samo ručnim pregledom.

Događaj ilustrira koliko se brzo moderni cjevovodi za izgradnju mogu pretvoriti u autoceste za zlonamjerni softver. pooštravanje autentifikacijeUklanjanjem dugovječnih tokena s puta, jačanjem CI/CD-a i agresivnim lovom na IoC-ove, organizacije mogu obuzdati izloženost već danas i znatno otežati provedbu sljedećeg vala.

Povezani postovi: