Il 24 novembre è partita una nuova ondata di Shai-Hulud, il worm che a settembre aveva infettato oltre 500 pacchetti di npm, il principale archivio di librerie JavaScript. In due giorni i pacchetti infetti sono diventati quasi 800, con oltre 20 milioni di download settimanali complessivi, e alcuni appartengono ad aziende note. I repository GitHub che espongono i segreti rubati sono più di 25.000.
La sequenza di settembre è utile per capire come si è arrivati qui. Poco prima della prima ondata, un manutentore caduto in un phishing aveva visto compromettere librerie diffusissime come chalk e debug. Poi era arrivato il worm, che si diffondeva da solo. Ora c’è la seconda versione, più rapida e più furtiva.
Parte prima dell’installazione
Il worm entra nei pacchetti legittimi con credenziali di manutentori già rubate. Aggiunge due file, setup_bun.js e bun_environment.js, e uno script preinstall che parte prima dell’installazione, anche se poi l’installazione fallisce. Installa il runtime Bun, poi cerca sul computer o nella pipeline token npm e GitHub e chiavi AWS, Google Cloud e Azure. Li pubblica in nuovi repository GitHub creati con l’account della vittima. Con i token npm trovati infetta fino a 100 pacchetti della vittima, pubblicandone nuove versioni. Infine installa un esecutore di GitHub Actions che permette agli attaccanti di lanciare comandi da remoto.
Se non riesce né a rubare credenziali né a diffondersi, tenta di cancellare tutti i file scrivibili nella cartella home dell’utente. Un ladro che, se non trova niente, dà fuoco alla casa.
Confronta le dipendenze dei tuoi progetti con gli elenchi dei pacchetti compromessi e cerca i due file sul disco e nelle pipeline. Se li trovi, ruota tutti i segreti presenti su quella macchina e controlla il tuo account GitHub: un repository creato a tua insaputa è il segno più chiaro.
Nelle pipeline usa i file di lock, installa con npm ci e valuta --ignore-scripts. Evita le versioni pubblicate da poche ore: aspettare qualche giorno prima di adottarle filtra gran parte di queste compromissioni, che di solito vengono scoperte in fretta.
Se pubblichi pacchetti, proteggi l’account npm con un’autenticazione a più fattori resistente al phishing e passa alla pubblicazione tramite sistemi fidati, abbandonando i token a lunga durata. Sono proprio quelli che il worm cerca.



