Shai hulud - npm balíčky - útok na dodavatelský řetězec

Shai-Hulud: Vysvětlení červa npm Packages

TL, DR

14. září 2025 vědci identifikovali Shai Hulud, uvnitř skrytý samoreplikující se červ npm balíčky, čímž se rutinní aktualizace závislostí promění v plnohodnotnou útok na dodavatelský řetězecPoprvé spatřen v @ctrl/malábarva Balíček od Daniela dos Santose Pereiry, Shai-Hulud, shromažďuje tajné informace, odhaluje je prostřednictvím repozitářů a pracovních postupů GitHubu a znovu se publikuje v registru pomocí ukradených přihlašovacích údajů. Během několika dní se počet infikovaných balíčků zvýšil z desítek na stovky, což potvrzuje, že Šajhulud není jen další trojský kůň, ale červ určený k automatickému šíření v ekosystému npm.

Dopad: Každý vývojář nebo CI runner, který instaluje veřejné npm balíčky, je v ohrožení.

Okamžitá opatření: blokovat známé verze, přepínat na instalace pouze z lockfile, rotovat tokeny npm a GitHub, auditovat pracovní postupy a monitorovat indikátory kompromitace (IoC).

Co se stalo?

Jedno Útok na dodavatelský řetězec Shai-Hulud v balíčcích npm je jedním z nejničivějších incidentů v nedávné paměti. Na rozdíl od izolovaných trojských koní tento červ mísí krádež přihlašovacích údajů, automatizované odcizení a samoreplikaceV důsledku toho se časová osa infekce zkrátila z týdnů na pouhé hodiny.

Pro DevOps týmy je ponaučení jasné: pokud každá instalace dokáže spustit kód, pak je každá aktualizace závislostí potenciálním bodem narušení bezpečnosti.

Možné počáteční vektorové a cílené pověření

Raná analýza naznačuje, že útok pravděpodobně začal ukradené pověřeníNapříklad phishingové kampaně falešné pro NPM. login nebo výzvy MFA mohly zachytit vývojářské tokeny. Jakmile útočníci získali tuto první oporu, červ se šířil vkládáním do balíčků npm a krádeží dalších tajných dat z:

  • konfigurační soubory npm jako .npmrc, často obsahující publikační tokeny.
  • Proměnné prostředí a konfigurace s PATy z GitHubu a CI/CD tajemství.
  • Koncové body cloudových metadat (AWS, GCP, Azure) což vede k krátkodobým přihlašovacím údajům pro laterální přesun.

Krádež přihlašovacích údajů se proto stala odrazovým můstkem. S platnými tokeny npm a tajnými kódy GitHubu se Shai-Hulud mohl sám replikovat napříč více balíčky a repozitáři bez nutnosti dalšího lidského úsilí.

Dopad útoku Shai-Huluda na dodavatelský řetězec ve vedení společnosti

Shai-Hulud je aktivní dodnes. Tento červ zrychluje časový harmonogram dopadu. Co dříve u trojského koně trvalo týdny, se nyní odehrává během hodin. V důsledku toho... Šíření je rychlejší a hůře se zastavuje. Postupuje se o:

  • Krádež tokenů pro publikování v NPM a tajných kódů GitHubu.
  • Znovu se publikuje do jiných npm balíčků.
  • Přidávání škodlivých pracovních postupů akcí GitHubu pro zajištění perzistence.

Koho se to týká:

Každý tým, který instaluje veřejné npm balíčky, je vystaven riziku. Vývojáři s npm tokeny nebo tokeny GitHub uloženými v mezipaměti čelí vysokému riziku. Zranitelní jsou také CI runneri, kteří používají široce definované tajné kódy.

Obchodní riziko

Dopad na podnikání rychle roste. Ukradené tokeny mohou vést k převzetí kontroly nad účty, únosu balíčků a dokonce i zneužití cloudu. Navíc perzistence v pracovních postupech GitHubu ztěžuje jejich vyčištění. ProtoTýmy musí Shai-Hulud považovat za probíhající incident, nikoli za uzavřený.

Jak funguje útok Shai-Hulud Supply Chain v npm balíčcích

Cíle a motiv útočníka

Kampaň je optimalizována pro tři věci:

  • Prvním cílem je kradení přihlašovacích údajů ve velkém měřítku z vývojářských notebooků a běžců CI. To zahrnuje tokeny npm publish, tokeny GitHubu a cloudové přihlašovací údaje. Více analýz dokonce potvrzuje systematické sběry tajných dat, jako je spouštění TruffleHog a dotazování koncových bodů cloudových metadat.
  • Druhým cílem je automaticky se šíří zneužíváním publikačních práv kompromitovaných správců. V důsledku toho se jedna opora rychle rozrůstá do mnoha, protože nové infikované verze jiných balíčků se objevují bez dalšího lidského úsilí.
  • Třetím cílem je přetrvávají a spolehlivě se vylučují prostřednictvím infrastruktury GitHub. Útočníci vytvoří veřejné repozitář s názvem „Shai-Hulud“ s dvojitou bází64 data.jsona navíc zavádějí pracovní postup, který serializuje ${{ toJSON(tajemství) }} a odešle ho na statický webhook.

Pravděpodobným přínosem bude dlouhodobý přístup k registrům a zdrojovému kódu, rychlý laterální přesun do cloudových účtů a možnost dalšího vyzbrojení dodavatelského řetězce. Veřejné zprávy ukazují, že soukromá repozitáře byla převedena na veřejná s… „-migrace“ přípona, která zvyšuje expozici datům a dynamiku

Uvnitř nákladu Shai-Hulud: bundle.js v balíčcích npm

Šaj-Hulud se dodává jako velký, svázaný s Webpackem a silně minifikovaný Soubor JavaScriptu (bundle.js, přibližně 3–3.7 MB) který se spouští z po instalaci zavěsit balíček.jsonV důsledku toho, Každá instalace automaticky spouští datovou část. Tento design skrývá identifikátory, komprimuje tok řízení a vkládá veškerou logiku do jednoho artefaktu, který se spouští během instalace. Analytici opakovaně potvrzují sdružování Webpacků, neobvyklou velikost souborů a spouštění během instalace.

Rysy zatemňování a antianalýzy, které uvidíte ve vzorcích:

  • Minifikovaný graf modulů s číselnými ID modulů, řídkými komentáři a zploštělým tokem řízení. Navíc, Tato struktura extrémně ztěžuje manuální kontrolu.
  • Skrývání řetězců prostřednictvím vrstev base64 a konstrukčních pomocníků. Například, Opakované kódování a dekódování base64 se obvykle objevuje kolem rutin exfiltrace.
  • Dynamické odeslání přes eval-stylové vzory a generovaná těla funkcí, což umožňuje kódu měnit chování za běhu.
  • Filtrování operačních systémů preferovat spouštění v Linuxu a macOS, zejména na běžcích CI a vývojářských noteboocích.

Z funkčního hlediska je balíček modulární. Článek popisuje moduly pro zjišťování operačních systémů, skenování souborových systémů a tajných dat Git, přístup k cloudovým SDK, operace s GitHub API a propagační engine, který upravuje další balíčky, které správce vlastní. StepSecurity a ReversingLabs dokonce zdůrazňují funkci, která automaticky aktualizuje balíčky se škodlivým hookem.

Spuštění během instalace v Shai-Huludu: Jak npm balíčky spouštějí červa

Útok začíná, když po instalaci běží uzel bundle.js. V tomto okamžiku se skript inicializuje a rozbalí v paměti v pracovním stavu, čímž připraví půdu pro plnohodnotný provoz červa.

Objev a sklizeň

  • Datová část vypíše soubor process.env a prohledá lokální soubory, aby našla tajné kódy s vysokou entropií a prefixy tokenů. Kromě toho rozšiřuje pokrytí spuštěním TruffleHog.
  • Dotazuje koncové body cloudových metadat za účelem shromažďování krátkodobých přihlašovacích údajů. Například, volá do 169.254.169.254 na AWS nebo metadata.google.internal na GCP se často objevují u infikovaných hostitelů.
  • V důsledku toho, Jakékoli nalezené přihlašovací údaje jsou okamžitě použitelné pro publikování nových balíčků NPM nebo pro nahrání pracovních postupů na GitHub.

Exfiltrace

  • Červ vytvoří nové repozitář GitHubu s názvem Shai Hulud a zapíše kód s dvojitým base64 kódováním data.json s podrobnostmi o platformě, výpisy prostředí a tajnými kódy. Jak je vidět, toto hlučné chování lze snadno odhalit, pokud obránci vědí, kde hledat.
  • Také zavádí pracovní postup akcí GitHubu, často na větvi s názvem šaj-hulud, který serializuje ${{ toJSON(secrets) }} a odešle data do statického webhooku. Tento pracovní postup navíc přetrvává, dokud jej někdo aktivně neodstraní.

Propagace

  • S jakýmkoli objeveným npm tokenem datová část vyjmenová všechny balíčky vlastněné napadeným správcem. Poté načte každý tarball, vloží bundle.js a položku po instalaci a znovu publikuje balíček.
  • V důsledku toho se během několika hodin mohou objevit desítky infikovaných balíčků, což znásobí poloměr šíření v celém ekosystému.

Perzistence a expozice

  • Červ udržuje škodlivé pracovní postupy při životě a v několika případech převádí soukromá repozitáře na veřejná pomocí... „-migrace“ přípona. Celkově to zajišťuje, že si útočník udrží oporu a maximalizuje únik dat.

Poznámka k detekci klíče
Toto neobvyklé použití ${{ toJSON(secrets) }} v pracovních postupech Akcí je vzácné. Proto, Týmy by to měly během lovu považovat za indikátor vysokého signálu.

Sanitizovaný vzorec pracovního postupu, který byste měli hledat

Toto neobvyklé použití na JSON (tajné klíče) v Akcích je v tomto incidentu indikátorem vysokého signálu.

Pseudokód šíření na vysoké úrovni (bezpečný, popisný)

Analytici pozorovali tuto smyčku ve velkém měřítku, což vysvětluje rychlý skok z desítek na stovky infikovaných balíčků.

Proč je to červ v ekosystému balíčků

Červ je malware, který se šíří sám, aniž by v každé fázi vyžadoval ruční zásahy operátora. V operačních systémech červi obvykle zneužívají zranitelnosti sítě k přesunu z jednoho počítače na druhý. Shai-Hulud naopak funguje uvnitř registru npm. Jeho efektivní cesta vede přes opětovné použití pověření.

Červ využívá ukradených publikačních tokenů npm. Jakmile získá platné přihlašovací údaje, znovu publikuje infikované verze pod jinými balíčky vlastněnými stejným správcem. Následně tyto balíčky nainstalují nic netušící vývojáři nebo spouštěči CI a cyklus se opakuje.

Z tohoto důvodu bezpečnostní analytici, včetně Tmavé čtení, zařadit Šaj-Hulúda jako samoreplikující se červ spíše než jednoduchý trojský kůň nebo incident typusquatting. Rozdíl je důležitý: trojský kůň obvykle napadne jednoho hostitele, ale červ automaticky zesiluje svůj dopad v celém ekosystému.

Tahák „Jak to funguje“

Abychom shrnuli životní cyklus Shai-Hulúda, zde je jeden podvodcisrozpis jeho hlavních kroků:

  • Balíček s po instalaci je nainstalován a bundle.js provádí.
  • Datová část vypíše proměnné prostředí, prohledá soubory a historii gitu, spustí TruffleHoga dotazuje se na cloudové služby metadat. V důsledku toho se jakýkoli nalezený tajný kód stává okamžitě užitečným.
  • K exfiltraci dochází dvěma způsoby: za prvé, vytvořením veřejného repozitáře s názvem Shai Hulud s dvojitým kódováním base64 data.jsonza druhé, zavedením pracovního postupu akcí GitHubu, který zveřejňuje příspěvky ${{ toJSON(secrets) }} k webhooku.
  • Červ pomocí ukradeného npm tokenu znovu publikuje všechny ostatní balíčky vlastněné napadeným správcem se stejným škodlivým hookem. Tímto způsobem se infekce rychle množí.
  • Útočník má nakonec více tajemství, více balíčků k šíření a perzistence uvnitř účtů a repozitářů GitHubu.

Jak se tomuto typu útoku prakticky vyhnout

Shai-Hulud je varovným signálem. Červ, který krade tokeny a znovu se publikuje, nepředstavuje budoucí riziko, je aktivní v ekosystém balíčků npm dnes. Aby se tomuto typu zabránilo útok na dodavatelský řetězecTýmy potřebují kontrolní mechanismy, které jsou programovatelné, automatizované a přímo vynucované CI/CD pipelines. Jedná se o stejné obrany, které již můžete implementovat pomocí Xygeni.

Zastavte špatné artefakty u brány

Balíčky a tarbally npm byste měli skenovat, než se dostanou k vývojářům nebo k úlohám CI. Nadměrná velikost bundle.js soubory, podezřelé po instalaci hooksa značky zmatku slouží jako včasné varovné signály. Navíc vynucování lhůt pro uklidnění a připnutí verzí v pipelines zabraňuje automatické konzumaci čerstvých, neověřených verzí.

Ztvrdnout CI/CD Ve výchozím nastavení

Guardrails in CI/CD jsou nezbytné. Odmítají sloučení nebo instalace, které zavádějí nové skripty nebo binární soubory. Zároveň blokují pracovní postupy, které serializují tajné kódy nebo se pokoušejí o externí příspěvky. Týmy by měly také vyžadovat instalace pouze s uzamčenými soubory (npm ci) napříč všemi pipelinetakže sady závislostí zůstávají reprodukovatelné a bezpečné.

Zmenšete poloměr výbuchu žetonů

Tajemství se nesmí stát jediným bodem selhání. Neustále prohledávejte kód, konfigurace a pipeline výstup pro odhalené přihlašovací údajeTokeny by měly být úzce vymezeny, s krátkou životností a automaticky rotovány při detekci ohrožení. Zpravidla by se jakýkoli token použitý na hostiteli, který provedl podezřelou postinstalační akci, měl považovat za kompromitovaný.

Včasné zjištění chování červů

Detekce anomálií je klíčové. Například náhlé nárůsty událostí publikování v npm, nové pracovní postupy, které se objevují bezdůvodně, nebo nová veřejná repozitáře plná podivně zakódovaných souborů, to vše může signalizovat aktivitu červů. Týmy by proto měly rychle spustit varování a izolovat všechny správce nebo spouštěče, kteří vykazují tyto varovné signály.

Rychlá oprava bez narušení sestavení

Rychlost a bezpečnost musí jít ruku v ruce. Automatizované pull requests může nahradit kompromitované balíčky npm ověřenými verzemi. Kromě toho dosažitelnost a zneuživatelnost Analýza zajišťuje minimální a stabilní upgrady. Nakonec, jakmile je expozice potvrzena, znovu sestavte postižené CI runnery z čistých obrazů, čímž zabráníte dalšímu šíření útoku.

Indikátory kompromisu (IoC)

Při analýze Shai-Huluda by si týmy měly všímat obou faktorů. statické IoC v souborech a behaviorální IoC in pipelines. Tyto signály společně pomáhají včas odhalit infekce a reagovat dříve, než se červ dále rozšíří.

Statické IoC

Následující pozorované shody SHA-256 digestů bundle.js vzorky:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

Dále si všímejte těchto opakujících se vzorců:

  • A bundle.js v kořenovém adresáři balíčku.
  • "postinstall": "node bundle.js" uvnitř package.json.
  • Pojmenované repozitáře Shai Hulud.
  • Pracovní postupy GitHubu obsahující ${{ toJSON(secrets) }}.

Behaviorální IoC

Kromě signatur souborů se aktivita červů projevuje i chováním. Například:

  • Náhlé výbuchy publikování událostí npm od jednoho správce.
  • Nové pracovní postupy, které odesílají data do externích koncových bodů.
  • Odchozí požadavky POST spouštěné z běžců CI.
  • Nedávno vytvořené veřejné repozitáře s kódovanými objekty blob.

Rychlé lovy

Závěr: Poučení od Šaj-Hulúda

Jedno Útok na dodavatelský řetězec Shai-Hulud v npm balíčcích ukazuje, jak křehký se stal dnešní dodavatelský řetězec softwaru. Tento červ dokázal víc než jen přidávat škodlivý kód. Kradl tokeny, odesílal data a poté se automaticky znovu publikoval. Kvůli tomu se útok rozšířil během hodin místo týdnů.

Pro vývojáře a DevOps týmy jsou ponaučení jasná:

  • Každá instalace spouští kód. I běžný npm balíček může skrývat postinstalačního červa.
  • Každý token má vysokou hodnotu. Jakmile je odcizen, může být použit k dalšímu šíření malwaru.
  • Každý pipeline potřebuje kontroly. Bez guardrails co se týče závislostí, pracovních postupů a tajných klíčů, jeden kompromis může rychle zasáhnout produkční prostředí.

Zastavení útoků, jako je Shai-Hulud, proto vyžaduje automatické a snadno vynucovatelné kontroly. Týmy by měly před instalací skenovat balíčky npm, používat sestavení lockfile, detekovat podivnou publikační aktivitu a udržovat tokeny krátkodobé. Tyto kroky již nejsou volitelné. Místo toho jsou základem odolnosti v moderním prostředí. pipelines.

V Xygeni vnímáme útok Shai-Hulud na dodavatelský řetězec jako varování pro celý ekosystém open source. Udržitelnou cestou vpřed je začlenit bezpečnost dodavatelského řetězce přímo do vývojového procesu, tedy do bodu, kdy se kód, npm balíčky a… pipelines připojením.

Níže je uveden úplný seznam balíčků a verzí npm, které byly v Shai-Huludu nahlášeny jako kompromitované. Použijte jej ke kontrole souborů zámků, registrů a CI. pipelines pro expozici.

Seznam kompromitovaných balíčků

📦 Náhled kompromitovaných npm balíčků

Package Name Verze Datum publikace
zjednodušený engine pro pravidla JSON0.2.12025-09-14T17:58:51.203Z
pilot letadla0.8.82025-09-14T18:35:07.600Z
graf znalostí mcp1.2.12025-09-14T18:35:09.494Z
velitel 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-zpětného-volání1.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/validace0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ Zobrazit úplný seznam kompromitovaných balíčků
Package Name Verze Datum publikace
zjednodušený engine pro pravidla JSON0.2.12025-09-14T17:58:51.203Z
pilot letadla0.8.82025-09-14T18:35:07.600Z
graf znalostí mcp1.2.12025-09-14T18:35:09.494Z
velitel 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-zpětného-volání1.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/validace0.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/skalární0.1.72025-09-14T20:45:56.386Z
nahrání-souboru-ng27.0.32025-09-15T02:44:29.555Z
obslužná rutina oznámení o kondenzátoru0.0.22025-09-15T04:54:48.431Z
kondenzátor-plugin-vonage1.0.22025-09-15T04:54:48.501Z
kondenzátor-plugin-healthapp0.0.22025-09-15T04:54:48.704Z
oprávnění pro kondenzátor Android0.0.42025-09-15T04:54:48.753Z
VoIP sada pro volání1.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-context2.0.212025-09-15T05:21:19.814Z
@art-ws/openapi0.1.92025-09-15T05:21:19.969Z
@art-ws/webová aplikace1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
nástroje pro analýzu složení softwaru SCA
Stanovte priority, opravte a zabezpečte svá softwarová rizika
Získejte svůj bezplatný účet.
Nevyžaduje se žádná kreditní karta.

Zajistěte si vývoj a dodávky softwaru

s produktovým balíčkem Xygeni