La mattina del 4 agosto 2026 un attacco supply-chain ha compromesso l'account GitHub di jaredwray, maintainer di keyv e flat-cache, pacchetti con 565 milioni di download mensili combinati. Entro poche ore la campagna Shai-Hulud ha infettato oltre 440 pacchetti npm — numero poi cresciuto a 1.280+ secondo aggiornamenti di Aikido Security via DevOps.com — generando oltre 2 miliardi di download mensili potenzialmente esposti. Il meccanismo non è una falla di npm né un bypass crittografico: è l'uso esatto dei meccanismi di trust che la supply chain security promuove come soluzione.
- Il malware si diffonde tramite file math_init.js e Math_Symbol.js con script preinstall, scaricando il runtime Bun da GitHub releases per eludere il rilevamento basato su Node.js
- Le versioni malevole portano provenance firmata da GitHub Actions valida: la firma digitale attesta dove è stato costruito il pacchetto, non che il codice sorgente sia legittimo
- Il furto di token npm, GitHub, AWS, Kubernetes, Vault, Slack, Stripe, SSH e VPN alimenta una propagazione worm-like autonoma a 50-100 nuovi pacchetti ogni pochi minuti
- La persistenza si estende a IDE e agenti AI locali tramite modifiche di .claude/settings.json e .vscode/tasks.json, con un dead man's switch che minaccia cancellazione dati se i token rubati vengono revocati
Come un maintainer legittimo diventa involontario veicolo di infezione
L'ingresso nella catena è stato il compromissione dell'account GitHub di jaredwray. Ilyas Makari, ricercatore malware di Aikido Security, ha descritto la sequenza: "the bad actor on the morning of August 4, compromised the GitHub account of jaredwray". L'attaccante ha pushato file malevoli direttamente sul main branch e ha immediatamente tagliato una nuova release. Il risultato: versioni avvelenate pubblicate su npm con provenance firmata da GitHub Actions, esattamente come avviene per ogni rilascio legittimo.
Kiran Raj, ricercatore di Endor Labs, ha corroborato il pattern: "an npm publishing token was stolen and used to push malicious versions, in most cases a CI or service-account token likely harvested from a build runner that had itself installed a poisoned dependency". La compromissione iniziale ha generato token rubati, che a loro volta hanno permesso nuove pubblicazioni, creando un ciclo di feedback positivo per l'attaccante.
Il payload: Bun, RSA e 200 pattern di scansione
Il dropper iniziale, math_init.js, attiva il payload principale Math_Symbol.js — 728 KB di codice fortemente offuscato. Questo non viene eseguito da Node.js: setup.mjs scarica ed esegue il runtime Bun da github.com/oven-sh/bun/releases/download/bun-v1.3.13/, eludendo i controlli di sicurezza standardizzati sull'ecosistema Node. Il malware implementa quindi uno scanner filesystem con 200 pattern glob, 64 letture concorrenti massime e soglia di 5 MB per file, alla ricerca di credenziali in ambienti locali e CI.
I dati rubati vengono cifrati con una chiave RSA pubblica embedded nel payload. L'exfiltrazione primaria avviene verso repository GitHub pubblici con tag "Shai-Hulud: Here We Go Again" — 821 al momento della rilevazione da OX Security, circa 1.300 secondo aggiornamento di Aikido. Esiste un fallback tecnico sofisticato: un dominio registrato il 22 maggio 2026, il cui indirizzo viene recuperato dallo smart contract Ethereum 0xE1f2395ee43e45A1556EC6438a88c31B83493103.
La persistenza oltre l'installazione: IDE e agenti AI
Il malware non si limita all'eseczione singola. Secondo l'analisi di Aikido, "adds malicious hooks to .claude/settings.json and .vscode/tasks.json so that the payload executes automatically". Questa scelta di persistenza estende la superficie di attacco oltre l'ambiente di build: gli sviluppatori che aprono progetti locali in IDE con configurazioni utente modificate riattivano il payload senza necessità di nuova installazione. Gli agenti AI locali, configurati per leggere automaticamente le impostazioni di progetto, diventano vettori di esecuzione continua.
Oltre alla persistenza, il malware include un dead man's switch. Secondo OX Security, attiva "a dead man's switch trigger, to delete the current machine if the stolen GitHub token is revoked". La stringa estorsione embedded è esplicita: "IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients". Non emergono nel dossier prove sull'effettiva implementazione di questa minaccia, né sul numero di macchine dove si sia materializzata.
"the bad actor on the morning of August 4, compromised the GitHub account of jaredwray [...] the poisoned versions were published to npm with valid provenance signed by GitHub Actions"
— Ilyas Makari, malware researcher, Aikido Security (via DevOps.com)
Il problema strutturale: provenance vs autorizzazione
La campagna Shai-Hulud non viola i meccanismi di provenance: li sfrutta esattamente per quello per cui sono stati progettati. Una firma GitHub Actions valida attesta che un pacchetto è stato costruito da un workflow specifico su un repository specifico. Non attesta che il maintente del repository abbia autorizzato quel codice, né che il codice sorgente non contenga payload malevolo.
Peyton Kennedy, ricercatore di Endor Labs, aveva già articolato questa distinzione in analisi precedenti: "provenance tells you where a package was built, not whether the build was authorized". La campagna del 4 agosto 2026 è la dimostrazione operativa di questa fallacia. Gli strumenti di audit della supply chain — SBOM, attestazioni, firme — forniscono tracciabilità, non sicurezza del contenuto. Quando il processo di build è compromesso all'origine, la tracciabilità diventa un meccanismo di mascheramento anziché di rivelazione.
La propagazione a 50-100 pacchetti ogni pochi minuti, come riportato da Charlie Eriksen di Aikido, è resa possibile proprio dalla combinazione di token rubati e provenance automatica. Ogni nuova versione malevola eredita automaticamente la firma valida del workflow compromesso, senza necessità di compromettere nuovamente l'infrastruttura.
Cosa fare adesso
- Revocare immediatamente i token npm, GitHub e cloud esposti su sistemi che abbiano eseguito
npm installdopo le 09:30 UTC del 4 agosto 2026, verificando i log di accesso per uso non autorizzato - Ispezionare le directory .claude/settings.json e .vscode/tasks.json su tutte le macchine di sviluppo per hook non autorizzati, e rimuovere configurazioni sospette prima di riaprire progetti
- Bloccare l'esecuzione di script preinstall e postinstall in pipeline CI/CD non essenziali, e verificare che i build runner non abbiano accesso a token con privilegi di pubblicazione
- Validare le dipendenze npm contro gli elenchi di pacchetti compromessi pubblicati da OX Security, Aikido e Endor Labs, confrontando gli hash SHA-256 delle versioni installate
Perché questa campagna cambia il perimetro della supply chain security
La distinzione tra provenance e autorizzazione non è nuova, ma Shai-Hulud la rende non più teorica. Il passaggio da compromissione singola a propagazione autonoma worm-like, mediata da token rubati e mascherata da firme valide, ridefinisce il modello di minaccia per gli ecosistemi open source. Non è più sufficiente verificare che un pacchetto sia "firmato": è necessario verificare che chi ha autorizzato il contenuto del repository abbia mantenuto il controllo del proprio account.
Jonathan Stross, analista di sicurezza SAP presso Pathlock, aveva anticipato questa evoluzione: "Shai-Hulud should be understood less as a one-off package compromise and more as an evolving supply-chain playbook". Il dossier non specifica l'identità del threat actor né attribuisce con certezza la campagna a entità note. La chiave RSA pubblica nel payload, secondo OX Security, è "yet to be attributed". L'entità che controlla lo smart contract Ethereum di fallback non è identificata.
Le informazioni sono state verificate sulle fonti citate e aggiornate al momento della pubblicazione.
Fonti
- https://www.ox.security/blog/a-new-infostealer-worm-hits-npm-affecting-keyv-and-cacheable/
- https://devops.com/fast-moving-shai-hulud-attack-infects-npm-packages-with-2-billion-monthly-downloads/
- https://github.com/search?q=%22Shai-Hulud%3A+Here+We+Go+Again%22&type=repositories&s=updated&o=desc
- https://www.aikido.dev/blog/keyv-and-friends-compromised-in-npm-supply-chain-attack
- https://www.endorlabs.com/learn/npm-malware-compromises-keyv-and-cacheable-with-500m-weekly-downloads-and-spreads-to-hundreds-of-packages
- https://devops.com/widespread-mini-shai-hulud-campaign-is-a-matter-of-trust/