Shai hulud - npm balíčky - útok na dodávateľský reťazec

Shai-Hulud: Vysvetlenie červa npm Packages

TL; DR

14. septembra 2025 výskumníci identifikovali Shai Hulud, samoreplikujúci sa červ ukrytý vo vnútri npm balíky, čím sa bežná aktualizácia závislostí premení na plnohodnotnú útok na dodávateľský reťazecPrvýkrát spozorovaný v @ctrl/malá farba Balík od Daniela dos Santosa Pereiru, Shai-Hulud, zbiera tajné údaje, odcudzuje ich prostredníctvom repozitárov a pracovných postupov GitHub a znova sa publikuje v registri pomocou ukradnutých prihlasovacích údajov. V priebehu niekoľkých dní sa počet infikovaných balíkov zvýšil z desiatok na stovky, čo potvrdzuje, že Šajhulud nie je len ďalší trójsky kôň, ale červ navrhnutý tak, aby sa automaticky šíril v ekosystéme npm.

vplyv: Každý vývojár alebo bežec CI, ktorý inštaluje verejné npm balíky, je vystavený riziku.

Okamžité akcie: blokovať známe verzie, prepínať na inštalácie iba z uzamknutých súborov, rotovať tokeny npm a GitHub, auditovať pracovné postupy a monitorovať indikátory kompromitácie (IoC).

Čo sa stane?

Útok na dodávateľský reťazec Shai-Hulud v balíkoch npm je jedným z najničivejších incidentov v poslednej dobe. Na rozdiel od izolovaných trójskych koní tento červ mieša krádež poverení, automatizované odcudzenie a samoreplikáciaV dôsledku toho sa časový harmonogram infekcie skrátil z týždňov na len hodiny.

Pre tímy DevOps je ponaučenie jasné: ak každá inštalácia dokáže spustiť kód, potom je každá aktualizácia závislostí potenciálnym bodom narušenia bezpečnosti.

Možné počiatočné vektorové a cielené poverenia

Včasná analýza naznačuje, že útok pravdepodobne začal ukradnuté prihlasovacie údajeNapríklad phishingové kampane falšujúce npm login alebo výzvy MFA mohli zachytiť vývojárske tokeny. Keď útočníci získali túto prvú pozíciu, červ sa rozšíril vložením do npm balíkov a krádežou ďalších tajných údajov z:

  • konfiguračné súbory npm Ako .npmrc, často obsahujúce publikačné tokeny.
  • Premenné prostredia a konfigurácie s GitHub PAT a CI/CD tajomstvo.
  • Koncové body cloudových metadát (AWS, GCP, Azure) čo prináša krátkodobé poverenia pre laterálny pohyb.

Krádež poverení sa preto stala odrazovým mostíkom. S platnými tokenmi npm a tajnými údajmi GitHub sa Shai-Hulud mohol sám replikovať naprieč viacerými balíkmi a repozitármi bez dodatočného ľudského úsilia.

Dopad útoku Shai-Hulud na dodávateľský reťazec vo vedení spoločnosti

Shai-Hulud je stále aktívny. Tento červ urýchľuje časový harmonogram dopadu. Čo kedysi trvalo týždne s trójskym koňom, teraz sa odohráva v priebehu hodín. V dôsledku toho, šírenie je rýchlejšie a ťažšie sa dá zastaviť. Postupuje sa prostredníctvom:

  • Krádež npm publish tokenov a GitHub secrets.
  • Opätovné publikovanie seba samého do iných npm balíkov.
  • Pridávanie škodlivých pracovných postupov akcií GitHub pre zachovanie perzistencie.

Koho sa to týka:

Každý tím, ktorý inštaluje verejné npm balíčky, je vystavený riziku. Okrem toho čelia vysokému riziku aj vývojári s uloženými npm alebo GitHub tokenmi. Zraniteľní sú aj behovníci CI, ktorí používajú tajné heslá so širokým rozsahom.

Obchodné riziko

Dopad na podnikanie rýchlo rastie. Ukradnuté tokeny môžu viesť k prevzatiu kontroly nad účtom, únosu balíkov a dokonca aj k zneužitiu cloudu. Okrem toho, perzistencia v pracovných postupoch GitHubu sťažuje ich čistenie. PretoTímy musia brať Shai-Hulud ako prebiehajúci incident, nie ako uzavretý.

Ako funguje útok Shai-Hulud Supply Chain v balíkoch npm

Ciele a motív útočníka

Kampaň je optimalizovaná pre tri veci:

  • Prvým cieľom je kradnúť poverenia vo veľkom rozsahu z vývojárskych notebookov a bežcov CI. Patria sem tokeny npm publish, tokeny GitHub a cloudové prihlasovacie údaje. V skutočnosti viaceré analýzy potvrdzujú systematický zber tajných údajov, ako je spúšťanie TruffleHog a dotazovanie koncových bodov cloudových metadát.
  • Druhým cieľom je automaticky sa šíri zneužívaním publikačných práv kompromitovaných správcov. V dôsledku toho sa jedna opora rýchlo rozšíri na mnoho, pretože nové infikované verzie iných balíkov sa objavia bez dodatočného ľudského úsilia.
  • Tretím cieľom je pretrvávajú a spoľahlivo sa vylučujú prostredníctvom infraštruktúry GitHub. Útočníci vytvoria verejné úložisko s názvom „Shai-Hulud“ s dvojitou základňou64 data.jsona okrem toho zavádzajú pracovný postup, ktorý serializuje ${{ toJSON(tajomstvá) }} a uverejní ho na statickom webhooku.

Pravdepodobným prínosom je dlhodobý prístup k registrom a zdrojovému kódu, rýchly laterálny presun do cloudových účtov a možnosť ďalšieho vyzbrojenia dodávateľského reťazca. Verejné správy ukazujú, že súkromné ​​repozitáre boli prevedené na verejné s... „-migrácia“ prípona, ktorá zvyšuje expozíciu dátam a dynamiku

Vnútri užitočného nákladu Shai-Hulud: bundle.js v balíkoch npm

Shai-Hulud sa dodáva ako veľký, zoskupený s Webpackom a silne minimalizovaný Súbor JavaScriptu (bundle.js, približne 3 – 3.7 MB) ktorý sa vykonáva z po inštalácii zavesiť package.jsonV dôsledku toho, Každá inštalácia automaticky spúšťa užitočné zaťaženie. Tento dizajn skrýva identifikátory, komprimuje tok riadenia a vkladá všetku logiku do jedného artefaktu, ktorý sa vykoná počas inštalácie. Analytici opakovane potvrdzujú zväzovanie Webpackov, nezvyčajnú veľkosť súborov a vykonávanie počas inštalácie.

Zmätok a antianalytické vlastnosti, ktoré uvidíte vo vzorkách:

  • Minifikovaný graf modulov s číselnými ID modulov, riedkymi komentármi a splošteným tokom riadenia. Navyše, Táto štruktúra mimoriadne sťažuje manuálnu kontrolu.
  • Skrývanie reťazca prostredníctvom vrstiev base64 a konštrukčných pomocníkov. Napríklad, Opakované kódovanie a dekódovanie base64 sa zvyčajne objavuje okolo rutín exfiltrácie.
  • Dynamické odoslanie cez eval-štýlové vzory a generované telá funkcií, čo umožňuje kódu meniť správanie počas behu.
  • Filtrovanie OS uprednostňovať spustenie v systémoch Linux a macOS, najmä na bežiacich CI a vývojárskych notebookoch.

Z funkčného hľadiska je balík modulárny. Štúdie opisujú moduly na objavovanie operačného systému, skenovanie súborového systému a tajných údajov Git, prístup k cloudovému SDK, operácie s GitHub API a propagačný engine, ktorý upravuje ďalšie balíky, ktoré správca vlastní. V skutočnosti StepSecurity aj ReversingLabs zdôrazňujú funkciu, ktorá automaticky aktualizuje balíky so škodlivým hookom.

Vykonanie počas inštalácie v Shai-Hulud: Ako npm balíky spúšťajú červa

Útok začína, keď poinštalácii sa spustí uzol bundle.js. V tomto bode sa skript inicializuje a rozbalí pracovný stav v pamäti, čím sa pripraví pôda pre plnú prevádzku červa.

Objav a zber

  • Úžitková záťaž vypíše súbor process.env a prehľadá lokálne súbory, či neobsahujú tajné kódy s vysokou entropiou a prefixy tokenov. Okrem toho rozširuje pokrytie spustením TruffleHog.
  • Dotazuje koncové body cloudových metadát na zhromažďovanie krátkodobých poverení. Napríklad, hovory na 169.254.169.254 na AWS alebo metadata.google.internal na GCP sa často objavujú u infikovaných hostiteľov.
  • V dôsledku toho, Akékoľvek nájdené poverenia sa stanú okamžite použiteľnými na publikovanie nových npm balíčkov alebo na spúšťanie pracovných postupov GitHub.

Exfiltrácia

  • Červ vytvorí nové úložisko GitHub s názvom Shai Hulud a zapíše súbor s dvojitým kódovaním base64 data.json s podrobnosťami o platforme, výpismi prostredia a tajnými údajmi. Ako je vidieť, toto hlučné správanie sa dá ľahko odhaliť, ak obrancovia vedia, kde hľadať.
  • Taktiež vytvára pracovný postup GitHub Actions, často na vetve s názvom šaj-hulud, ktorý serializuje ${{ toJSON(secrets) }} a odošle dáta do statického webhooku. Okrem toho tento pracovný postup pretrváva, kým ho niekto aktívne neodstráni.

Propagácia

  • S akýmkoľvek objaveným npm tokenom dátový súbor vymenuje všetky balíčky, ktoré vlastní napadnutý správca. Potom načíta každý tarball, vloží súbor bundle.js a položku po inštalácii a znova publikuje balíček.
  • V dôsledku toho sa v priebehu niekoľkých hodín môžu objaviť desiatky infikovaných balíkov, čím sa znásobí polomer šírenia v celom ekosystéme.

Vytrvalosť a expozícia

  • Červ udržiava škodlivé pracovné postupy pri živote a v niekoľkých prípadoch premieňa súkromné ​​repozitáre na verejné pomocou... „-migrácia“ prípona. Celkovo to zabezpečuje, že si útočník udrží oporu a maximalizuje únik údajov.

Poznámka k detekcii kľúča
Toto nezvyčajné použitie ${{ toJSON(secrets) }} v pracovných postupoch Akcie je zriedkavé. Preto, Tímy by to mali počas lovu považovať za indikátor vysokého signálu.

Prepracovaný vzor pracovného postupu, ktorý by ste mali hľadať

Toto nezvyčajné použitie na JSON (tajomstvá) v Akciách je v tomto incidente indikátorom vysokého signálu.

Pseudokód na propagáciu na vysokej úrovni (bezpečný, popisný)

Analytici pozorovali túto slučku vo veľkom meradle, čo vysvetľuje rýchly nárast z desiatok na stovky infikovaných balíkov.

Prečo je to červ v ekosystéme balíkov

Červ je malvér, ktorý sa šíri sám bez nutnosti manuálnych krokov operátora v každej fáze. V operačných systémoch červy zvyčajne zneužívajú zraniteľnosti siete na presun z jedného počítača na druhý. Naproti tomu Shai-Hulud funguje vo vnútri registra npm. Jeho efektívna cesta vedie cez opätovné použitie poverení.

Červ využíva ukradnuté npm publish tokeny. Hneď ako získa platné prihlasovacie údaje, znova publikuje infikované verzie v rámci iných balíkov vlastnených tým istým správcom. Následne tieto balíky nainštalujú nič netušiaci vývojári alebo bežci CI a cyklus sa opakuje.

Z tohto dôvodu bezpečnostní analytici vrátane Temné čítanie, klasifikovať Šaj-Hulúda ako samoreplikujúci sa červ a nie obyčajný trójsky kôň alebo incident s typosquattingom. Rozdiel je dôležitý: trójsky kôň zvyčajne napadne jedného hostiteľa, ale červ automaticky zosilňuje svoj dopad v celom ekosystéme.

Podvodník „Ako to funguje“

Aby sme zhrnuli životný cyklus Shai-Huluda, tu je jeden podvodcisrozdelenie jeho hlavných krokov:

  • Balíček s po inštalácii je nainštalovaný a bundle.js vykonáva.
  • Úžitkové zaťaženie vypíše premenné prostredia, prehľadá súbory a históriu gitu, spustí TruffleHoga dotazuje cloudové služby metadát. V dôsledku toho sa akýkoľvek nájdený tajný údaj stáva okamžite užitočným.
  • K exfiltrácii dochádza dvoma spôsobmi: po prvé, vytvorením verejného repozitára s názvom Shai Hulud s dvojitým kódovaním base64 data.jsonpo druhé, zavedením pracovného postupu akcií GitHub, ktorý uverejňuje príspevky ${{ toJSON(secrets) }} k webhooku.
  • Pomocou akéhokoľvek ukradnutého npm tokenu červ znova publikuje všetky ostatné balíky vlastnené napadnutým správcom s rovnakým škodlivým hookom. Týmto spôsobom sa infekcia rýchlo množí.
  • Nakoniec, útočník má viac tajomstiev, viac balíkov na šírenie a vytrvalosť v rámci účtov a repozitárov GitHub.

Ako sa prakticky vyhnúť tomuto typu útoku

Shai-Hulud je varovným signálom. Červ, ktorý kradne tokeny a znova sa publikuje, nepredstavuje budúce riziko, je aktívny v... ekosystém balíčkov npm dnes. Aby sa predišlo tomuto typu útok na dodávateľský reťazectímy potrebujú kontroly, ktoré sú programovateľné, automatizované a priamo vynucované CI/CD pipelineToto sú tie isté obrany, ktoré už môžete implementovať pomocou Xygeni.

Zastavte zlé artefakty pri bráne

Balíky a tarbally npm by ste mali skenovať skôr, ako sa dostanú k vývojárom alebo k úlohám CI. Nadmerná veľkosť bundle.js súbory, podozrivé po inštalácii hooksa značky zahmlievania slúžia ako včasné varovné signály. Okrem toho, presadzovanie období na upokojenie a pripnuté verzie v pipelines zabraňuje automatickému konzumovaniu čerstvých, neoverených vydaní.

stvrdnúť CI/CD V predvolenom nastavení

Guardrails in CI/CD sú nevyhnutné. Odmietajú zlúčenia alebo inštalácie, ktoré zavádzajú nové skripty alebo binárne súbory. Zároveň blokujú pracovné postupy, ktoré serializujú tajné údaje alebo sa pokúšajú o externé príspevky. Tímy by mali tiež vyžadovať inštalácie iba s uzamykateľnými súbormi (npm ci) vo všetkých pipelinetakže sady závislostí zostávajú reprodukovateľné a bezpečné.

Znížte polomer výbuchu žetónov

Tajomstvá sa nesmú stať jedinými bodmi zlyhania. Neustále skenujte kód, konfigurácie a pipeline výstup pre odhalené prihlasovacie údajeTokeny by mali mať úzky rozsah, krátku životnosť a mali by sa automaticky rotovať pri detekcii vystavenia. Spravidla by sa každý token použitý na hostiteľovi, ktorý vykonal podozrivú poinštaláciu, mal považovať za kompromitovaný.

Včasné zistenie správania červov

Detekcia anomálie je kľúčové. Napríklad náhle nárasty udalostí publikovania npm, nové pracovné postupy, ktoré sa objavia bezdôvodne, alebo nové verejné repozitáre naplnené zvláštnymi kódovanými súbormi môžu signalizovať aktivitu červov. Preto by tímy mali rýchlo spustiť upozornenia a izolovať všetkých správcov alebo bežcov, ktorí vykazujú tieto varovné signály.

Rýchla oprava bez narušenia zostavy

Rýchlosť a bezpečnosť musia ísť ruka v ruke. Automatizované pull requests môže nahradiť kompromitované npm balíky overenými verziami. Okrem toho dosiahnuteľnosť a využiteľnosť Analýza zabezpečuje, že aktualizácie zostanú minimálne a stabilné. Nakoniec, po potvrdení expozície, znovu vytvorte postihnuté bežce CI z čistých obrazov, čím zabránite ďalšiemu šíreniu útoku.

Indikátory kompromisu (IoC)

Pri analýze Shai-Huluda by si tímy mali všímať oboje statické IoC v súboroch a behaviorálne IoC in pipelineTieto signály spolu pomáhajú včas odhaliť infekcie a reagovať skôr, ako sa červ ďalej rozšíri.

Statické IoC

Nasledujúce zhody SHA-256 digestov boli pozorované bundle.js vzorky:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

Okrem toho si všímajte tieto opakujúce sa vzorce:

  • A bundle.js v koreňovom adresári balíka.
  • "postinstall": "node bundle.js" vo vnútri package.json.
  • Pomenované repozitáre Shai Hulud.
  • Pracovné postupy GitHubu obsahujúce ${{ toJSON(secrets) }}.

Behaviorálne IoC

Okrem podpisov súborov sa aktivita červov prejavuje aj správaním. Napríklad:

  • Náhle výbuchy udalostí publikovania npm od jedného správcu.
  • Nové pracovné postupy, ktoré prenášajú dáta do externých koncových bodov.
  • Odchádzajúce požiadavky POST spustené z bežcov CI.
  • Nedávno vytvorené verejné repozitáre s kódovanými blobmi.

Rýchle lovy

Záver: Poučenie od Šaj-Hulúda

Útok na dodávateľský reťazec Shai-Hulud v npm balíkoch ukazuje, aký krehký sa stal dnešný dodávateľský reťazec softvéru. Tento červ urobil viac než len pridanie škodlivého kódu. Ukradol tokeny, odoslal dáta a potom sa automaticky znova publikoval. Z tohto dôvodu sa útok rozšíril v priebehu hodín namiesto týždňov.

Pre vývojárov a DevOps tímy sú ponaučenia jasné:

  • Každá inštalácia spúšťa kód. Dokonca aj bežný npm balík môže skrývať poinštalačného červa.
  • Každý token má vysokú hodnotu. Po odcudzení sa môže použiť na ďalšie šírenie škodlivého softvéru.
  • každý pipeline potrebuje kontroly. Bez guardrails čo sa týka závislostí, pracovných postupov a tajných údajov, jeden kompromis môže rýchlo zasiahnuť produkčný systém.

Zastavenie útokov, ako je Shai-Hulud, si preto vyžaduje automatické a ľahko vynucovateľné kontroly. Tímy by mali pred inštaláciami skenovať balíčky npm, používať zostavenia lockfile, detekovať zvláštnu publikačnú aktivitu a udržiavať tokeny krátkodobé. Tieto kroky už nie sú voliteľné. Namiesto toho sú základom odolnosti v modernej... pipelines.

V spoločnosti Xygeni vnímame útok Shai-Hulud na dodávateľský reťazec ako varovanie pre celý ekosystém open source. Udržateľnou cestou vpred je zaviesť bezpečnosť dodávateľského reťazca priamo do vývojového procesu, v bode, kde sa kód, npm balíčky a pipelines pripojením.

Nižšie je uvedený kompletný zoznam balíkov a verzií npm, ktoré boli v Shai-Hulud nahlásené ako kompromitované. Použite ho na kontrolu súborov lockfile, registrov a CI. pipelines pre expozíciu.

Zoznam kompromitovaných balíkov

📦 Ukážka kompromitovaných npm balíkov

Package Name verzia Dátum zverejnenia
zjednodušený engine pre pravidlá JSON0.2.12025-09-14T17:58:51.203Z
pilot lietadla0.8.82025-09-14T18:35:07.600Z
graf znalostí mcp1.2.12025-09-14T18:35:09.494Z
veliteľ letectva0.3.12025-09-14T18:35:09.521Z
skoková brána0.0.22025-09-14T18:35:09.651Z
tv-cli0.1.52025-09-14T18:35:10.996Z
@thangved/okno-spätného-volania1.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/validácia0.1.62025-09-14T20:45:55.595Z
@hestjs/jadro0.2.12025-09-14T20:45:55.888Z
➡️ Zobraziť kompletný zoznam kompromitovaných balíkov
Package Name verzia Dátum zverejnenia
zjednodušený engine pre pravidlá JSON0.2.12025-09-14T17:58:51.203Z
pilot lietadla0.8.82025-09-14T18:35:07.600Z
graf znalostí mcp1.2.12025-09-14T18:35:09.494Z
veliteľ letectva0.3.12025-09-14T18:35:09.521Z
skoková brána0.0.22025-09-14T18:35:09.651Z
tv-cli0.1.52025-09-14T18:35:10.996Z
@thangved/okno-spätného-volania1.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/validácia0.1.62025-09-14T20:45:55.595Z
@hestjs/jadro0.2.12025-09-14T20:45:55.888Z
@hestjs/cqrs0.1.62025-09-14T20:45:55.966Z
@hestjs/skalár0.1.72025-09-14T20:45:56.386Z
nahrávanie súborov ng27.0.32025-09-15T02:44:29.555Z
obsluha upozornení na kondenzátor0.0.22025-09-15T04:54:48.431Z
kondenzátor-plugin-vonage1.0.22025-09-15T04:54:48.501Z
capacitor-plugin-healthapp0.0.22025-09-15T04:54:48.704Z
povolenia pre kondenzátor pre Android0.0.42025-09-15T04:54:48.753Z
VoIP-callkit1.0.22025-09-15T04:54:49.223Z
kondenzátor-plugin-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-node2.0.132025-09-15T05:21:18.849Z
@art-ws/config-ts2.0.72025-09-15T05:21:19.408Z
@art-ws/db-kontext2.0.212025-09-15T05:21:19.814Z
@art-ws/openapi0.1.92025-09-15T05:21:19.969Z
@art-ws/webová aplikácia1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
nástroje na analýzu zloženia softvéru SCA
Stanovte si priority, odstraňujte a zabezpečte svoje softvérové ​​riziká
Získajte svoj bezplatný účet.
Nie je potrebná kreditná karta.

Zabezpečte si vývoj a dodávku softvéru

s produktovým balíkom Xygeni