Shai hulud - npm-pakkette - voorsieningskettingaanval

Shai-Hulud: Die npm-pakkette-wurm verduidelik

TL; DR

Op 14 September 2025 het navorsers geïdentifiseer Shai Hulud, 'n selfrepliserende wurm wat binne versteek is npm pakkette, wat 'n roetine-afhanklikheidsopdatering in 'n volskaalse omskep voorsieningsketting aanvalEerste keer raakgesien in die @ctrl/kleinkleur pakket deur Daniel dos Santos Pereira, Shai-Hulud oes geheime, verwyder hulle deur GitHub-bewaarplekke en werkvloeie, en publiseer homself weer oor die register met behulp van gesteelde geloofsbriewe. Binne dae het die aantal besmette pakkette van dosyne na honderde gestyg, wat bevestig dat Shaihulud is nie net nog 'n trojaan nie, maar 'n wurm wat ontwerp is om outomaties oor die npm-ekosisteem te versprei.

impak: Enige ontwikkelaar of CI-aanvaller wat publieke npm-pakkette installeer, is in gevaar.

Onmiddellike aksies: blokkeer bekende weergawes, skakel oor na slegs-sluitlêer-installasies, roteer npm- en GitHub-tokens, oudit werkvloeie en monitor vir aanwysers van kompromie (IoC's).

Wat gebeur?

Die Shai-Hulud voorsieningskettingaanval in npm-pakkette is een van die mees ontwrigtende voorvalle in onlangse geheue. Anders as geïsoleerde Trojane, meng hierdie wurm geloofsbriewediefstal, outomatiese eksfiltrasie en selfreplikasieGevolglik het die infeksietydlyn van weke tot net ure gekrimp.

Vir DevOps-spanne is die les duidelik: as elke installasie kode kan uitvoer, dan is elke afhanklikheidsopdatering 'n potensiële oortredingspunt.

Moontlike Aanvanklike Vektor- en Geteikende Geloofsbriewe

Vroeë analise dui daarop dat die aanval waarskynlik begin het met gesteelde geloofsbrieweByvoorbeeld, phishing-veldtogte wat npm namaak login of MFA-aanwysings het moontlik ontwikkelaartokens vasgelê. Sodra aanvallers daardie eerste vastrapplek gekry het, het die wurm versprei deur homself in npm-pakkette in te bed en meer geheime te steel van:

  • npm-konfigurasielêers soos .npmrc, wat dikwels publiseertokens bevat.
  • Omgewings veranderlikes en konfigurasies met GitHub PAT's en CI/CD geheime.
  • Wolk-metadata-eindpunte (AWS, GCP, Azure) wat kortstondige geloofsbriewe vir laterale beweging lewer.

Daarom het geloofsbriewediefstal die wegspringplek geword. Met geldige npm-tokens en GitHub-geheime kon Shai-Hulud self repliseer oor verskeie pakkette en bewaarplekke sonder ekstra menslike moeite.

Uitvoerende Impak van die Shai-Hulud Voorsieningskettingaanval

Shai-Hulud is vandag nog aktief. Hierdie wurm versnel die impaktydlyn. Wat eens weke geneem het met 'n trojaan, ontvou nou in ure. Gevolglik, die verspreiding is vinniger en moeiliker om te beperk. Dit vorder deur:

  • Steel npm-publikasietokens en GitHub-geheime.
  • Herpubliseer homself in ander npm-pakkette.
  • Voeg kwaadwillige GitHub Actions-werkvloeie by vir volharding.

Wie word geraak:

Enige span wat publieke npm-pakkette installeer, word blootgestel. Boonop loop ontwikkelaars met npm- of GitHub-tokens in die kas 'n hoë risiko. CI-lopers wat breë geheime gebruik, is ook kwesbaar.

Besigheidsrisiko

Die impak op die besigheid groei vinnig. Gesteelde tokens kan lei tot rekeningoorname, pakketkaping en selfs wolkmisbruik. Boonop maak volharding in GitHub-werkvloei dit moeiliker om skoon te maak. Daarom, spanne moet Shai-Hulud as 'n voortdurende voorval hanteer, nie 'n geslote een nie.

Hoe die Shai-Hulud-voorsieningskettingaanval in npm-pakkette werk

Aanvaller se doelwitte en motief

Die veldtog optimaliseer vir drie dinge:

  • Die eerste doel is om steel geloofsbriewe op skaal van ontwikkelaars se skootrekenaars en CI-hardlopers. Dit sluit in npm-publikasietokens, GitHub-tokens en wolkbewyse. Trouens, veelvuldige ontledings bevestig sistematiese geheime oes, soos die uitvoer van TruffleHog en die navraag van wolkmetadata-eindpunte.
  • Die tweede doelwit is om versprei outomaties deur die publikasieregte van gekompromitteerde onderhouers te misbruik. Gevolglik brei een vastrapplek vinnig uit na baie, aangesien nuwe besmette weergawes van ander pakkette sonder bykomende menslike moeite verskyn.
  • Die derde doelwit is om voortduur en betroubaar uitfiltreer deur GitHub-infrastruktuur. Aanvallers skep 'n publieke repo genaamd "Shai-Hulud" met 'n dubbele basis64 data.json, en boonop plant hulle 'n werkvloei wat serialiseer ${{ naJSON(geheime) }} en plaas dit na 'n statiese webhook.

Die waarskynlike voordeel sluit in langdurige toegang tot registers en bronkode, vinnige laterale beweging na wolkrekeninge, en die opsie om die voorsieningsketting verder te bewapen. Openbare verslaggewing toon dat private bewaarplekke na die publiek oorgeskakel is met 'n "-migrasie" agtervoegsel, wat data-blootstelling en momentum verhoog

Binne die Shai-Hulud-vrag: bundel.js in npm-pakkette

Shai-Hulud verskeep as 'n groot, Webpack-gebundel en swaar geminimaliseer JavaScript-lêer (bundel.js, ongeveer 3–3.7 MB) wat vanaf 'n uitvoer na-installasie haak in pakket.jsonGevolglik, Elke installasie aktiveer die vrag outomaties. Hierdie ontwerp versteek identifiseerders, komprimeer die beheervloei en stoot alle logika in 'n enkele artefak wat tydens installasie uitgevoer word. Ontleders bevestig deurgaans Webpack-bundeling, ongewone lêergrootte en installasietyd-uitvoering.

Verduistering en anti-analise eienskappe wat jy in monsters sal sien:

  • Verkleinde modulegrafiek met numeriese module-ID's, yl kommentaar en 'n afgeplatte beheervloei. Boonop, Hierdie struktuur maak handmatige hersiening uiters moeilik.
  • String versteek via base64-lae en konstruksiehulpmiddels. Byvoorbeeld, Herhaalde base64-kodering en -dekodering verskyn gewoonlik rondom eksfiltrasieroetines.
  • Dinamiese versending deur _iorg_eval-stylpatrone en gegenereerde funksieliggame, wat kode in staat stel om gedrag tydens looptyd te verander.
  • OS-filtering om Linux- en macOS-uitvoering te verkies, veral op CI-hardlopers en ontwikkelaarskootrekenaars.

Vanuit 'n funksionele oogpunt is die bundel modulêr. Opsommings beskryf modules vir OS-ontdekking, lêerstelsel- en git-geheimskanderings, wolk-SDK-toegang, GitHub API-bedrywighede en 'n voortplantingsenjin wat ander pakkette wat die onderhouer besit, wysig. Trouens, StepSecurity en ReversingLabs beklemtoon albei 'n funksie wat pakkette outomaties met die kwaadwillige haak opdateer.

Installasietydse uitvoering in Shai-Hulud: Hoe npm-pakkette die wurm aktiveer

Die aanval begin wanneer nainstallasie loop node bundel.js. Op hierdie punt initialiseer en pak die skrip die werkende toestand in die geheue uit, wat die weg baan vir die wurm se volle werking.

Ontdekking en oes

  • Die vrag laai process.env af en skandeer plaaslike lêers vir hoë-entropie geheime en token voorvoegsels. Daarbenewens brei dit dekking uit deur TruffleHog te gebruik.
  • Dit navraag doen oor wolkmetadata-eindpunte om kortstondige geloofsbriewe in te samel. Byvoorbeeld, oproepe na 169.254.169.254 op AWS of metadata.google.internal op GCP verskyn dikwels in besmette gashere.
  • Gevolglik, enige geloofsbriewe wat gevind word, word onmiddellik bruikbaar om nuwe npm-pakkette te publiseer of GitHub-werkvloeie te stoot.

Ekfiltrasie

  • Die wurm skep 'n nuwe GitHub-bewaarplek met die naam Shai Hulud en skryf 'n dubbel basis64-geënkodeerde data.json met platformbesonderhede, omgewingstortings en geheime. Soos gesien kan word, is hierdie raserige gedrag maklik om raak te sien as verdedigers weet waar om te kyk.
  • Dit plant ook 'n GitHub Actions-werkvloei, dikwels op 'n tak met die naam shai-hulud, wat serialiseer ${{ toJSON(secrets) }} en plaas die data na 'n statiese webhook. Verder bly hierdie werkvloei voortduur totdat iemand dit aktief verwyder.

Voortplanting

  • Met enige ontdekte npm-token, tel die vrag alle pakkette op wat deur die gekompromitteerde onderhouer besit word. Dan haal dit elke tarball op, spuit bundle.js en 'n postinstall-inskrywing in, en publiseer die pakket weer.
  • Gevolglik kan dosyne besmette pakkette binne 'n paar uur verskyn, wat die ontploffingsradius oor die ekosisteem vermenigvuldig.

Volharding en blootstelling

  • Die wurm hou kwaadwillige werkvloeie aan die lewe en, in verskeie gevalle, maak private bewaarplekke publiek met 'n "-migrasie" agtervoegsel. Alles in ag genome verseker dit dat die aanvaller 'n vastrapplek behou en data-lekkasie maksimeer.

Sleutelopsporingsnota
Hierdie ongewone gebruik van ${{ toJSON(secrets) }} in Aksies is werkvloei skaars. Daarom, Spanne moet dit as 'n hoësein-aanwyser tydens jagte behandel.

Gesuiwerde werkvloeipatroon waarna jy moet soek

Hierdie ongewone gebruik van om JSON (geheime) in Aksies is 'n hoë-sein aanwyser in hierdie voorval.

Hoëvlak-voortplantingspseudokode (veilig, beskrywend)

Ontleders het hierdie lus op skaal waargeneem, wat die vinnige sprong van dosyne na honderde besmette pakkette verklaar.

Hoekom is dit 'n wurm in 'n pakket-ekosisteem

'n Wurm is wanware wat op sy eie versprei sonder dat handmatige operateurstappe in elke stadium nodig is. In bedryfstelsels benut wurms gewoonlik netwerkkwesbaarhede om van een masjien na 'n ander te beweeg. In teenstelling hiermee werk Shai-Hulud binne die npm-register. Die doeltreffende pad daarvan is deur hergebruik van geloofsbriewe.

Die wurm maak gebruik van gesteelde npm-publikasietokens. Sodra dit geldige geloofsbriewe verkry, publiseer dit besmette weergawes weer onder ander pakkette wat deur dieselfde onderhouer besit word. Daarna word daardie pakkette deur niksvermoedende ontwikkelaars of CI-hardlopers geïnstalleer, en die siklus herhaal.

Om hierdie rede, sekuriteitsontleders, insluitend Donker lees, klassifiseer Shai-Hulud as 'n selfrepliserende wurm eerder as 'n eenvoudige trojaan of 'n typosquatting-voorval. Die verskil is belangrik: 'n trojaan kompromitteer tipies een gasheer, maar 'n wurm versterk sy impak outomaties oor 'n ekosisteem.

"Hoe dit werk" spiekbriefie

Om Shai-Hulud se lewensiklus op te som, hier is 'n nadeelcis'n Uiteensetting van die hoofstappe:

  • 'n Pakket met na-installasie geïnstalleer is, en bundle.js voer uit.
  • Die vrag stort omgewingveranderlikes, skandeer lêers en git-geskiedenis, loop Truffelvark, en navrae oor wolkmetadatadienste. Gevolglik word enige geheim wat gevind word onmiddellik nuttig.
  • Eksfiltrasie vind op twee maniere plaas: eerstens, deur 'n openbare repository met die naam te skep Shai Hulud met 'n dubbele basis64-geënkodeerde data.json; tweedens, deur 'n GitHub Actions-werkvloei te plant wat plaas ${{ toJSON(secrets) }} na 'n webhook.
  • Deur enige gesteelde npm-token te gebruik, publiseer die wurm alle ander pakkette wat besit word deur die gekompromitteerde onderhouer met dieselfde kwaadwillige haak. Op hierdie manier vermeerder die infeksie vinnig.
  • Laastens hou die aanvaller meer geheime, meer pakkette om deur te versprei, en volharding binne GitHub-rekeninge en -bewaarplekke.

Hoe om hierdie klas aanval prakties te vermy

Shai-Hulud is 'n wekroep. 'n Wurm wat tekens steel en homself herpubliseer, is nie 'n toekomstige risiko nie, dit is lewendig in die npm-pakkette-ekosisteem vandag. Om hierdie tipe te voorkom voorsieningsketting aanval, spanne benodig beheermaatreëls wat programmeerbaar, outomaties en direk afgedwing kan word in CI/CD pipelines. Dit is dieselfde verdedigingsmeganismes waarmee jy reeds kan implementeer Xygeni.

Stop slegte artefakte by die hek

Jy moet npm-pakkette en tarballs skandeer voordat hulle ontwikkelaars of CI-take bereik. bundle.js lêers, verdagte nainstallasie hooks, en obfuskasiemerkers dien almal as vroeë rooi vlae. Boonop word die afdwinging van afkoelperiodes en vasgespelde weergawes in pipelines verhoed dat vars, ongekontroleerde vrystellings outomaties verbruik word.

Harden CI/CD by verstek

Guardrails in CI/CD is noodsaaklik. Hulle verwerp samesmeltings of installasies wat nuwe skrifte of binêre lêers bekendstel. Terselfdertyd blokkeer hulle werkvloeie wat geheime serialiseer of eksterne plasings probeer. Spanne moet ook slegs-sluitlêer-installasies vereis (npm ci) oor alles heen pipelines sodat afhanklikheidstelle reproduceerbaar en veilig bly.

Verminder die radius van die tekenontploffing

Geheime moenie enkele punte van mislukking word nie. Skandeer voortdurend kode, konfigurasies en pipeline uitset vir blootgestelde geloofsbrieweTokens moet noukeurig gedefinieer word, kort lewensduur gegee word, en outomaties geroteer word wanneer blootstelling bespeur word. As 'n reël, behandel enige token wat op 'n gasheer gebruik word wat 'n verdagte na-installasie uitgevoer het as gekompromitteer.

Sien wurmgedrag vroegtydig

Anomalie opsporing is die sleutel. Byvoorbeeld, skielike stygings in npm-publikasiegebeurtenisse, nuwe werkvloeie wat sonder rede verskyn, of vars publieke repos gevul met vreemde geënkodeerde lêers kan alles wurmaktiwiteit aandui. Daarom moet spanne vinnig waarskuwings skep en enige onderhouers of hardlopers wat hierdie waarskuwingstekens toon, isoleer.

Maak vinnig reg sonder om bouwerk te breek

Spoed en veiligheid moet saamgaan. Outomaties pull requests kan gekompromitteerde npm-pakkette met geverifieerde weergawes vervang. Daarbenewens, reach en uitbuitbaarheid analise verseker dat opgraderings minimaal en stabiel bly. Laastens, herbou geaffekteerde CI-hardlopers vanaf skoon beelde sodra blootstelling bevestig is, om te verhoed dat die aanval verder versprei.

Aanwysers van kompromie (IoC's)

Wanneer Shai-Hulud ontleed word, moet spanne op beide let. statiese IoC's in lêers en gedrags-IOC's in pipelines. Saam help hierdie seine om infeksies vroeg op te spoor en te reageer voordat die wurm verder versprei.

Statiese IoC's

Die volgende SHA-256-samevattingspassing is waargeneem bundle.js monsters:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

Let ook op hierdie herhalende patrone:

  • A bundle.js by die pakketwortel.
  • "postinstall": "node bundle.js" binne package.json.
  • Bewaarplekke benoem Shai Hulud.
  • GitHub-werkvloeie wat bevat ${{ toJSON(secrets) }}.

Gedrags-IOC's

Benewens lêerhandtekeninge, openbaar wurmaktiwiteit homself deur gedrag. Byvoorbeeld:

  • Skielike uitbarstings van npm publiseer gebeurtenisse van een onderhouer.
  • Nuwe werkvloeie wat data na eksterne eindpunte stoot.
  • Uitgaande POST-versoeke wat deur CI-lopers veroorsaak word.
  • Onlangs geskepte publieke repos met geënkodeerde blobs.

Vinnige jagte

Gevolgtrekking: Lesse van Shai-Hulud

Die Shai-Hulud-voorsieningskettingaanval in npm-pakkette wys hoe broos vandag se sagteware-voorsieningsketting geword het. Hierdie wurm het meer gedoen as om kwaadwillige kode by te voeg. Dit het tokens gesteel, data uitgestuur en homself dan outomaties herpubliseer. As gevolg hiervan het die aanval binne ure in plaas van weke versprei.

Vir ontwikkelaars en DevOps-spanne is die lesse duidelik:

  • Elke installasie voer kode uit. Selfs 'n algemene npm-pakket kan 'n postinstallasie-wurm versteek.
  • Elke teken het 'n hoë waarde. Sodra dit gesteel is, kan dit gebruik word om wanware verder te versprei.
  • Elke pipeline benodig tjeks. Sonder guardrails op afhanklikhede, werkvloeie en geheime, kan een kompromie vinnig produksie tref.

Daarom vereis die stop van aanvalle soos Shai-Hulud beheermaatreëls wat outomaties en maklik is om af te dwing. Spanne moet npm-pakkette skandeer voor installasies, lockfile-boue gebruik, vreemde publikasieaktiwiteit opspoor en tokens kortstondig hou. Hierdie stappe is nie meer opsioneel nie. In plaas daarvan is hulle die fondament van veerkragtigheid in moderne ... pipelines.

By Xygeni sien ons die Shai-Hulud-voorsieningskettingaanval as 'n waarskuwing vir die hele oopbron-ekosisteem. Die volhoubare pad vorentoe is om voorsieningskettingsekuriteit direk in die ontwikkelingsproses in te bring, op die punt waar kode, npm-pakkette en ... pipelines verbind.

Hieronder is die volledige lys van npm-pakkette en -weergawes wat as gekompromitteer in Shai-Hulud aangemeld is. Gebruik dit om jou sluitlêers, registers en CI na te gaan. pipelines vir blootstelling.

Lys van gekompromitteerde pakkette

📦 Voorskou van gekompromitteerde npm-pakkette

Pakket naam weergawe Publiseer datum
json-reëls-enjin-vereenvoudig0.2.12025-09-14T17:58:51.203Z
lugvlieënier0.8.82025-09-14T18:35:07.600Z
mcp-kennisgrafiek1.2.12025-09-14T18:35:09.494Z
lughoof0.3.12025-09-14T18:35:09.521Z
springhek0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/terugbelvenster1.1.42025-09-14T20:31:38.479Z
@tnf-ontwikkelaar/api1.0.82025-09-14T20:31:39.547Z
@tnf-ontwikkelaar/js1.0.82025-09-14T20:31:41.251Z
@tnf-ontwikkelaar/mui1.0.82025-09-14T20:31:41.259Z
@tnf-ontwikkelaar/kern1.0.82025-09-14T20:31:42.728Z
@teselagen/reageer-tabel6.10.202025-09-14T20:37:08.597Z
@hestjs/demonstrasie0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-konfigurasie0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-konfigurasie0.1.22025-09-14T20:45:55.044Z
@nexe/konfigurasiebestuurder0.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/validering0.1.62025-09-14T20:45:55.595Z
@hestjs/kern0.2.12025-09-14T20:45:55.888Z
➡️ Bekyk die volledige lys van gekompromitteerde pakkette
Pakket naam weergawe Publiseer datum
json-reëls-enjin-vereenvoudig0.2.12025-09-14T17:58:51.203Z
lugvlieënier0.8.82025-09-14T18:35:07.600Z
mcp-kennisgrafiek1.2.12025-09-14T18:35:09.494Z
lughoof0.3.12025-09-14T18:35:09.521Z
springhek0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/terugbelvenster1.1.42025-09-14T20:31:38.479Z
@tnf-ontwikkelaar/api1.0.82025-09-14T20:31:39.547Z
@tnf-ontwikkelaar/js1.0.82025-09-14T20:31:41.251Z
@tnf-ontwikkelaar/mui1.0.82025-09-14T20:31:41.259Z
@tnf-ontwikkelaar/kern1.0.82025-09-14T20:31:42.728Z
@teselagen/reageer-tabel6.10.202025-09-14T20:37:08.597Z
@hestjs/demonstrasie0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-konfigurasie0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-konfigurasie0.1.22025-09-14T20:45:55.044Z
@nexe/konfigurasiebestuurder0.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/validering0.1.62025-09-14T20:45:55.595Z
@hestjs/kern0.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-lêer-oplaai7.0.32025-09-15T02:44:29.555Z
kapasitor-kennisgewinghanteraar0.0.22025-09-15T04:54:48.431Z
kapasitor-inprop-vonage1.0.22025-09-15T04:54:48.501Z
kapasitor-inprop-gesondheidsprogram0.0.22025-09-15T04:54:48.704Z
kapasitor-androidtoestemmings0.0.42025-09-15T04:54:48.753Z
VoIP-oproepstel1.0.22025-09-15T04:54:49.223Z
kapasitor-inprop-ihealth1.1.82025-09-15T04:55:08.113Z
@kuns-ws/algemeen2.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
@kuns-ws/slf2.0.152025-09-15T05:21:17.524Z
@art-ws/http-bediener2.0.212025-09-15T05:21:17.745Z
pm2-gelf-json1.0.42025-09-15T05:21:18.413Z
@kuns-ws/di2.0.282025-09-15T05:21:18.488Z
@art-ws/di-node2.0.132025-09-15T05:21:18.849Z
@art-ws/config-ts2.0.72025-09-15T05:21:19.408Z
@art-ws/db-konteks2.0.212025-09-15T05:21:19.814Z
@kuns-ws/oopnapi0.1.92025-09-15T05:21:19.969Z
@kuns-ws/web-app1.0.32025-09-15T05:21:20.383Z
@kuns-ws/ssl-inligting1.0.92025-09-15T05:21:20.927Z
sca-tools-sagteware-samestelling-analise-gereedskap
Prioritiseer, herstel en beveilig jou sagtewarerisiko's
Kry jou gratis rekening.
Geen kredietkaart benodig nie.

Beveilig u sagteware-ontwikkeling en -lewering

met Xygeni-produksuite