È stata registrata un'altra attacco ai pacchetti nel repository NPM, condotto con l'uso di una modifica del verme auto-replicante Shai-Hulud, che inserisce malware nelle dipendenze. A causa dell'attacco, sono state pubblicate versioni malevole di 605 pacchetti, che complessivamente superano i 100 milioni di download.
Per eseguire l'attacco, i criminali informatici hanno intercettato tramite phishing i parametri dell'account del manutentore di uno dei pacchetti popolari, utilizzato come dipendenza da un gran numero di pacchetti. Approfittando dell'account compromesso, gli attaccanti hanno pubblicato una release del pacchetto, in cui è stato aggiunto un codice per attivare il verme durante l'installazione del pacchetto compromesso tra le dipendenze. Il verme attivato cerca le credenziali nell'ambiente attuale, scaricando e avviando l'utility TruffleHog.
Nel caso venga scoperto un token di connessione al catalogo NPM, il verme pubblica automaticamente nuove release malevole per pacchetti sviluppati nell'ambiente attuale. In questo modo, l'intero albero delle dipendenze viene compromesso a cascata. Oltre al token NPM, il verme salva le chiavi di accesso a GitHub e ai servizi cloud AWS, Azure e GCP (Google Cloud Platform), oltre a variabili di ambiente e altri dati sensibili che è in grado di identificare il scanner TruffleHog.
I dati sensibili trovati nel sistema vengono pubblicati su GitHub creando repository con nomi casuali (ad esempio, "qzx15djl71alh6p80h") e la frase "Sha1-Hulud: The Second Coming" nella descrizione, e vengono anche registrati in forma codificata nei log di GitHub Actions. Nel repository creato viene salvato un file in formato JSON (ad esempio, jsonactionsSecrets.json o contents.json), contenente una stringa con informazioni di sistema codificate in base64, variabili di ambiente e dati compromessi. Per trasferire informazioni al di fuori dei sistemi di integrazione continua basati su GitHub, il verme crea un handler di GitHub Actions con nome ".github/workflows/formatter_123456789.yml" e imposta un runner di nome SHA1HULUD.
Le differenze rispetto all'attacco simile di settembre riguardano un diverso metodo di inserimento del codice dannoso nel pacchetto. Nei rilasci dannosi generati dal worm si dichiara l'implementazione del supporto per la piattaforma JavaScript Bun. Nel file package.json, nella sezione «preinstall», che definisce gli script eseguiti prima dell'inizio dell'installazione, viene aggiunto il comando «node setup_bun.js».

Nel file «setup_bun.js» è presente un codice per l'esecuzione di uno script offuscato chiamato «bun_environment.js», contenente il codice del worm. Per la sua ulteriore diffusione, il worm trova il codice dei pacchetti, apporta modifiche al file package.json (aumenta il numero di versione e include la chiamata a setup_bun.js), aggiunge i file setup_bun.js e bun_environment.js, ripacchetta il pacchetto e esegue il comando «npm publish» per pubblicare un nuovo rilascio.
Tra i pacchetti popolari compromessi figurano: @zapier/zapier-sdk (2,8 milioni di download a settimana), @posthog/core (2,8 milioni), posthog-node (1,5 milioni), @asyncapi/specs (1,4 milioni), @postman/tunnel-agent (1,2 milioni). Si ritiene che l'attacco sia iniziato con la compromissione del pacchetto @asyncapi/specs.
Fonte: opennet.ru
