Shai Hulud - npm-pakker - forsyningskædeangreb

Shai-Hulud: Forklaring af npm-pakkeormen

TL; DR

Den 14. september 2025 identificerede forskere Shai Hulud, en selvreplikerende orm gemt indeni npm pakker, der forvandler en rutinemæssig afhængighedsopdatering til en fuldskala angreb på forsyningskædenFørst set i @ctrl/tinycolor I en pakke af Daniel dos Santos Pereira indsamler Shai-Hulud hemmeligheder, fjerner dem via GitHub-repos og -workflows og genudgiver sig selv i hele registreringsdatabasen ved hjælp af stjålne legitimationsoplysninger. Inden for få dage steg antallet af inficerede pakker fra snesevis til hundredvis, hvilket bekræfter, at Shaihulud er ikke bare endnu en trojaner, men en orm designet til at sprede sig automatisk i hele npm-økosystemet.

Indvirkning: Enhver udvikler eller CI-bruger, der installerer offentlige npm-pakker, er i fare.

Umiddelbare handlinger: bloker kendte versioner, skift til installationer kun med låsefiler, roter npm- og GitHub-tokens, revider arbejdsgange og overvåg for kompromisindikatorer (IoC'er).

Hvad sker der?

Shai-Hulud forsyningskædeangreb i npm-pakker er en af ​​de mest forstyrrende hændelser i nyere tid. I modsætning til isolerede trojanske heste blander denne orm tyveri af legitimationsoplysninger, automatiseret eksfiltrering og selvreplikeringFølgelig skrumpede infektionstidslinjen fra uger til blot timer.

For DevOps-teams er lektien klar: hvis alle installationer kan udføre kode, så er alle afhængighedsopdateringer et potentielt sikkerhedsbrud.

Mulige initiale vektor- og målrettede legitimationsoplysninger

Tidlig analyse indikerer, at angrebet sandsynligvis startede med stjålne legitimationsoplysningerFor eksempel phishing-kampagner, der forfalsker npm login eller MFA-prompter kan have fanget udviklertokens. Da angriberne først fik fodfæste, spredte ormen sig ved at integrere sig i npm-pakker og stjæle flere hemmeligheder fra:

  • npm-konfigurationsfiler som .npmrc, der ofte indeholder publiceringstokens.
  • Miljøvariabler og konfigurationer med GitHub PAT'er og CI/CD hemmeligheder.
  • Cloud-metadata-slutpunkter (AWS, GCP, Azure) hvilket giver kortlivede legitimationsoplysninger til lateral bevægelse.

Derfor blev tyveri af legitimationsoplysninger springbrættet til. Med gyldige npm-tokens og GitHub-hemmeligheder kunne Shai-Hulud selvreplikere på tværs af flere pakker og repositorier uden ekstra menneskelig indsats.

Konsekvenserne for Shai-Hulud-forsyningskædeangrebet på den administrerende direktør

Shai-Hulud er stadig aktiv i dag. Denne orm fremskynder nedslagstidslinjen. Det, der engang tog uger med en trojaner, udfolder sig nu på timer. Som et resultat, spredningen er hurtigere og sværere at inddæmme. Det går frem ved at:

  • Stjæler npm-publiceringstokens og GitHub-hemmeligheder.
  • Genudgiver sig selv i andre npm-pakker.
  • Tilføjelse af ondsindede GitHub Actions-arbejdsgange for at sikre vedholdenhed.

Hvem er berørt:

Ethvert team, der installerer offentlige npm-pakker, er eksponeret. Derudover står udviklere med cachelagrede npm- eller GitHub-tokens over for en høj risiko. CI-løbere, der bruger bredspektrede hemmeligheder, er også sårbare.

Forretningsrisiko

Forretningspåvirkningen vokser hurtigt. Stjålne tokens kan føre til kontoovertagelse, pakkekapring og endda misbrug af cloud-miljøet. Derudover gør vedholdenhed i GitHub-arbejdsgange det sværere at oprydde. Derfor, skal holdene behandle Shai-Hulud som en igangværende hændelse, ikke en lukket en.

Sådan fungerer Shai-Hulud Supply Chain-angrebet i npm-pakker

Angriberens mål og motiv

Kampagnen optimerer til tre ting:

  • Det første mål er at stjæle legitimationsoplysninger i stor skala fra udviklerbærbare computere og CI-løbere. Dette inkluderer npm-publikationstokens, GitHub-tokens og cloud-legitimationsoplysninger. Faktisk bekræfter flere analyser systematisk indsamling af hemmelige data, såsom at køre TruffleHog og forespørge på cloud-metadata-slutpunkter.
  • Det andet mål er at udbrede sig automatisk ved at misbruge udgivelsesrettighederne for kompromitterede vedligeholdere. Som et resultat spreder ét fodfæste sig hurtigt til mange, da nye inficerede versioner af andre pakker dukker op uden yderligere menneskelig indsats.
  • Det tredje mål er at vedvarer og udfiltreres pålideligt gennem GitHub-infrastrukturen. Angribere opretter et offentligt arkiv med navnet "Shai-Hulud" med en dobbelt base64 data.json, og derudover planter de en arbejdsgang, der serialiserer ${{ toJSON(hemmeligheder) }} og sender det til en statisk webhook.

Den sandsynlige gevinst inkluderer langvarig adgang til registre og kildekode, hurtig lateral bevægelse til cloud-konti og muligheden for at bevæbne forsyningskæden yderligere. Offentlig rapportering viser, at private repositorier er blevet offentliggjort med en "-migration" suffiks, hvilket øger dataeksponering og momentum

Inde i Shai-Hulud-nyttelasten: bundle.js i npm-pakker

Shai-Hulud sejler som en stor, Webpack-bundtet og kraftigt minimeret JavaScript-fil (bundle.js, cirka 3-3.7 MB) der udføres fra en efterinstallation hægte sig fast pakke.jsonFølgelig, Hver installation udløser automatisk nyttelasten. Dette design skjuler identifikatorer, komprimerer kontrolflowet og samler al logik i en enkelt artefakt, der udføres under installationen. Analytikere bekræfter konsekvent Webpack-bundling, usædvanlig filstørrelse og udførelse på installationstidspunktet.

Træk i forbindelse med obfuskation og antianalyse, som du vil se i prøver:

  • Minimificeret modulgraf med numeriske modul-ID'er, sparsomme kommentarer og fladtrykt kontrolflow. Desuden, Denne struktur gør manuel gennemgang ekstremt vanskelig.
  • Streng skjuling via base64-lag og konstruktionshjælpere. For eksempel, Gentagen base64-kodning og -afkodning forekommer normalt omkring eksfiltreringsrutiner.
  • Dynamisk forsendelse ved eval-style-mønstre og genererede funktionslegemer, hvilket gør det muligt for kode at ændre adfærd under kørsel.
  • OS-filtrering at foretrække Linux- og macOS-udførelse, især på CI-brugere og bærbare computere til udviklere.

Fra et funktionelt perspektiv er pakken modulær. Opsummeringer beskriver moduler til OS-opdagelse, scanninger af filsystemer og git-hemmeligheder, adgang til cloud-SDK'er, GitHub API-operationer og en propageringsmotor, der redigerer andre pakker, som vedligeholderen ejer. Faktisk fremhæver både StepSecurity og ReversingLabs en funktion, der automatisk opdaterer pakker med den ondsindede hook.

Udførelse på installationstid i Shai-Hulud: Hvordan npm-pakker udløser ormen

Angrebet begynder, når postinstall kører node bundle.js. På dette tidspunkt initialiserer og udpakker scriptet arbejdstilstanden i hukommelsen, hvilket sætter scenen for ormens fulde drift.

Opdagelse og høst

  • Nyttelasten dumper process.env og scanner lokale filer for hemmeligheder med høj entropi og tokenpræfikser. Derudover udvider den dækningen ved at køre TruffleHog.
  • Den forespørger cloud-metadata-slutpunkter for at indsamle kortlivede legitimationsoplysninger. For eksempel, opfordrer til 169.254.169.254 på AWS eller metadata.google.internal på GCP forekommer ofte hos inficerede værter.
  • Følgelig Enhver funden legitimationsoplysninger bliver øjeblikkeligt brugbar til at udgive nye npm-pakker eller pushe GitHub-arbejdsgange.

Eksfiltrering

  • Ormen opretter et nyt GitHub-lager med navnet Shai Hulud og skriver en dobbelt base64-kodet data.json med platformdetaljer, miljødumps og hemmeligheder. Som det kan ses, er denne støjende adfærd let at få øje på, hvis forsvarere ved, hvor de skal lede.
  • Den planter også en GitHub Actions-workflow, ofte på en gren med navnet Shai Hulud, der serialiserer ${{ toJSON(secrets) }} og sender dataene til en statisk webhook. Derudover fortsætter denne arbejdsgang, indtil nogen aktivt fjerner den.

Formering

  • Med ethvert opdaget npm-token opregner nyttelasten alle pakker, der ejes af den kompromitterede vedligeholder. Derefter henter den hver tarball, injicerer bundle.js og en postinstall-post og genudgiver pakken.
  • Som følge heraf kan snesevis af inficerede pakker dukke op i løbet af få timer, hvilket mangedobler eksplosionsradiusen på tværs af økosystemet.

Persistens og eksponering

  • Ormen holder ondsindede arbejdsgange i live og omdanner i flere tilfælde private arkiver til offentlige med en "-migration" suffiks. Alt i alt sikrer dette, at angriberen bevarer fodfæste og maksimerer datalækage.

Bemærkning om nøgledetektion
Denne usædvanlige brug af ${{ toJSON(secrets) }} i Handlinger er arbejdsgange sjældne. Derfor, Hold bør behandle det som en højsignalindikator under jagter.

Rensede arbejdsgangsmønstre, du bør lede efter

Denne usædvanlige brug af til JSON (hemmeligheder) i Handlinger er en højt indikatorsignal i denne hændelse.

Pseudokode for udbredelse på højt niveau (sikker, beskrivende)

Analytikere observerede denne løkke i stor skala, hvilket forklarer det hurtige spring fra snesevis til hundredvis af inficerede pakker.

Hvorfor dette er en orm i et pakkeøkosystem

En orm er malware, der spreder sig af sig selv uden at kræve manuelle trin fra operatøren i hvert trin. I operativsystemer udnytter orme normalt netværkssårbarheder til at flytte fra én maskine til en anden. I modsætning hertil opererer Shai-Hulud inde i npm-registreringsdatabasen. Dens effektive vej er gennem genbrug af legitimationsoplysninger.

Ormen udnytter stjålne npm-publiceringstokens. Så snart den får gyldige legitimationsoplysninger, genudgiver den inficerede versioner under andre pakker ejet af den samme vedligeholder. Derefter installeres disse pakker af intetanende udviklere eller CI-brugere, og cyklussen gentages.

Af denne grund er sikkerhedsanalytikere, herunder Mørk læsning, klassificer Shai-Hulud som en selvreplikerende orm snarere end en simpel trojaner eller en typosquatting-hændelse. Forskellen er vigtig: en trojaner kompromitterer typisk én vært, men en orm forstærker automatisk dens indflydelse på tværs af et økosystem.

"Sådan fungerer det" snydeark

For at opsummere Shai-Huluds livscyklus er her en ulempecisen oversigt over dens vigtigste trin:

  • En pakke med efterinstallation er installeret, og bundle.js udfører.
  • Nyttelasten dumper miljøvariabler, scanner filer og git-historik, kører Trøffelgrisog forespørger cloud-metadatatjenester. Derfor bliver enhver funden hemmelighed øjeblikkeligt nyttig.
  • Eksfiltrering sker på to måder: for det første ved at oprette et offentligt repository med navnet Shai Hulud med en dobbelt base64-kodet data.jsonfor det andet, ved at oprette en GitHub Actions-workflow, der poster ${{ toJSON(secrets) }} til en webhook.
  • Ved at bruge et stjålet npm-token genudgiver ormen alle andre pakker, der ejes af den kompromitterede vedligeholder, med den samme ondsindede hook. På denne måde formerer infektionen sig hurtigt.
  • Endelig har angriberen flere hemmeligheder, flere pakker at sprede igennem, og udholdenhed inde i GitHub-konti og -lagre.

Hvordan man undgår denne type angreb, praktisk talt

Shai-Hulud er et vækkeur. En orm, der stjæler tokens og genudgiver sig selv, er ikke en fremtidig risiko, den lever i npm-pakkers økosystem i dag. For at forhindre denne type angreb på forsyningskæden, teams har brug for kontroller, der er programmerbare, automatiserede og håndhæves direkte i CI/CD pipelines. Det er de samme forsvar, du allerede kan implementere med Xygeni.

Stop dårlige artefakter ved porten

Du bør scanne npm-pakker og tarballs, før de når udviklere eller CI-job. bundle.js filer, mistænkelig postinstallation hooks, og obfuskationsmarkører fungerer alle som tidlige røde flag. Desuden håndhæves afkølingsperioder og fastlåste versioner i pipelines forhindrer, at friske, ukontrollerede udgivelser forbruges automatisk.

Harden CI/CD som standard

Guardrails in CI/CD er essentielle. De afviser fusioner eller installationer, der introducerer nye scripts eller binære filer. Samtidig blokerer de arbejdsgange, der serialiserer hemmeligheder eller forsøger eksterne opslag. Teams bør også kræve installationer, der kun er låste filer (npm ci) på tværs af alle pipelines så afhængighedssæt forbliver reproducerbare og sikre.

Reducer token-eksplosionsradius

Hemmeligheder må ikke blive til enkeltstående fejlpunkter. Scan løbende kode, konfigurationer og pipeline output for eksponerede legitimationsoplysningerTokens bør have et snævert omfang, have korte levetider og roteres automatisk, når der registreres eksponering. Som regel skal enhver token, der bruges på en vært, der udførte en mistænkelig postinstallation, behandles som kompromitteret.

Se ormeadfærd tidligt

Anomali påvisning er nøglen. For eksempel kan pludselige stigninger i npm-publiceringshændelser, nye arbejdsgange, der dukker op uden grund, eller friske offentlige repos fyldt med mærkelige kodede filer, alle være tegn på ormeaktivitet. Derfor bør teams hurtigt udsende advarsler og isolere alle vedligeholdere eller runners, der viser disse advarselstegn.

Reparer hurtigt uden at ødelægge builds

Hastighed og sikkerhed skal gå hånd i hånd. Automatiseret pull requests kan erstatte kompromitterede npm-pakker med godkendte versioner. Derudover tilgængelighed og udnyttelsesevne Analyse sikrer, at opgraderinger forbliver minimale og stabile. Endelig genopbygges berørte CI-løbere fra rene billeder, når eksponeringen er bekræftet, for at forhindre angrebet i at sprede sig yderligere.

Indikatorer for kompromis (IoCs)

Når holdene analyserer Shai-Hulud, bør de holde øje med begge dele. statiske IoC'er i filer og adfærdsmæssige IoC'er in pipelines. Sammen hjælper disse signaler med at opdage infektioner tidligt og reagere, før ormen spreder sig yderligere.

Statiske IoC'er

Følgende SHA-256-digests match observeret bundle.js prøver:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

Derudover skal du være opmærksom på disse tilbagevendende mønstre:

  • A bundle.js ved pakkeroden.
  • "postinstall": "node bundle.js" indvendig package.json.
  • Navngivne arkiver Shai Hulud.
  • GitHub-arbejdsgange, der indeholder ${{ toJSON(secrets) }}.

Adfærdsmæssige IoC'er

Ud over filsignaturer afslører ormaktivitet sig gennem adfærd. For eksempel:

  • Pludselige udbrud af npm publicerer begivenheder fra én vedligeholder.
  • Nye arbejdsgange, der sender data til eksterne slutpunkter.
  • Udgående POST-anmodninger udløst fra CI-løbere.
  • Nyligt oprettede offentlige lagre med kodede blobs.

Hurtige jagter

Konklusion: Lærdomme fra Shai-Hulud

Shai-Hulud forsyningskædeangreb i npm-pakker viser, hvor skrøbelig nutidens softwareforsyningskæde er blevet. Denne orm gjorde mere end at tilføje ondsindet kode. Den stjal tokens, sendte data ud og genudgav derefter sig selv automatisk. På grund af dette spredte angrebet sig på timer i stedet for uger.

For udviklere og DevOps-teams er erfaringerne klare:

  • Hver installation kører kode. Selv en almindelig npm-pakke kan skjule en postinstall-orm.
  • Hver token har høj værdi. Når den først er stjålet, kan den bruges til at sprede malware yderligere.
  • Hver pipeline har brug for tjek. Uden guardrails På afhængigheder, arbejdsgange og hemmeligheder kan ét kompromis hurtigt ramme produktionen.

Derfor kræver det automatiske og nemme at håndhæve kontroller for at kunne stoppe angreb som Shai-Hulud. Teams bør scanne npm-pakker før installationer, bruge lockfile-builds, registrere mærkelig publiceringsaktivitet og holde tokens kortlivede. Disse trin er ikke længere valgfrie. I stedet er de fundamentet for modstandsdygtighed i moderne ... pipelines.

Hos Xygeni ser vi Shai-Hulud-forsyningskædeangrebet som en advarsel til hele open source-økosystemet. Den bæredygtige vej frem er at bringe forsyningskædesikkerhed direkte ind i udviklingsprocessen, på det punkt hvor kode, npm-pakker og ... pipelines forbindelse.

Nedenfor er den fulde liste over npm-pakker og -versioner, der er rapporteret som kompromitteret i Shai-Hulud. Brug den til at tjekke dine låsefiler, registre og CI. pipelines for eksponering.

Liste over kompromitterede pakker

📦 Forhåndsvisning af kompromitterede npm-pakker

Package Name Version Udgivelsesdato
json-rules-engine-forenklet0.2.12025-09-14T17:58:51.203Z
luftpilot0.8.82025-09-14T18:35:07.600Z
mcp-vidensgraf1.2.12025-09-14T18:35:09.494Z
luftchef0.3.12025-09-14T18:35:09.521Z
jumpgate0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/tilbagekaldsvindue1.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/konfigurationsmanager0.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/core0.2.12025-09-14T20:45:55.888Z
➡️ Se den fulde liste over kompromitterede pakker
Package Name Version Udgivelsesdato
json-rules-engine-forenklet0.2.12025-09-14T17:58:51.203Z
luftpilot0.8.82025-09-14T18:35:07.600Z
mcp-vidensgraf1.2.12025-09-14T18:35:09.494Z
luftchef0.3.12025-09-14T18:35:09.521Z
jumpgate0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/tilbagekaldsvindue1.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/konfigurationsmanager0.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/core0.2.12025-09-14T20:45:55.888Z
@hestjs/cqrs0.1.62025-09-14T20:45:55.966Z
@hestjs/scalar0.1.72025-09-14T20:45:56.386Z
ng2-fil-upload7.0.32025-09-15T02:44:29.555Z
kondensator-notifikationshåndterer0.0.22025-09-15T04:54:48.431Z
kondensator-plugin-vonage1.0.22025-09-15T04:54:48.501Z
kondensator-plugin-sundhedsapp0.0.22025-09-15T04:54:48.704Z
kondensatorandroidtilladelser0.0.42025-09-15T04:54:48.753Z
VoIP-opkaldskit1.0.22025-09-15T04:54:49.223Z
kondensator-plugin-ihealth1.1.82025-09-15T04:55:08.113Z
@kunst-ws/fælles2.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
@kunst-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
@kunst-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-kontekst2.0.212025-09-15T05:21:19.814Z
@kunst-ws/åbenapi0.1.92025-09-15T05:21:19.969Z
@art-ws/web-app1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
sca-tools-software-kompositionsanalyseværktøjer
Prioriter, afhjælp og sørg for dine softwarerisici
Få din gratis konto.
Der kræves ikke noget kreditkort.

Sikr din softwareudvikling og -levering

med Xygeni-produktsuite