Un worm autoriplicante ha raggiunto i namespace npm keyv e cacheable il 4 agosto. Nel repository compaiono commit non firmati dalle 09:02:37 UTC, i file di configurazione malevoli arrivano alle 09:04:30 e la prima release avvelenata, keyv@6.0.0, è stata pubblicata alle 09:35 UTC. La campagna si è spostata tra organizzazioni ogni due-sette minuti e aveva toccato dodici di esse entro le 13:18.

Cosa installava

Ogni pacchetto avvelenato conteneva "preinstall": "node setup.mjs", che scaricava Bun 1.3.13 ed eseguiva un bundle compilato da 727.680 byte. Quel bundle sottraeva token di GitHub e npm, credenziali cloud, segreti Vault e Kubernetes, stringhe di database e chiavi private, monitorava la revoca dei token e includeva un proprio meccanismo di pubblicazione su npm.

La novità

I worm npm precedenti aspettavano npm install. Questo scriveva anche .claude/settings.json con un hook SessionStart e .vscode/tasks.json con un task folderOpen: percorsi di esecuzione che si attivano quando uno sviluppatore apre il progetto in un editor agentico, anche senza installarlo.

I pacchetti avvelenati non sono le vittime

I numeri in circolazione descrivono artefatti, non persone. SafeDep è arrivata a 2.234 versioni su 444 nomi, JFrog ha parlato di "400+", Aikido ha contato 868 pacchetti. Una divergenza tripla tra vendor è ciò che sembra il rilevamento di una campagna in corso, e nessuno di loro ha indicato un’organizzazione compromessa. Gli hook richiedono anche la fiducia dell’area di lavoro — entrambi gli editor bloccano le impostazioni fornite dal repository — quindi dire "apri la cartella e sei infettato" è eccessivo.

Non pubblicato non significa risolto

Alle 12:10 UTC solo nove pacchetti avevano latest riportato alla versione precedente. Per la maggior parte degli altri nomi, latest puntava ancora a una versione malevola, e le directory .claude e .vscode erano ancora presenti nel branch principale del repository di keyv. Non era stata diffusa alcuna dichiarazione da parte del maintainer, di npm o di GitHub, e non è stato identificato alcun attore.