Shai hulud - pacchetti npm - attaccu à a catena di furnimentu

Shai-Hulud: Spiegazione di u verme di i pacchetti npm

TL; DR

U 14 di settembre di u 2025, i circadori anu identificatu Shai Hulud, un verme autoreplicante piattu dentru pacchetti npm, trasfurmendu un aghjurnamentu di dipendenza di rutina in un aghjurnamentu à scala cumpleta attaccu à a catena di supplyPrima vista in u @ctrl/tinculore pacchettu da Daniel dos Santos Pereira, Shai-Hulud raccoglie sicreti, li esfiltra attraversu repositori è flussi di travagliu GitHub, è si ripubblica in tuttu u registru aduprendu credenziali arrubate. In pochi ghjorni, u numeru di pacchetti infettati hè aumentatu da decine à centinaie, cunfirmendu chì Shaihulud ùn hè micca solu un altru troianu, ma un verme cuncipitu per sparghjesi automaticamente in tuttu l'ecosistema npm.

Impact: Ogni sviluppatore o corridore CI chì installa pacchetti npm publici hè in periculu.

Azzione immediata: bluccà e versioni cunnisciute, passà à installazioni solu di lockfile, rotà i token npm è GitHub, verificà i flussi di travagliu è monitorà l'Indicatori di Compromissione (IoC).

Chì accade?

lu Attaccu à a catena di furnimentu di Shai-Hulud in i pacchetti npm hè unu di l'incidenti i più disruptivi di a memoria recente. À u cuntrariu di i troiani isolati, questu verme mischia furtu di credenziali, esfiltrazione automatizata è autoreplicazioneDi cunsiguenza, a cronologia di l'infezzione hè diminuita da settimane à solu ore.

Per e squadre DevOps, a lezziò hè chjara: s'è ogni installazione pò eseguisce u codice, allora ogni aghjurnamentu di dipendenza hè un puntu di violazione potenziale.

Vettore iniziale pussibule è credenziali mirate

Analisi iniziale indica chì l'attaccu hè prubabilmente cuminciatu cù credenziali arrubatiPer esempiu, campagne di phishing chì falsificanu npm login o i prompt MFA puderanu avè catturatu gettoni di sviluppatore. Una volta chì l'attaccanti anu pigliatu quellu primu puntu d'appoghju, u verme si sparse incrustendu si in i pacchetti npm è arrubendu più sicreti da:

  • i fugliali di cunfigurazione npm cum'è .npmrc, chì cuntenenu spessu gettoni di publicazione.
  • Variabili di l'ambiente è cunfigurazioni cù i PAT di GitHub è CI/CD secreti.
  • Punti finali di metadati in u cloud (AWS, GCP, Azure) chì furnisce credenziali di corta durata per u muvimentu laterale.

Dunque, u furtu di credenziali hè diventatu u puntu di partenza. Cù gettoni npm validi è sicreti GitHub, Shai-Hulud puderia autoreplicà si in parechji pacchetti è repositori senza sforzu umanu supplementu.

Impattu esecutivu di l'attaccu à a catena di furnimentu Shai-Hulud

Shai-Hulud hè sempre attivu oghje. Stu verme accelera a cronologia di l'impattu. Ciò chì una volta pigliava settimane cù un trojan si svolge avà in ore. Di cunsiguenza, A diffusione hè più rapida è più difficiule da cuntene. Avanza per via di:

  • Arrubà gettoni di pubblicazione npm è secreti GitHub.
  • Ripubblicendu si stessu in altri pacchetti npm.
  • Aghjunghjendu flussi di travagliu GitHub Actions maliziosi per a persistenza.

Quale hè affettatu:

Ogni squadra chì installa pacchetti npm publichi hè esposta. Inoltre, i sviluppatori cù npm in cache o token GitHub affrontanu un risicu elevatu. I corridori CI chì utilizanu secreti à scopu largu sò ancu vulnerabili.

Rischiu cummerciale

L'impattu cummerciale cresce rapidamente. I gettoni arrubati ponu purtà à l'acquistu di conti, à u dirottamentu di pacchetti è ancu à l'usu impropriu di u cloud. Inoltre, a persistenza in i flussi di travagliu GitHub rende più difficiule a pulizia. Dunque, e squadre devenu trattà Shai-Hulud cum'è un incidente in corsu, micca cum'è un incidente chjusu.

Cumu funziona l'attaccu di a catena di furnimentu Shai-Hulud in i pacchetti npm

Obiettivi è mutivi di l'attaccante

A campagna hè ottimizzata per trè cose:

  • U primu scopu hè di arrubà credenziali à grande scala da i laptop di sviluppatori è i corridori CI. Questu include i gettoni di pubblicazione npm, i gettoni GitHub è e credenziali cloud. In fatti, parechje analisi cunfermanu a raccolta sistematica di secreti, cum'è l'esecuzione di TruffleHog è l'interrogazione di endpoint di metadati cloud.
  • U secondu scopu hè di propagate automaticamente abusendu di i diritti di publicazione di i mantenitori compromessi. Di cunsiguenza, un puntu d'appoghju si espande rapidamente in parechji, postu chì e nuove versioni infettate di altri pacchetti appariscenu senza sforzu umanu supplementu.
  • U terzu scopu hè di persiste è esfiltra in modu affidabile attraversu l'infrastruttura GitHub. L'attaccanti creanu un repositoriu publicu chjamatu "Shai-Hulud" cù una doppia base64 dati.json, è in più piantanu un flussu di travagliu chì serializza ${{ toJSON(sicreti) }} è u publica in un webhook staticu.

U prubabile risultatu include l'accessu à longu andà à i registri è à u codice surghjente, un muvimentu laterale rapidu in i conti cloud, è l'opzione di trasfurmà ulteriormente a catena di furnimentu in arma. I rapporti publichi mostranu chì i repository privati ​​sò stati rivultati in publicu cù un "-migrazione" suffissu, chì aumenta l'esposizione di i dati è u momentum

Dentru à a carica utile di Shai-Hulud: bundle.js in i pacchetti npm

Shai-Hulud si spedisce cum'è una grande, raggruppatu in Webpack è assai minificatu u schedariu JavaScript (bundle.js, circa 3–3.7 MB) chì s'esegue da un postinstallazione aggancia package.jsonDi cunsiguenza, Ogni installazione attiva automaticamente u payload. Stu cuncepimentu piatta l'identificatori, comprime u flussu di cuntrollu è spinge tutta a logica in un unicu artefattu chì s'eseguisce durante l'installazione. L'analisti cunfermanu constantemente u raggruppamentu di Webpack, a dimensione inusual di i fugliali è l'esecuzione in tempu d'installazione.

Tratti di offuscazione è anti-analisi chì viderete in i campioni:

  • Graficu di moduli minificatu cù ID di moduli numerichi, cummenti sparsi è flussu di cuntrollu appiattitu. Inoltre, Sta struttura rende a revisione manuale estremamente difficiule.
  • Ammuccià e corde via strati base64 è assistenti di custruzzione. Per esempiu, A codificazione è a decodificazione base64 ripetuta appariscenu di solitu intornu à e rutine di esfiltrazione.
  • Spedizione dinamica attraversu eval-mudelli di stile è corpi di funzione generati, chì permettenu dunque à u codice di cambià u cumpurtamentu in tempu reale.
  • Filtrazione di u sistema operativu preferisce l'esecuzione di Linux è macOS in particulare nantu à i corridori CI è i laptop di sviluppatori.

Da un puntu di vista funziunale, u fasciu hè mudulare. I scritti descrivenu i moduli per a scuperta di u sistema operativu, scansioni di u sistema di fugliali è di i sicreti git, accessu à u SDK in u cloud, operazioni API GitHub è un mutore di propagazione chì mudifica altri pacchetti pusseduti da u mantenitore. In fatti, StepSecurity è ReversingLabs mettenu in risaltu una funzione chì aghjurnà automaticamente i pacchetti cù u hook maliziosu.

Esecuzione in tempu d'installazione in Shai-Hulud: Cumu i pacchetti npm attivanu u verme

L'attaccu principia quandu esegue u nodu di postinstallazione bundle.js. À questu puntu, u script inizializeghja è decomprime u statu di funziunamentu in memoria, preparendu a scena per u funziunamentu cumpletu di u verme.

Scuperta è racolta

  • U payload scarica process.env è scansiona i fugliali lucali per i sicreti à alta entropia è i prefissi di token. Inoltre, estende a copertura eseguendu TruffleHog.
  • Interroga i endpoint di metadati di u cloud per raccoglie credenziali di corta durata. Per esempiu, chjama à 169.254.169.254 nantu à AWS o metadata.google.internal nantu à GCP appariscenu spessu in ospiti infettati.
  • Di conseguenza, Ogni credenziale truvata diventa immediatamente utilizabile per publicà novi pacchetti npm o spinghje flussi di travagliu GitHub.

Esfiltrazione

  • U verme crea un novu repositoriu GitHub chjamatu Shai Hulud è scrive una doppia codificazione base64 data.json cù dettagli di piattaforma, dumps di l'ambiente è sicreti. Cum'è si pò vede, stu cumpurtamentu rumurosu hè faciule da individuà se i difensori sanu induve circà.
  • Pianta ancu un flussu di travagliu GitHub Actions, spessu nantu à una branca chjamata shai-hulud, chì serializza ${{ toJSON(secrets) }} è publica i dati in un webhook staticu. Inoltre, stu flussu di travagliu persiste finchè qualchissia ùn u rimuove attivamente.

Propagazione

  • Cù ogni token npm scupertu, u payload enumera tutti i pacchetti pusseduti da u mantenitore cumprumessu. Dopu, recupera ogni tarball, inietta bundle.js è una entrata postinstall, è ripubblica u pacchettu.
  • Cusì, decine di pacchetti infettati ponu cumparisce in poche ore, multiplicendu u raghju di l'esplosione in tuttu l'ecosistema.

Persistenza è esposizione

  • U verme mantene vivi i flussi di travagliu maliziosi è, in parechji casi, trasforma i repositori privati ​​in publici cù un "-migrazione" suffissu. In tuttu, questu assicura chì l'attaccante mantene un puntu d'appoghju è massimizza a fuga di dati.

Nota di rilevazione chjave
Questu usu inusual di ${{ toJSON(secrets) }} I flussi di travagliu in Actions sò rari. Cusì, E squadre devenu trattallu cum'è un indicatore di signale altu durante a caccia.

Schema di flussu di travagliu sanitizatu chì duvete circà

Questu usu inusual di à JSON (sicreti) in Actions hè un indicatore di signale altu in questu incidente.

Pseudo-codice di propagazione di altu livellu (sicuru, descrittivu)

L'analisti anu osservatu stu ciclu à grande scala, ciò chì spiega u rapidu saltu da decine à centinaie di pacchetti infettati.

Perchè questu hè un verme in un ecosistema di pacchetti

Un verme hè un malware chì si sparghje da per ellu senza richiede passi manuali di l'operatore in ogni tappa. In i sistemi operativi, i vermi sfruttanu di solitu e vulnerabilità di a rete per passà da una macchina à l'altra. In cuntrastu, Shai-Hulud opera in u registru npm. U so percorsu efficiente hè attraversu riutilizazione di credenziali.

U verme sfrutta i gettoni di publicazione npm arrubati. Appena ottiene credenziali valide, ripubblica e versioni infettate sottu altri pacchetti appartenenti à u listessu manutentore. In seguitu, questi pacchetti sò installati da sviluppatori o corridori CI ignari, è u ciclu si ripete.

Per questa ragione, l'analisti di sicurezza, cumpresi Lettura scura, classificanu Shai-Hulud cum'è un verme autoreplicante piuttostu chè un semplice troianu o un incidente di typosquatting. A differenza hè impurtante: un troianu tipicamente cumprumette un host, ma un verme amplifica u so impattu automaticamente in tuttu un ecosistema.

Scheda di trucchi "Cumu funziona"

Per riassume u ciclu di vita di Shai-Hulud, eccu un svantaghju.cisè a ripartizione di e so tappe principali:

  • Un pacchettu cù postinstallazione hè stallatu, è bundle.js esegue.
  • U payload scarica e variabili d'ambiente, scansiona i fugliali è a storia git, è funziona TruffleHog, è interroga i servizii di metadati in u cloud. Di cunsiguenza, ogni sicretu trovu diventa subitu utile.
  • L'esfiltrazione si faci in dui modi: prima, creendu un repositoriu publicu chjamatu Shai Hulud cù una doppia codificazione base64 data.json; secondu, piantendu un flussu di travagliu GitHub Actions chì publica ${{ toJSON(secrets) }} à un webhook.
  • Aduprendu qualsiasi token npm arrubatu, u verme ripubblica tutti l'altri pacchetti pusseduti da u mantenitore cumprumessu cù u listessu hook maliziosu. In questu modu, l'infezzione si multiplica rapidamente.
  • Infine, l'attaccante hà più sicreti, più pacchetti da sparghje, è persistenza in i conti è i repositori GitHub.

Cumu evità sta classa d'attaccu, in pratica

Shai-Hulud hè una chjama di sveglia. Un verme chì arrubba gettoni è si ripubblica ùn hè micca un risicu futuru, hè vivu in u ecosistema di pacchetti npm oghje. Per impedisce stu tipu di attaccu à a catena di supply, e squadre anu bisognu di cuntrolli chì sò programmabili, automatizati è applicati direttamente in CI/CD pipelines. Queste sò e stesse difese chì pudete digià implementà cù Xygeni.

Fermate i cattivi artefatti à a porta

Duvete scansà i pacchetti npm è i tarball prima ch'elli ghjunghjenu à i sviluppatori o à i travagli CI. bundle.js schedari, postinstallazione suspetta hooks, è i marcatori d'offuscazione servenu tutti cum'è bandiere rosse precoci. Inoltre, l'applicazione di periodi di raffreddamentu è di versioni appuntate in pipelines impedisce chì e versioni fresche è micca verificate sianu cunsumate automaticamente.

Harden CI/CD per difettu

Guardrails in CI/CD sò essenziali. Rifiutanu e fusioni o l'installazioni chì introducenu novi script o binari. À u listessu tempu, bloccanu i flussi di travagliu chì serializanu i sicreti o tentanu publicazioni esterne. E squadre devenu ancu richiede installazioni solu di file di bloccu (npm ci) in tuttu pipelinecusì i insemi di dipendenze restanu riproducibili è sicuri.

Riduce u raghju di l'esplosione di u token

I sicreti ùn devenu micca diventà punti unichi di fallimentu. Scannate continuamente u codice, e cunfigurazioni è pipeline output per credenziali esposteI token devenu esse limitati à un scopu strettu, cù una durata di vita corta, è rotati automaticamente quandu si detecta una esposizione. In regula generale, trattate qualsiasi token utilizatu nantu à un host chì hà eseguitu una postinstallazione suspetta cum'è cumprumessu.

Vede u cumpurtamentu di i vermi prestu

Rilevazione di anomalie hè a chjave. Per esempiu, picchi improvvisi in l'eventi di publicazione npm, novi flussi di travagliu chì appariscenu senza ragione, o novi repositori publichi pieni di fugliali codificati strani ponu tutti signalà l'attività di i vermi. Dunque, e squadre devenu suscità avvisi rapidamente è isolà qualsiasi mantenitore o corridore chì mostra questi segni d'avvertimentu.

Riparà rapidamente senza rompe e custruzzioni

A velocità è a sicurità devenu andà inseme. Automatizatu pull requests pò rimpiazzà i pacchetti npm compromessi cù versioni verificate. Inoltre, accessibilità e sfruttabilità L'analisi assicura chì l'aghjurnamenti restinu minimi è stabili. Infine, ricustruite i corridori CI affettati da immagini pulite una volta chì l'esposizione hè cunfirmata, impedendu à l'attaccu di sparghjesi ulteriormente.

Indicatori di cumprumissu (IoC)

Quandu si analiza Shai-Hulud, e squadre devenu fà attenzione à tramindui IoC statichi in i schedari è IoC cumportamentali in pipelineInseme, sti signali aiutanu à rilevà l'infezioni prestu è à risponde prima chì u verme si sparghji ulteriormente.

IoC statichi

I seguenti digesti SHA-256 currispondenu osservati bundle.js campioni:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

Inoltre, attenti à questi mudelli ricorrenti:

  • A bundle.js à a radica di u pacchettu.
  • "postinstall": "node bundle.js" a grana package.json.
  • Repositori chjamati Shai Hulud.
  • Flussi di travagliu GitHub chì cuntenenu ${{ toJSON(secrets) }}.

IoC cumportamentali

Oltre à e firme di i fugliali, l'attività di i vermi si rivela per mezu di u cumpurtamentu. Per esempiu:

  • Scoppi improvvisi di eventi di pubblicazione npm da un mantenitore.
  • Novi flussi di travagliu chì spinghjenu i dati à endpoint esterni.
  • Richieste POST in uscita attivate da i corridori CI.
  • Repositori publichi creati di recente cù blob codificati.

Cacce veloci

Cunclusione: Lezioni da Shai-Hulud

lu Attaccu à a catena di furnimentu di Shai-Hulud in i pacchetti npm mostra quantu fragile hè diventata a catena di furnimentu di software d'oghje. Stu verme hà fattu più chè aghjunghje codice maliziosu. Hà arrubatu gettoni, mandatu dati, è dopu si hè ripublicatu automaticamente. Per via di questu, l'attaccu s'hè spartu in ore invece di settimane.

Per i sviluppatori è e squadre DevOps, e lezioni sò chjare:

  • Ogni installazione esegue u codice. Ancu un pacchettu npm cumunu pò ammuccià un verme postinstallazione.
  • Ogni gettone hà un valore elevatu. Una volta arrubatu, pò esse adupratu per sparghje ulteriormente u malware.
  • Toute pipeline hà bisognu di cuntrolli. senza guardrails nantu à e dipendenze, i flussi di travagliu è i sicreti, un compromessu pò colpisce rapidamente a pruduzzione.

Dunque, piantà l'attacchi cum'è Shai-Hulud richiede cuntrolli automatichi è faciuli da applicà. E squadre devenu scansà i pacchetti npm prima di l'installazioni, aduprà compilazioni di lockfile, rilevà attività di publicazione strane è mantene i tokens di corta durata. Questi passi ùn sò più opzionali. Invece, sò u fundamentu di a resilienza in i sistemi muderni. pipelines.

À Xygeni, vedemu l'attaccu di a catena di furnimentu Shai-Hulud cum'è un avvertimentu per tuttu l'ecosistema open source. A strada sustenibile per andà avanti hè di purtà a sicurezza di a catena di furnimentu direttamente in u prucessu di sviluppu, à u puntu induve u codice, i pacchetti npm, è pipelines cunnette.

Quì sottu hè a lista cumpleta di i pacchetti è e versioni npm signalati cum'è cumprumessi in Shai-Hulud. Adupratelu per verificà i vostri lockfiles, registri è CI. pipelines per l'esposizione.

Lista di pacchetti cumprumessi

📦 Anteprima di i pacchetti npm cumprumessi

U nome di u pacchju Version Data di Publicazione
json-rules-engine-simplificatu0.2.12025-09-14T17:58:51.203Z
pilotu aereu0.8.82025-09-14T18:35:07.600Z
mcp-knowledge-graph1.2.12025-09-14T18:35:09.494Z
cappellinu aereu0.3.12025-09-14T18:35:09.521Z
porta di saltu0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/finestra-di-richiamata1.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/manager-di-cunfigurazione0.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/validazione0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ Vede a lista cumpleta di i pacchetti cumprumessi
U nome di u pacchju Version Data di Publicazione
json-rules-engine-simplificatu0.2.12025-09-14T17:58:51.203Z
pilotu aereu0.8.82025-09-14T18:35:07.600Z
mcp-knowledge-graph1.2.12025-09-14T18:35:09.494Z
cappellinu aereu0.3.12025-09-14T18:35:09.521Z
porta di saltu0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/finestra-di-richiamata1.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/manager-di-cunfigurazione0.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/validazione0.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/scalare0.1.72025-09-14T20:45:56.386Z
caricamentu di u schedariu ng27.0.32025-09-15T02:44:29.555Z
gestore di notificazioni di condensatori0.0.22025-09-15T04:54:48.431Z
condensatore-plugin-vonage1.0.22025-09-15T04:54:48.501Z
plugin-di-capacitori-app-di-salute0.0.22025-09-15T04:54:48.704Z
permessi di condensatore android0.0.42025-09-15T04:54:48.753Z
kit di chjamate voip1.0.22025-09-15T04:54:49.223Z
condensatore-plugin-ihealth1.1.82025-09-15T04:55:08.113Z
@art-ws/cumune2.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/servitore-http2.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/web-app1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
sca-tools-software-strumenti-d'analisi-di-cumpusizione
Priorizà, rimedià è assicurà i vostri risichi di software
Uttene u vostru contu gratuitu.
Nisuna carta di creditu necessaria.

Assicurà u vostru sviluppu è a consegna di software

cù a Suite di Prodotti Xygeni