Tre volte in una singola settimana. Tre. Volte. A questo punto, sto iniziando a pensare che NPM stia per “Non-stop Pwning Machine” perché santa vulnerabilità di sicurezza, Batman - abbiamo un altro attacco alla supply chain, e questo è bacio dello chef assolutamente diabolico.
Vi presento Shai-Hulud (sì, quello è il nome in codice reale - chiamato come i vermi giganti della sabbia di Dune, perché apparentemente gli hacker si sono messi a fare riferimenti alla fantascienza). Questa non è la vostra situazione tipica “oops, ho scaricato un pacchetto malevolo”. No, no, no. Questa è una pandemia digitale auto-replicante che si diffonde da repository a repository come se stesse cercando di vincere il Premio Nobel per il Modo Più Creativo di Rovinare la Giornata a Tutti.
Il Colpo di Scena Che Fa Piangere gli Ingegneri della Sicurezza
Ricordate i bei vecchi tempi quando il malware era semplice? Scarica pacchetto cattivo, il malware ruba i tuoi token, fine dei giochi. Shai-Hulud ha detto “tienimi la birra” e ha deciso di innovare nel peggior modo possibile.
Questa bellezza non si limita a rubare le tue credenziali e finirla lì. Usa i tuoi token rubati per infettare altri repository. È come se un ladro non si limitasse a svaligiare casa tua, ma usasse le tue chiavi per svaligiare tutti i vicini, che poi si fanno rubare le chiavi per svaligiare i loro vicini, e così via finché l’intera città non è solo una gigantesca scena del crimine.
I principali pacchetti compromessi nell’attacco Shai-Hulud includono @ctrl/tinycolor, @crowdstrike/falcon-shoelace, ngx-bootstrap, e oltre 180 altri. L’attacco ha preso di mira librerie popolari attraverso multipli manutentori, dai componenti UI agli strumenti di sicurezza, dimostrando la portata massiva di questa violazione della supply chain. Fonte: OX Security
L’attacco è iniziato con un umile pacchetto deprecato chiamato rxnt-authentication che non vedeva aggiornamenti da ere. Poi improvvisamente - colpo di scena! - sono apparse le versioni 0.0.5 e 0.0.6 come fantasmi digitali, portando il loro payload malevolo nel mondo.
L’Anatomia del Darwinismo Digitale
Ecco dove diventa tecnicamente affascinante (e terrificante):
Passo 1: L’Amo del Phishing Qualche povero sviluppatore probabilmente ha ricevuto un’email convincente: “Ehi, devi aggiornare il tuo token npm per motivi di sicurezza! Clicca qui!” Click. Fine dei giochi.
Passo 2: Il Cavallo di Troia Gli attaccanti spingono versioni malevole usando aggiornamenti patch (perché apparentemente ancora non abbiamo imparato a non auto-aggiornare le versioni patch - seriamente, gente, BLOCCATE LE VOSTRE VERSIONI).
Passo 3: Il Parassita Digitale Una volta installato, il pacchetto esegue uno script post-install che deploy qualcosa chiamato “Truffle Hog” - che, nota a margine, è sia un nome eccellente che uno strumento di sicurezza legittimo che scansiona credenziali trapelate. Eccetto che ora viene usato per il male invece che per il bene. È come guardare Superman che diventa un rapinatore di banche.
Passo 4: La Diffusione Virale Ecco il capolavoro: Invece di limitarsi a esfiltrare i tuoi token verso qualche server remoto, Shai-Hulud si mette immediatamente al lavoro sui tuoi repository GitHub. Lui:
- Aggiorna le tue pipeline CI/CD
- Modifica i tuoi file package.json
- Pubblica nuove versioni “patch” dei tuoi pacchetti
- Include se stesso nelle nuove versioni
Risciacqua, ripeti, crescita esponenziale. È come uno schema piramidale, ma per il malware.
Il Gioco dei Numeri (Spoiler: Stiamo Perdendo)
L’attacco è iniziato con 40 pacchetti compromessi. Nel giro di ore, quel numero è saltato a 180+. A questo tasso di crescita, entro la prossima settimana avremo più pacchetti infetti che atomi nell’universo osservabile. (Ok, quella è un’iperbole, ma la crescita esponenziale è genuinamente terrificante.)

Ma aspetta - c’è di più! Tra le vittime, abbiamo il gioiello della corona dell’ironia: CrowdStrike!
Sì, hai letto bene. La stessa CrowdStrike che vende soluzioni di sicurezza e ci ha dato il grande incidente della schermata blu della morte all’inizio di quest’anno sta ora - rullo di tamburi per favore - accidentalmente distribuendo attacchi worm attraverso i suoi pacchetti npm. Nello specifico, l’attacco ha compromesso:
@crowdstrike/commitlint(versioni 8.1.1, 8.1.2)@crowdstrike/falcon-shoelace(versioni 0.4.1, 0.4.2)@crowdstrike/foundry-js(versioni 0.19.1, 0.19.2)@crowdstrike/glide-core(versioni 0.34.2, 0.34.3)@crowdstrike/logscale-dashboard(versioni 1.205.1, 1.205.2)@crowdstrike/tailwind-toucan-base(versioni 5.0.1, 5.0.2)
Letteralmente non puoi inventarti questa roba. L’universo ha senso dell’umorismo, e quel senso dell’umorismo è apparentemente molto, molto nero.
La Tragedia del “Tiny Color”
Un’altra vittima degna di nota è il popolare pacchetto tiny-color, colpito attraverso le credenziali compromesse del suo manutentore. Le versioni 4.11 e 4.12 sono state infettate, ma in un bellissimo atto di umorismo di sfida, la versione sicura è stata rilasciata come… 4.20.
Chef’s kiss a chi ha preso quella decisione sul numero di versione. Nel mezzo del caos, qualcuno ha ancora trovato tempo per uno scherzo.
L’Inferno delle Dipendenze Che Abbiamo Creato
Questo attacco evidenzia qualcosa che abbiamo volutamente ignorato: i nostri alberi di dipendenze sono folli. Stiamo importando intere librerie per usare singole funzioni. Devi riempire una stringa? Importa left-pad. Devi controllare se qualcosa è un numero? Importa is-number. Devi convertire HSV in RGB? Importa un altro pacchetto con 47 dipendenze transitive.
Nell’era dell’IA, dove puoi letteralmente chiedere a ChatGPT “scrivimi una funzione left-pad” e ottenere un’implementazione funzionante in 3 secondi, perché stiamo ancora giocando alla roulette russa delle dipendenze?
La Dipendenza dall’Auto-Aggiornamento
Possiamo parlare dell’auto-aggiornamento delle versioni patch? SMETTETELA. Semplicemente… smettetela. Questo è tipo il terzo attacco importante quest’anno che si è basato sugli aggiornamenti automatici delle versioni patch. Siamo nel 2025, e stiamo ancora facendo lo stesso errore ancora e ancora.
Bloccate le vostre versioni. Sì, è più lavoro. Sì, vi perderete alcune correzioni di bug. Ma sapete cosa non vi perderete? Installare accidentalmente malware auto-replicante.
Ecco il punto: anche se siete cittadini modello e bloccate le vostre versioni, siete comunque vulnerabili perché i package manager sono incubi ricorsivi. Dipendete dal pacchetto A, che dipende dal pacchetto B, che si auto-aggiorna includendo malware, che poi infetta comunque il vostro progetto.
Sono dipendenze fino in fondo, e ogni livello è un potenziale vettore di attacco.
L’Impatto nel Mondo Reale
Questo non è solo teorico. Aziende reali, progetti reali, ambienti di produzione reali sono stati colpiti. L’attacco ha preso di mira:
- Ambienti di sviluppo con token GitHub esposti
- Pipeline CI/CD con credenziali di pubblicazione
- Macchine di sviluppatori locali con autenticazione in cache
Se avevate token npm in giro da qualche parte - nelle vostre variabili d’ambiente, nella vostra configurazione CI, nelle password salvate del vostro browser - Shai-Hulud veniva a cercarli.
Strategie di Difesa (Ovvero: Come Non Farsi Fregare)
1. Bloccate Tutto
{
"dependencies": {
"some-package": "1.2.3", // Versione esatta, niente tilde, niente caret
"another-package": "4.5.6"
}
}
2. Fate Audit Come Se la Vostra Vita Dipendesse da Questo
Eseguite npm audit religiosamente. Impostate scansione automatica delle dipendenze. Trattate il vostro package.json come se contenesse codici di lancio nucleare.
3. Minimizzate le Dipendenze Chiedetevi: “Ho veramente bisogno di un pacchetto per controllare se un numero è dispari?” La risposta è probabilmente no.
4. Ruotate i Vostri Token Se non avete ruotato i vostri token npm di recente, fatelo ora. Se avete token del 2019 ancora in giro, cancellateli ieri.
5. Monitorate i Vostri Pacchetti Se mantenete pacchetti, impostate alert per pubblicazioni inaspettate. Se la versione 3.1.4 appare improvvisamente e non l’avete pubblicata voi, quella è una bandiera rossa grande come il Texas.
Il Quadro Generale
Shai-Hulud rappresenta un’evoluzione negli attacchi alla supply chain. Non è solo malware - è malware auto-propagante. È quello che succede quando gli attaccanti studiano gli effetti di rete e li applicano al cybercrimine.
Questo attacco ha avuto successo perché ha sfruttato diversi problemi sistemici:
- Eccessivo affidamento sugli aggiornamenti automatici delle dipendenze
- Scarsa igiene dei token in tutto l’ecosistema
- La natura interconnessa della gestione moderna dei pacchetti
- La tendenza degli sviluppatori a fidarsi implicitamente degli aggiornamenti patch
Cosa Significa Questo per il Futuro
Siamo a un punto di svolta. O ci impegniamo collettivamente sulla sicurezza della supply chain, o vedremo altri attacchi come questo. Shai-Hulud ha dimostrato che l’ecosistema npm può essere armato in una piattaforma di attacco distribuita.
Il prossimo attacco potrebbe essere peggiore. Potrebbe colpire immagini Docker, o pacchetti Python, o crate Rust. Potrebbe persistere più a lungo, diffondersi più velocemente o causare più danni.
Il Lato Positivo
C’è qualche buona notizia: questo attacco è stato scoperto relativamente in fretta, i pacchetti colpiti vengono ripuliti, e la comunità della sicurezza sta rispondendo rapidamente con strumenti e pratiche di rilevamento migliori.
Inoltre, stiamo tutti ricevendo un corso intensivo di sicurezza della supply chain che lo volessimo o no. Niente insegna la programmazione difensiva come vedere l’intero ecosistema preso in ostaggio da un virus di pacchetti auto-replicante.
Lezioni Apprese (Nel Modo Difficile)
- Gli auto-aggiornamenti sono convenienti finché non sono catastrofici
- Ogni dipendenza è un potenziale vettore di attacco
- La rotazione dei token non è opzionale - è essenziale
- Il costo di scrivere le tue funzioni utility è ora più basso del rischio di importarle
- La sicurezza non è il problema di qualcun altro - è il problema di tutti
Pensieri Finali
Mentre scrivo questo, la pulizia di Shai-Hulud è in corso. I pacchetti vengono patchati, i token vengono ruotati, e sviluppatori ovunque stanno avendo conversazioni scomode sulle loro pratiche di gestione delle dipendenze.
L’attacco è stato brillante nella sua semplicità e terrificante nella sua efficacia. Ha trasformato la forza più grande di npm - il suo ecosistema interconnesso - nella sua vulnerabilità più grande.
Ma ecco il punto: possiamo imparare da questo. Possiamo costruire strumenti migliori, implementare pratiche migliori e creare sistemi più resilienti. Oppure possiamo ignorare le lezioni e aspettare Shai-Hulud 2.0.
La scelta è nostra. Facciamola bene.
Restate vigili, mantenete bloccate le vostre dipendenze, e ricordate: nel mondo della gestione dei pacchetti, la paranoia non è un bug - è una feature.
Risorse:
- Palo Alto Networks: Analisi Attacco Supply Chain NPM
- OX Security: Dettagli NPM 2.0 Hack
- The Hacker News: Oltre 40 Pacchetti NPM Compromessi
Aggiornate i vostri pacchetti responsabilmente, amici. L’ecosistema dipende da questo.