Crv Shai-Hulud inficira npm pakete: detaljan pregled incidenta u lancu snabdijevanja

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

Napad npm crva Shai-Hulud

Ono što je počelo kao još jedan problem u lancu snabdijevanja u svijetu JavaScripta eskaliralo je u veliki incident koji utiče na npm ekosistem. Izvještaji iz više izvora potvrđuju samoproširujući soj zlonamjernog softvera, praćen kao Shai-Hulud , koji ugrožava akreditive programera, otkriva kod i ponovo objavljuje zaražene pakete kako bi infekcija nastavila da se širi.

Iako se brojke razlikuju po izvorima, konsenzus je jasan: imamo posla sa stotinama zaraženih izdanja , uključujući široko korištenu biblioteku koja se preuzima milionima puta sedmično. GitHub je uklonio preko 500 kompromitovanih verzija kako bi zaustavio širenje, a sigurnosni timovi širom svijeta pozivaju programere da rotiraju akreditive i pretražuju svoje repozitorije i cjevovode u potrazi za tragovima upada.

Šta se desilo i zašto je to važno

Istrage ukazuju na to da je operacija vjerovatno započela prikupljanjem akreditiva, lažiranjem npm-a , podstičući održavatelje da "ažuriraju" MFA postavke. S pristupom u rukama, napadač je instalirao crva koji se pokreće nakon instalacije, traži tajne i ponovo objavljuje zaražene verzije pod identitetom žrtve - pretvarajući pouzdane održavatelje u pojačivače napada.

Shai-Hulud kombinuje dvije opasne ideje: automatizovano širenje i krađu tajni . Zloupotrebljava ukradene npm tokene za objavljivanje novih verzija paketa i koristi GitHub tokene i cloud ključeve (AWS, GCP, Azure) za lateralno premještanje i eksfiltraciju podataka. Ovo uparivanje dodatno povećava radijus eksplozije, omogućavajući da se jedan kompromis proširi na bezbroj korisnika.

Čini se da su mete usmjerene prema Unix-sličnim sistemima. Analiza primjećuje da se većina zlonamjerne logike izvršava na Linuxu i macOS-u , na osnovu provjera okruženja, iako se faza otkrivanja tajni (posebno kod TruffleHog-a) može odvijati šire. Taj fokus je suzio utjecaj crva, ali je i dalje ostavio širok spektar mašina programera izloženim.

Paketi nekoliko značajnih organizacija su bili pogođeni, zajedno s popularnim modulima zajednice. U jednom poznatom primjeru, paket @ctrl/tinycolor – koji je preuzet milionima puta sedmično – bio je uvučen u sukob, pokazujući koliko duboko infekcija može prodrijeti u graf zavisnosti.

Ilustracija kompromitovanja npm paketa

Kako crv funkcioniše (tehnički pregled)

Osnovni korisni teret se isporučuje kao velika JavaScript datoteka, obično nazvana bundle.js (preko 3 MB u posmatranim 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 interakciju s GitHub API-jem, cloud SDK-ovi (AWS/GCP) , mrežni pomagači i rutine za pokretanje TruffleHog-a za otkrivanje tajnih podataka. Skripta inventarizuje OS, locira npm token i provjerava postoji li važeći GitHub token; ako se nijedan ne pronađe, odustaje - u suprotnom započinje s eksfiltracijom i replikacijom.

Značajna specifičnost: neki zaraženi paketi sadržavali su arhivu pod nazivom package.tar umjesto uobičajene konvencije imenovanja, što je pomoglo istraživačima da označe kompromitovane artefakte. Analitičari su također primijetili varijantu koja se izvršavala kao preinstalacijski hook; jedan od ranih navedenih slučajeva bio je ngx-bootstrap 18.1.4 , koji je možda poslužio kao početna baza u širenju.

Nakon pokretanja, zlonamjerni softver nabraja najčešće preuzimane pakete programera putem npm API-ja za pretraživanje, raspakirava svaki tarball , izbacuje bundle.js, ubrizgava postinstall naredbu, nadograđuje verziju i ponovo objavljuje na npm-u sa tokenom žrtve. Ovo pretvara portfolio programera u sredstvo za daljnje infekcije.

Eksfiltracija tajni i GitHub tokovi rada

Za prikupljanje podataka, Shai-Hulud skenira npm tokene, GitHub Personal Access tokene i ključeve cloud API-ja (AWS, GCP, Azure). Zatim kreira javni GitHub repozitorij pod nazivom 'Shai-Hulud' pod računom žrtve, pohranjujući datoteku podataka (npr. data.json) s ukradenim tajnama - efektivno ih izlažući svijetu.

Paralelno s tim, istraživači su primijetili lukav pristup GitHub Actions: crv kreira granu pod nazivom 'shai-hulud' preko dostupnih repozitorija i šalje datoteku radnog toka (shai-hulud-workflow.yml). Pokrenut prilikom slanja, radni tok prikuplja tajne i šalje ih napadačkoj infrastrukturi, ponekad nakon dvostrukog Base64 kodiranja kako bi se prikrio sadržaj tokom prenosa.

Također postoje dokazi o skripti za migraciju koja klonira privatne/interne repozitorije iz organizacija kojima žrtva može pristupiti, ponovo ih hostirajući na korisničkom računu kao javne mirrore. Cilj je, čini se, automatizirana krađa izvornog koda iz privatnih projekata, povećavajući pritisak na pogođene organizacije.

Više izvještaja bilježi artefakte AI pomoći unutar bash skripti (komentare, pa čak i emotikone), što sugerira da je napadač možda koristio LLM kako bi ubrzao razvoj automatizacijskih komponenti zlonamjernog softvera.

Opseg i značajni paketi

Kroz koordinirane akcije uklanjanja, GitHub je uklonio preko 500 kompromitovanih verzija kako bi zaustavio širenje crva. Iako se tačan broj i dalje mijenja, lista obuhvata brojne ekosisteme i organizacije, s naknadnim utjecajem na programere koji su ažurirali sistem tokom aktivnog prozora.

Među često citiranim paketima i imenskim prostorima: @ctrl/tinycolor (milioni sedmičnih preuzimanja), višestruke @crowdstrike/* komponente (kao što su commitlint i UI biblioteke) i širok spektar modula zajednice, uključujući ngx-bootstrap , ng2-file-upload , ngx-toastr i druge. CrowdStrike je naznačio da njegova osnovna platforma nije pogođena i da su ključevi odmah rotirani nakon otkrivanja zlonamjernih unosa u javnom registru.

  • Primjeri vezani za wave: @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 - vjerovatno zbog širenja crva putem nekoliko korisničkih računa unutar istog projekta.

Odgovor platforme i sigurnosne promjene

GitHub-ove neposredne akcije uključivale su čišćenje poznatih loših paketa iz npm-a i blokiranje otpremanja koja odgovaraju indikatorima kompromitovanja (IoC). Kompanija također uvodi strože kontrole objavljivanja: obaveznu 2FA za lokalno objavljivanje, granularne tokene kraćeg vijeka trajanja (npr. sedam dana) i širu primjenu pouzdanog objavljivanja kako bi se smanjilo oslanjanje na dugotrajne tajne.

Predstojeće promjene će ukinuti naslijeđene klasične tokene i TOTP-baziranu 2FA za objavljivanje, podrazumijevano će zabraniti objavljivanje tokena i proširiti pružatelje usluga za pouzdano objavljivanje. GitHub je signalizirao postepeno uvođenje s dokumentacijom i vodičima za migraciju, prepoznajući da će neki tokovi rada trebati prilagođavanje.

Timovi za obavještajne podatke o prijetnjama i odgovor na incidente širom industrije (uključujući Unit 42, Kaspersky, Trend Micro i druge) izdali su smjernice i detekcije , dijeleći IoC-ove s kolegama i savezima kako bi ubrzali ažuriranja zaštite.

Kako smanjiti rizik upravo sada

Djelujte brzo pod pretpostavkom da je svaki razvojni računar koji je nedavno instalirao npm pakete možda odao tajne. Prioritet je suzbiti zloupotrebu akreditiva , zaustaviti perzistenciju i eliminisati zaražene zavisnosti iz lanaca izgradnje.

  • Odmah rotirajte npm tokene, GitHub PAT/SSH ključeve i cloud akreditive (AWS/GCP/Azure); smatrajte sve tajne podatke prisutne na hostovima programera kompromitovanima.
  • Revidirajte zavisnosti putem package-lock.json/yarn.lock; uklonite ili odvojite od poznatih kompromitovanih verzija; ponovo instalirajte iz čistih izvora.
  • Uvedite MFA/2FA na GitHub-u i npm-u; pređ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 tokove rada i anomalna izvršavanja akcija.
  • Ojačajte CI/CD sa RBAC-om sa najmanjim privilegijama, potpisivanjem/verifikacijom 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 domenama webhook.site , posebno URI uočen u više izvještaja. Na krajnjim tačkama potražite prisustvo bundle.js u privremenim ili paketnim direktorijima i datoteku GitHub Actions 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: kreiranje ili izvršavanje bundle.js; prisustvo shai‑hulud‑workflow.yml na Linux/macOS developer hostovima.
  • Telemetrija procesa: Pozivanja TruffleHog-a gdje se ne očekuje (imajte na umu da legitimna upotreba može postojati u nekim organizacijama).

Indikatori kompromitovanja (IoC)

Tragovi u vezi s datotekama i stringovima uočeni tokom istraga uključuju bundle.js i shai-hulud-workflow.yml , s doslovnim stringom 'shai-hulud' koji se pojavljuje u granama, repozitorijima i tokovima rada.

  • Datoteke: bundle.js; shai-hulud-workflow.yml
  • Stringovi: 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 podputanja)

Vremenski okvir i tekuća analiza

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

Neki dokazi ukazuju na to da se incident nadovezao na prethodna curenja tajnih informacija , što naglašava kako dugotrajni tokeni i keširani podaci mogu potaknuti nove valove kompromitacije mjesecima kasnije. Ovo bi trebalo pojačati napore za skraćivanje životnog vijeka tokena i usvajanje modela objavljivanja koji minimiziraju širenje tajnih podataka.

Ne slažu se svi izvještaji o tačnim ukupnim brojevima ili broju paketa koji su prvi u lancu, ali opšta slika se poklapa: samoreplicirajući npm crv koji je iskoristio povjerenje programera i automatizirana prava objavljivanja kako bi se brzo skalirao - brže nego što bi mnogi timovi mogli otkriti samo ručnim pregledom.

Ovaj događaj ilustruje koliko se brzo moderni procesi izgradnje mogu pretvoriti u autoputeve za zlonamjerni softver. Pooštravanjem autentifikacije , uklanjanjem dugotrajnih tokena s puta, jačanjem CI/CD i agresivnim traženjem IoC-ova, organizacije mogu ograničiti izloženost već danas i znatno otežati izvršavanje sljedećeg vala.

Slični postovi: