Shai hulud - npm paketi - napad na lanac snabdijevanja

Shai-Hulud: Objašnjenje crva npm paketa

TL; DR

Istraživači su 14. septembra 2025. godine identifikovali Shai Hulud, crv koji se sam replicira skriven unutra npm paketi, pretvarajući rutinsko ažuriranje zavisnosti u potpuno napad na lanac snabdevanjaPrvi put uočen u @ctrl/miniboja Paket koji je kreirao Daniel dos Santos Pereira, Shai-Hulud prikuplja tajne, izvlači ih kroz GitHub repozitorije i radne procese te se ponovo objavljuje u registru koristeći ukradene pristupne podatke. U roku od nekoliko dana, broj zaraženih paketa skočio je s desetina na stotine, što potvrđuje da Šajhulud nije samo još jedan trojanac, već crv dizajniran da se automatski širi kroz npm ekosistem.

Uticaj: Svaki programer ili CI runner koji instalira javne npm pakete je u opasnosti.

Neposredne radnje: blokirati poznate verzije, prebaciti se na instalacije samo sa lockfile datotekama, rotirati npm i GitHub tokene, revidirati radne procese i pratiti indikatore kompromitovanja (IoC).

Šta se dogodilo?

The Shai-Hulud napad na lanac snabdijevanja u npm paketima je jedan od najrazornijih incidenata u novijoj povijesti. Za razliku od izoliranih trojanaca, ovaj crv miješa krađa akreditiva, automatizovana eksfiltracija i samoreplikacijaPosljedično, vremenski okvir zaraze se smanjio sa nekoliko sedmica na samo nekoliko sati.

Za DevOps timove, lekcija je jasna: ako svaka instalacija može izvršavati kod, onda je svako ažuriranje zavisnosti potencijalna tačka proboja.

Mogući početni vektor i ciljane akreditacije

Rana analiza ukazuje na to da je napad vjerovatno započeo sa ukradene akreditiveNa primjer, phishing kampanje lažiranja npm-a login ili su MFA upiti možda uhvatili tokene programera. Nakon što su napadači stekli taj prvi uporište, crv se širio ugrađujući se u npm pakete i krađom više tajni iz:

  • npm konfiguracijske datoteke kao .npmrc, koji često sadrže tokene za objavljivanje.
  • Varijable okoline i konfiguracije sa GitHub PAT-ovima i CI/CD tajne.
  • Krajnje tačke metapodataka u oblaku (AWS, GCP, Azure) što daje kratkotrajne akreditacije za lateralno kretanje.

Stoga je krađa akreditiva postala odskočna daska. Sa važećim npm tokenima i GitHub tajnama, Shai-Hulud je mogao samostalno replicirati na više paketa i repozitorija bez dodatnog ljudskog napora.

Utjecaj napada Shai-Huluda na lanac snabdijevanja na rukovodstvo

Shai-Hulud je i danas aktivan. Ovaj crv ubrzava vremenski okvir uticaja. Ono što je nekada trajalo sedmicama kod trojanca, sada se odvija za nekoliko sati. Kao rezultat toga, širenje je brže i teže ga je obuzdati. Napreduje putem:

  • Krađa npm tokena za objavljivanje i GitHub tajni.
  • Ponovno objavljivanje sebe u drugim npm paketima.
  • Dodavanje zlonamjernih GitHub Actions radnih procesa za trajnost.

Ko je pogođen:

Svaki tim koji instalira javne npm pakete je izložen riziku. Štaviše, programeri sa keširanim npm ili GitHub tokenima suočavaju se sa visokim rizikom. CI pokretači koji koriste široko dostupne tajne su također ranjivi.

Poslovni rizik

Utjecaj na poslovanje brzo raste. Ukradeni tokeni mogu dovesti do preuzimanja računa, otmice paketa, pa čak i zloupotrebe oblaka. Osim toga, upornost u GitHub radnim procesima otežava čišćenje. StogaTimovi moraju tretirati Shai-Hulud kao tekući incident, a ne kao završen.

Kako Shai-Hulud napad na lanac snabdijevanja funkcioniše u npm paketima

Ciljevi i motiv napadača

Kampanja je optimizirana za tri stvari:

  • Prvi cilj je krađu akreditiva u velikim količinama sa laptopa programera i CI runera. To uključuje npm tokene za objavljivanje, GitHub tokene i cloud akreditive. U stvari, višestruke analize potvrđuju sistematsko prikupljanje tajnih podataka, kao što je pokretanje TruffleHog-a i ispitivanje krajnjih tačaka metapodataka u oblaku.
  • Drugi cilj je da automatski se širi zloupotrebom prava objavljivanja kompromitovanih održavatelja. Kao rezultat toga, jedno uporište se brzo širi u mnoga, budući da se nove zaražene verzije drugih paketa pojavljuju bez dodatnog ljudskog napora.
  • Treći cilj je da opstati i pouzdano se izvući putem GitHub infrastrukture. Napadači kreiraju javni repozitorij pod nazivom „Shai-Hulud“ s dvostrukom bazom64 data.json, a pored toga, oni uspostavljaju radni tok koji serijalizira ${{ toJSON(tajne) }} i objavljuje ga na statički webhook.

Vjerovatna korist uključuje dugotrajan pristup registrima i izvornom kodu, brzo lateralno kretanje prema cloud računima i mogućnost daljnjeg naoružanja lanca snabdijevanja. Javni izvještaji pokazuju da su privatni repozitorij prebačeni u javne sa... "-migracija" sufiks, koji povećava izloženost podacima i zamah

Unutar tereta Shai-Huluda: bundle.js u npm paketima

Shai-Hulud se isporučuje kao veliki, Webpack-u paketu i jako minificiran JavaScript fajl (bundle.js, oko 3–3.7 MB) koji se izvršava iz nakon instalacije zakačiti package.jsonPosljedično, Svaka instalacija automatski pokreće korisni teret. Ovaj dizajn skriva identifikatore, komprimira tok kontrole i gura svu logiku u jedan artefakt koji se izvršava tokom instalacije. Analitičari dosljedno potvrđuju grupisanje Webpack-a, neobičnu veličinu datoteke i izvršavanje tokom instalacije.

Osobine zamagljivanja i anti-analize koje ćete vidjeti u uzorcima:

  • Graf minificiranih modula s numeričkim ID-ovima modula, rijetkim komentarima i izravnanim tokom upravljanja. Štaviše, Ova struktura izuzetno otežava ručni pregled.
  • Skrivanje stringa putem base64 slojeva i pomoćnih alata za konstrukciju. Na primjer, Ponavljano base64 kodiranje i dekodiranje se obično pojavljuje oko rutina za eksfiltraciju.
  • Dinamička otprema kroz eval-stil obrasce i generirana tijela funkcija, što omogućava kodu da promijeni ponašanje tokom izvođenja.
  • Filtriranje operativnih sistema preferirati izvršavanje Linuxa i macOS-a, posebno na CI runerima i laptopima za razvojne programere.

Sa funkcionalnog stanovišta, paket je modularan. U radu se opisuju moduli za otkrivanje operativnog sistema, skeniranje datotečnog sistema i tajnih podataka gita, pristup cloud SDK-u, operacije GitHub API-ja i mehanizam za propagaciju koji uređuje druge pakete koje posjeduje održavatelj. U stvari, StepSecurity i ReversingLabs ističu funkciju koja automatski ažurira pakete sa zlonamjernim kodom.

Izvršavanje tokom instalacije u Shai-Huludu: Kako npm paketi pokreću crva

Napad počinje kada nakon instalacije pokreće node bundle.js. U ovom trenutku, skripta se inicijalizira i raspakirava radno stanje u memoriji, postavljajući temelje za puni rad crva.

Otkriće i žetva

  • Korisni opterećenje ispisuje datoteku process.env i skenira lokalne datoteke u potrazi za tajnim podacima visoke entropije i prefiksima tokena. Osim toga, proširuje pokrivenost pokretanjem TruffleHog-a.
  • Ispituje krajnje tačke metapodataka u oblaku kako bi prikupio kratkotrajne akreditive. Na primjer, poziva na 169.254.169.254 na AWS-u ili metadata.google.internal na GCP-u se često pojavljuju kod zaraženih domaćina.
  • Shodno tome, Svaki pronađeni akreditiv postaje odmah upotrebljiv za objavljivanje novih npm paketa ili slanje GitHub radnih procesa.

Eksfiltracija

  • Crv kreira novi GitHub repozitorij pod nazivom Shai Hulud i piše dvostruko base64 kodirano data.json s detaljima platforme, podacima o okruženju i tajnama. Kao što se može vidjeti, ovo bučno ponašanje je lako uočiti ako branitelji znaju gdje tražiti.
  • Također postavlja tok rada GitHub Actions, često na granu pod nazivom šaj-hulud, koji se serijalizira ${{ toJSON(secrets) }} i objavljuje podatke na statički webhook. Nadalje, ovaj tijek rada traje sve dok ga neko aktivno ne ukloni.

Širenje

  • Sa svakim otkrivenim npm tokenom, korisni teret nabraja sve pakete u vlasništvu kompromitovanog održavatelja. Zatim, dohvaća svaki tarball, ubrizgava bundle.js i postinstall unos, te ponovo objavljuje paket.
  • Kao rezultat toga, desetine zaraženih paketa mogu se pojaviti u roku od nekoliko sati, umnožavajući radijus eksplozije u ekosistemu.

Upornost i izloženost

  • Crv održava zlonamjerne radne procese i, u nekoliko slučajeva, pretvara privatne repozitorije u javne pomoću... "-migracija" sufiks. Sve u svemu, ovo osigurava da napadač zadrži uporište i maksimizira curenje podataka.

Napomena o otkrivanju ključa
Ova neobična upotreba ${{ toJSON(secrets) }} u radnim tokovima Akcije je rijetkost. Zbog toga, Timovi bi to trebali tretirati kao indikator visokog signala tokom lova.

Sanitizirani obrazac radnog procesa koji biste trebali tražiti

Ova neobična upotreba to JSON(tajne) u Akcijama je indikator visokog signala u ovom incidentu.

Pseudokod za propagaciju visokog nivoa (siguran, deskriptivan)

Analitičari su uočili ovu petlju u velikim razmjerima, što objašnjava brzi skok sa desetina na stotine zaraženih paketa.

Zašto je ovo crv u ekosistemu paketa

Crv je zlonamjerni softver koji se širi samostalno, bez potrebe za ručnim koracima operatera u svakoj fazi. U operativnim sistemima, crvi obično iskorištavaju mrežne ranjivosti za prelazak s jednog računara na drugi. Nasuprot tome, Shai-Hulud djeluje unutar npm registra. Njegov efikasan put je kroz ponovna upotreba akreditiva.

Crv koristi ukradene npm tokene za objavljivanje. Čim dobije važeće akreditive, ponovo objavljuje zaražene verzije pod drugim paketima u vlasništvu istog održavatelja. Nakon toga, te pakete instaliraju ništa ne sluteći programeri ili CI pokretači, i ciklus se ponavlja.

Iz tog razloga, sigurnosni analitičari, uključujući Mračno čitanje, klasificiraju Šaj-Huluda kao samoreplicirajući crv a ne jednostavan trojanac ili incident s tiposquattingom. Razlika je važna: trojanac obično ugrozi jednog domaćina, ali crv automatski pojačava svoj utjecaj na cijeli ekosistem.

Šalterski list „Kako to funkcioniše“

Da sumiramo životni ciklus Shai-Huluda, evo jedne prevare.cisraščlamba njegovih glavnih koraka:

  • Paket sa nakon instalacije je instaliran, i bundle.js izvršava.
  • Korisni teret ispisuje varijable okruženja, skenira datoteke i historiju gita, pokreće TruffleHogi upituje servise metapodataka u oblaku. Posljedično, svaka pronađena tajna postaje odmah korisna.
  • Izvlačenje podataka se događa na dva načina: prvo, kreiranjem javnog repozitorija pod nazivom Shai Hulud sa dvostrukim base64 kodiranjem data.jsondrugo, postavljanjem radnog toka GitHub Actions koji objavljuje ${{ toJSON(secrets) }} na webhook.
  • Koristeći bilo koji ukradeni npm token, crv ponovo objavljuje sve ostale pakete u vlasništvu kompromitovanog održavatelja s istim zlonamjernim udicom. Na taj način, infekcija se brzo množi.
  • Konačno, napadač posjeduje više tajni, više paketa za širenje i upornost unutar GitHub računa i repozitorija.

Kako praktično izbjeći ovu vrstu napada

Shai-Hulud je poziv na buđenje. Crv koji krade tokene i ponovo se objavljuje ne predstavlja budući rizik, već je aktivan u... ekosistem npm paketa danas. Da biste spriječili ovu vrstu napad na lanac snabdevanjaTimovima su potrebne kontrole koje se mogu programabilno izvršavati, automatizirati i koje se direktno primjenjuju u CI/CD pipelines. Ovo su iste odbrane koje već možete implementirati sa Xygeni.

Zaustavite loše artefakte na kapiji

Trebali biste skenirati npm pakete i tarballove prije nego što stignu do programera ili CI poslova. Predimenzionirano. bundle.js datoteke, sumnjive nakon instalacije hooksi markeri zamagljivanja služe kao rani znakovi upozorenja. Štaviše, provođenje perioda hlađenja i zakačenih verzija u pipelines sprečava automatsku konzumaciju svježih, neprovjerenih izdanja.

Harden CI/CD po defaultu

Guardrails in CI/CD su neophodni. Oni odbijaju spajanja ili instalacije koje uvode nove skripte ili binarne datoteke. Istovremeno, blokiraju tokove rada koji serijaliziraju tajne datoteke ili pokušavaju eksterne objave. Timovi bi također trebali zahtijevati instalacije samo s lockfile datotekama (npm ci) u svim pipelinetako da skupovi zavisnosti ostaju reproducibilni i sigurni.

Smanjite radijus eksplozije žetona

Tajne ne smiju postati pojedinačne tačke kvara. Neprestano skenirajte kod, konfiguracije i pipeline izlaz za izloženi akreditiviTokeni bi trebali biti usko ograničeni, s obzirom na kratak životni vijek, i automatski rotirani kada se otkrije izloženost. Po pravilu, svaki token korišten na hostu koji je izvršio sumnjivu postinstalaciju, tretirajte kao kompromitovan.

Rano uočite ponašanje crva

Otkrivanje anomalije je ključno. Na primjer, iznenadni skokovi u npm događajima objavljivanja, novi tokovi rada koji se pojavljuju bez razloga ili novi javni repozitorij ispunjeni čudnim kodiranim datotekama mogu signalizirati aktivnost crva. Stoga bi timovi trebali brzo podići upozorenja i izolirati sve održavatelje ili pokretače koji pokazuju ove znakove upozorenja.

Brza popravka bez prekida izgradnje

Brzina i sigurnost moraju ići zajedno. Automatizovano pull requests može zamijeniti kompromitovane npm pakete provjerenim verzijama. Osim toga, dostupnost i eksploatabilnost Analiza osigurava da nadogradnje ostanu minimalne i stabilne. Konačno, ponovo izgradite pogođene CI runnere iz čistih slika nakon što se potvrdi izloženost, sprječavajući dalje širenje napada.

Indikatori kompromisa (IoCs)

Prilikom analize Shai-Huludara, timovi bi trebali obratiti pažnju na oboje statički IoC-ovi u datotekama i bihevioralni IoC-ovi in pipelineZajedno, ovi signali pomažu u ranom otkrivanju infekcija i reagiranju prije nego što se crv dalje proširi.

Statički IoC-ovi

Sljedeća SHA-256 sažetaka su uočena bundle.js uzorci:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

Osim toga, obratite pažnju na ove ponavljajuće obrasce:

  • A bundle.js u korijenu paketa.
  • "postinstall": "node bundle.js" unutra package.json.
  • Nazvani repozitoriji Shai Hulud.
  • GitHub tokovi rada koji sadrže ${{ toJSON(secrets) }}.

Bihevioralni IoC-ovi

Osim potpisa datoteka, aktivnost crva se otkriva i kroz ponašanje. Na primjer:

  • Iznenadni naleti npm publish događaja od strane jednog održavatelja.
  • Novi tokovi rada koji prenose podatke na eksterne krajnje tačke.
  • Odlazni POST zahtjevi pokrenuti od strane CI runnera.
  • Nedavno kreirani javni repozitorij sa kodiranim blobovima.

Brzi lovovi

Zaključak: Pouke od Shai-Huludara

The Napad na lanac snabdijevanja Shai-Huluda u npm paketima pokazuje koliko je današnji lanac snabdijevanja softverom postao krhak. Ovaj crv je učinio više od samog dodavanja zlonamjernog koda. Krao je tokene, slao podatke, a zatim se automatski ponovo objavljivao. Zbog toga se napad proširio za nekoliko sati umjesto za nekoliko sedmica.

Za developere i DevOps timove, lekcije su jasne:

  • Svaka instalacija pokreće kod. Čak i običan npm paket može sakriti postinstalacionog crva.
  • Svaki token ima visoku vrijednost. Nakon krađe, može se koristiti za dalje širenje zlonamjernog softvera.
  • svaki pipeline potrebne provjere. bez guardrails na zavisnostima, tokovima rada i tajnama, jedan kompromis može brzo pogoditi produkciju.

Stoga, zaustavljanje napada poput Shai-Huluda zahtijeva kontrole koje su automatske i jednostavne za provođenje. Timovi bi trebali skenirati npm pakete prije instalacija, koristiti lockfile verzije, otkrivati ​​čudne aktivnosti objavljivanja i kratkotrajno koristiti tokene. Ovi koraci više nisu opcionalni. Umjesto toga, oni su temelj otpornosti u modernom... pipelines.

U Xygeniju, napad Shai-Huluda na lanac snabdijevanja vidimo kao upozorenje za cijeli ekosistem otvorenog koda. Održivi put naprijed je direktno uključivanje sigurnosti lanca snabdijevanja u proces razvoja, u trenutku kada se kod, npm paketi i pipelines povezivanjem.

Ispod je kompletna lista npm paketa i verzija prijavljenih kao kompromitovani u Shai-Huludu. Koristite je za provjeru vaših lockfile-ova, registara i CI-a. pipelines za izloženost.

Lista kompromitovanih paketa

📦 Pregled kompromitovanih npm paketa

Naziv paketa verzija Objaviti datum
json-pravila-mehanizam-pojednostavljeno0.2.12025-09-14T17:58:51.203Z
pilot leta0.8.82025-09-14T18:35:07.600Z
mcp-graf-znanja1.2.12025-09-14T18:35:09.494Z
šef zračnog prometa0.3.12025-09-14T18:35:09.521Z
skok kapije0.0.22025-09-14T18:35:09.651Z
TVI-CLI0.1.52025-09-14T18:35:10.996Z
@thangved/prozor-povratnog-poziva1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/validacija0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ Pogledajte kompletnu listu kompromitovanih paketa
Naziv paketa verzija Objaviti datum
json-pravila-mehanizam-pojednostavljeno0.2.12025-09-14T17:58:51.203Z
pilot leta0.8.82025-09-14T18:35:07.600Z
mcp-graf-znanja1.2.12025-09-14T18:35:09.494Z
šef zračnog prometa0.3.12025-09-14T18:35:09.521Z
skok kapije0.0.22025-09-14T18:35:09.651Z
TVI-CLI0.1.52025-09-14T18:35:10.996Z
@thangved/prozor-povratnog-poziva1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/validacija0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
@hestjs/cqrs0.1.62025-09-14T20:45:55.966Z
@hestjs/skalar0.1.72025-09-14T20:45:56.386Z
ng2-otpremanje-datoteke7.0.32025-09-15T02:44:29.555Z
rukovatelj obavještenjima o kondenzatoru0.0.22025-09-15T04:54:48.431Z
kondenzator-plug-vonage1.0.22025-09-15T04:54:48.501Z
dodatak za zdravlje kondenzatora0.0.22025-09-15T04:54:48.704Z
dozvole za kondenzator za android0.0.42025-09-15T04:54:48.753Z
VoIP-komplet za pozive1.0.22025-09-15T04:54:49.223Z
dodatak-kondenzator-ihealth1.1.82025-09-15T04:55:08.113Z
@art-ws/common2.0.222025-09-15T05:21:15.411Z
@art-ws/config-eslint2.0.42025-09-15T05:21:17.199Z
ngx-ws1.1.52025-09-15T05:21:17.514Z
@art-ws/slf2.0.152025-09-15T05:21:17.524Z
@art-ws/http-server2.0.212025-09-15T05:21:17.745Z
pm2-gelf-json1.0.42025-09-15T05:21:18.413Z
@art-ws/di2.0.282025-09-15T05:21:18.488Z
@art-ws/di-čvor2.0.132025-09-15T05:21:18.849Z
@art-ws/config-ts2.0.72025-09-15T05:21:19.408Z
@art-ws/db-kontekst2.0.212025-09-15T05:21:19.814Z
@art-ws/openapi0.1.92025-09-15T05:21:19.969Z
@art-ws/web-aplikacija1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
sca-tools-software-alati-za-analizu-sastava
Prioritizirajte, sanirajte i osigurajte softverske rizike
Nabavite svoj besplatni račun.
Nije potrebna kreditna kartica.

Osigurajte svoj razvoj i isporuku softvera

sa Xygeni paketom proizvoda