Certificati validi, account rubati: come gli attaccanti hanno rotto l’ultimo segnale di fiducia di npm
Il 19 maggio 2025, 633 versioni di pacchetti npm malevoli hanno superato la verifica di autenticità Sigstore. Il sistema le ha autorizzate perché l’attaccante aveva generato certificati di firma validi partendo da un account di maintainer compromesso. Sigstore ha fatto esattamente il suo lavoro: ha verificato che il pacchetto fosse stato costruito in un ambiente CI, ha confermato che fosse stato emesso un certificato valido e ha registrato tutto nel registro di trasparenza. Quello che non può fare è determinare se la persona che possiede le credenziali abbia effettivamente autorizzato la pubblicazione — e questa lacuna ha trasformato l’ultimo segnale di fiducia automatizzato di npm in un perfetto camuffamento.
Il giorno prima, StepSecurity aveva documentato un attacco all’estensione Nx Console per VS Code, uno strumento per sviluppatori con oltre 2,2 milioni di installazioni totali. La versione 18.95.0 è stata pubblicata usando credenziali rubate il 18 maggio ed è rimasta attiva per meno di 40 minuti — ma la telemetria interna di Nx ha mostrato circa 6.000 attivazioni durante quella finestra, la maggior parte tramite aggiornamento automatico, contro solo 28 download ufficiali. Il payload ha rubato file di configurazione di Claude Code, chiavi AWS, token GitHub, token npm, contenuti di vault 1Password e token di servizio Kubernetes.
La campagna Mini Shai-Hulud, attribuita da diversi ricercatori a un attore di minacce con motivazioni finanziarie identificato come TeamPCP, ha colpito il registro npm alle 01:39 UTC del 19 maggio. Endor Labs ha rilevato la prima ondata quando due pacchetti dormienti, jest-canvas-mock e size-sensor, hanno pubblicato nuove versioni contenenti uno script Bun offuscato da 498 KB — nessuno dei due era stato aggiornato in oltre tre anni, rendendo una versione improvvisa con dipendenze basate su hash grezzi di commit GitHub un segnale di rilevamento, ma solo se gli strumenti di monitoraggio sono attivi. Entro le 02:06 UTC, il worm si era propagato attraverso l’ecosistema di visualizzazione dati @antv e dozzine di pacchetti non scoped, inclusi echarts-for-react (~1,1 milioni di download settimanali). Socket ha portato il totale a 639 versioni compromesse su 323 pacchetti unici in questa ondata. Nell’intero ciclo di vita della campagna, Socket ha tracciato 1.055 versioni malevole su 502 pacchetti che coinvolgono npm, PyPI e Composer.
StepSecurity ha confermato che il payload conteneva l’integrazione completa di Sigstore. L’attaccante non si è limitato a rubare credenziali: poteva firmare e pubblicare pacchetti npm downstream con attestazioni di provenienza valide. Questi due incidenti non sono isolati. I team di ricerca di Endor Labs, Socket, StepSecurity, Adversa AI, Johns Hopkins, Microsoft MSRC e LayerX hanno dimostrato indipendentemente che il modello di verifica degli strumenti per sviluppatori è rotto, e nessun framework vendor copre tutte le superfici di attacco che hanno fallito.
Sette superfici di attacco sono fallite nelle 48 ore tra il 18 e il 19 maggio: falsificazione della provenienza npm, furto di credenziali delle estensioni VS Code, esecuzione automatica del server MCP, injection di prompt nell’agente CI/CD, esecuzione di codice nel framework agente, esposizione delle credenziali nell’IDE ed esposizione dei dati AI ombra. La griglia di controllo che segue mappa ciascuna.
Il modello di verifica è rotto in tutti e quattro i principali CLI di codifica AI. Adversa AI ha divulgato TrustFall il 7 maggio, dimostrando che Claude Code, Gemini CLI, Cursor CLI e Copilot CLI eseguono automaticamente i server MCP definiti dal progetto nel momento in cui uno sviluppatore accetta un prompt di fiducia della cartella. Tutti e quattro impostano “Sì” o “Fidati” come predefinito. Un solo tasto genera un processo non isolato con tutti i privilegi dello sviluppatore. Il server MCP viene eseguito con privilegi sufficienti per leggere segreti memorizzati e codice sorgente da altri progetti. Nei runner CI che utilizzano l’azione GitHub di Claude Code in modalità headless, la finestra di dialogo di fiducia non viene mai visualizzata. L’attacco viene eseguito con zero interazione umana.
I ricercatori della Johns Hopkins Aonan Guan, Zhengyu Liu e Gavin Zhong hanno pubblicato “Comment and Control”, dimostrando che un’istruzione malevola nel titolo di una pull request su GitHub faceva sì che Claude Code Security Review pubblicasse la propria chiave API come commento. Lo stesso attacco ha funzionato sull’azione Gemini CLI di Google e sull’agente Copilot di GitHub. Anthropic ha valutato la vulnerabilità CVSS 9.4 Critica attraverso il suo programma HackerOne. Microsoft MSRC ha divulgato due vulnerabilità critiche di Semantic Kernel il 7 maggio. Una instrada i campi del vector store controllati dall’attaccante in una chiamata Python eval(); l’altra espone un metodo di download di file lato host come funzione del kernel richiamabile — il che significa che un singolo documento avvelenato in un vector store lancia un processo sull’host.
I ricercatori di LayerX hanno dimostrato separatamente che Cursor memorizza chiavi API e token di sessione in uno storage non protetto, il che significa che qualsiasi estensione del browser può accedere alle credenziali dello sviluppatore senza permessi elevati.
I cacciatori di minacce che danno la caccia a queste credenziali hanno raddoppiato il loro ritmo operativo. Il Verizon 2026 Data Breach Investigations Report, pubblicato il 19 maggio, ha rilevato che il 67% dei dipendenti accede ai servizi AI da account non aziendali su dispositivi aziendali. L’AI ombra è ora la terza azione insider non malevola più comune nei dataset DLP. Il codice sorgente guida tutti i tipi di dati inviati a piattaforme AI non autorizzate — la stessa classe di asset presa di mira dalla campagna di worm npm.
Il CrowdStrike 2026 Financial Services Threat Landscape Report, pubblicato il 14 maggio, documenta gli avversari che cacciano attivamente i tipi di credenziali che questi attacchi raccolgono. STARDUST CHOLLIMA ha triplicato il suo ritmo operativo contro le entità finanziarie nel quarto trimestre 2025. CrowdStrike ha documentato il gruppo che utilizza personaggi reclutatori generati dall’AI su LinkedIn e Telegram, inviando sfide di codifica malevole che sembravano valutazioni tecniche ed eseguendo videochiamate false con ambienti sintetici. Gli obiettivi sono GitHub PAT, token npm, chiavi AWS e segreti CI/CD. L’esposizione AI ombra nella riga 7 della griglia è la porta attraverso cui entrano.
