Che cosa è stato pubblicato tra le 09:35 e le 11:44 UTC
La prima pubblicazione avvelenata è stata keyv nella versione 6.0.0, diffusa alle 09:35 UTC del 4 agosto. Semgrep, che ha dato alla campagna il nome ChainDrop, ha contato 1.557 versioni malevole distribuite su 435 pacchetti nell'ondata successiva, tra le 09:40 e le 11:44 UTC. Wiz, che ha seguito lo stesso incidente, è arrivata a più di 400 pacchetti distinti e lo ha ricondotto a un account di manutentore le cui credenziali erano state rubate. Non erano imitazioni con nomi simili né pacchetti nuovi. Erano le librerie autentiche, ripubblicate con il nome del manutentore autentico e con un file in più.
In mezz'ora la diffusione ha attraversato i confini fra organizzazioni. Fra gli spazi colpiti figurano @deliveroo, @ornikar, @qlik, @servicetitan, @onereach, @or-sdk, @arv-bedrock e @adminide-stack, oltre alle famiglie keyv e cacheable stesse. Quelle organizzazioni non condividono né codice né proprietà. Condividevano un token di pubblicazione rubato: ogni infezione raccoglieva le credenziali npm dalla macchina che installava il pacchetto e le usava per ripubblicare tutto ciò che quel token poteva raggiungere. È questo che ne fa un worm e non una singola pubblicazione avvelenata.
I portatori sono pacchetti che nessuno ha scelto
Abbiamo estratto i dati di download dal registro npm per i 30 giorni conclusi il 3 agosto, il giorno prima della compromissione. keyv ha raccolto 619,7 milioni di download. flat-cache 579,8 milioni. file-entry-cache 571,2 milioni. cacheable-request 137,0 milioni, cacheable 30,1 milioni e cache-manager 16,3 milioni. Quelle sei librerie insieme valgono circa 1,95 miliardi di download nel mese precedente all'avvelenamento.
Quasi nessuno installa flat-cache o file-entry-cache deliberatamente. Sono ausili di memoria intermedia che arrivano sotto gli strumenti di analisi statica e di compilazione, diversi livelli più in basso in un albero di dipendenze, in progetti i cui responsabili non hanno mai digitato nessuno dei due nomi. Qui sta la parte scomoda del calcolo. I pacchetti con il raggio d'azione più ampio sono proprio quelli assenti dall'elenco di dipendenze che hai esaminato e approvato, perciò verificare le tue scelte dice molto poco su questo incidente. Il numero che prevede la tua esposizione è quante volte la tua compilazione è stata eseguita il 4 agosto.
Il codice malevolo cercava l'assistente di intelligenza artificiale
Il meccanismo era un gancio preinstall, e questo conta perché viene eseguito durante la risoluzione delle dipendenze e non attende che il tuo codice importi qualcosa. I file di caricamento, setup.mjs e math_init.js, scaricavano un ambiente di esecuzione Bun autonomo ed eseguivano una seconda fase offuscata. Wiz ha riconosciuto il traffico dall'agente utente Bun/1.3.13. Il raccoglitore mirava a token npm, credenziali cloud, chiavi SSH, segreti di CI, portafogli di criptovalute e file di configurazione di strumenti di intelligenza artificiale.
Ha inoltre scritto la propria persistenza nelle cartelle .claude e .vscode, una scelta deliberata su dove gli sviluppatori collocano oggi la propria fiducia. Un editor e un assistente di intelligenza artificiale hanno accesso al repository, permessi di shell e, sempre più, l'autorità di eseguire comandi. Il comando e controllo era nascosto in un contratto intelligente su Ethereum, letto con una chiamata eth_call e che restituiva il dominio npm-cache[.]com, così gli operatori possono spostare la propria infrastruttura senza distribuire nuovo codice malevolo. L'esfiltrazione finiva in repository GitHub creati con le identità sottratte e intitolati Shai-Hulud: Here We Go Again, il nome della famiglia di codice malevolo da cui questo discende.
Due ore bastano per un rilievo NIS2
Per un operatore dell'Unione Europea o del Regno Unito la domanda di conformità non è soltanto se sei stato colpito, ma se sai descrivere che cosa è accaduto. Due degli spazi colpiti appartengono a Deliveroo e Ornikar, una piattaforma britannica di consegne e un'azienda francese di scuole guida. Nessuna delle due è un negozio sconosciuto e nessuna ha scelto di far parte di questo incidente. NIS2 colloca la sicurezza della catena di fornitura presso la direzione e non presso il team di sicurezza, e DORA chiede agli enti finanziari le stesse prove sul rischio informatico dei fornitori terzi.
La documentazione conta quindi tanto quanto la bonifica. Accerta se una compilazione è stata eseguita il 4 agosto fra le 09:35 e circa le 15:00 UTC, il momento in cui il canale di comando su Ethereum è stato documentato e l'analisi era ancora in corso. Ruota ogni credenziale che un esecutore poteva raggiungere, non solo il token npm: chiavi cloud, token GitHub, chiavi SSH e credenziali di Kubernetes e Terraform. Ricostruisci gli esecutori invece di pulirli. Poi metti per iscritto che cosa hai ruotato e quando, perché è quel documento che chiederanno la vigilanza, il revisore o l'assicuratore. In Italia l'ACN è l'ente a cui arriva la segnalazione.
Da leggere ora: 16.000 aziende uniscono il rischio fornitori. Voi no | La correzione firma i file nuovi, non l'archivio



