Il malware che ha approvato perché non riusciva a vederlo
GlassWorm nasconde il suo payload in Unicode invisibile, che supera la revisione del codice da parte di un essere umano, e poi legge le credenziali lasciate in giro nella sua workspace. Un worm invisibile non viola la crittografia. Gli serve un file.
Il suo revisore ha letto la pull request. Ogni riga risultava pulita: un aggiornamento di versione, un piccolo refactor, una modifica alla documentazione. Non sembrava nulla di anomalo, perché la parte anomala non è mai stata disegnata sullo schermo. Era scritta con caratteri Unicode privi di glifo. Invisibile ai suoi occhi, invisibile alla vista delle differenze, invisibile al via libera umano su cui la sicurezza della supply chain ancora si fonda.
Questo è GlassWorm. Da ottobre, i ricercatori di Koi Security tracciano il primo worm autoreplicante a diffondersi tramite estensioni di VS Code, e non si è fermato [1]. Socket ha segnalato oltre settanta nuove estensioni malevole sul marketplace Open VSX dalla fine di gennaio [2]. Il loader si nasconde all'interno di Unicode invisibile, così il codice supera la revisione sembrando manutenzione ordinaria.
Quello che fa dopo l'installazione è la parte ordinaria, ed è esattamente il punto. Legge ciò che si trova a portata. Token npm. Credenziali GitHub. La configurazione Git. Variabili d'ambiente e secret CI lasciati scoperti nella sua workspace. Poi usa quelle credenziali rubate per pubblicare altri pacchetti avvelenati a suo nome, ed è così che un worm diventa un worm. Il command and control passa tramite transazioni Solana, quindi non esiste un server da sequestrare [3].
Ecco la rilettura della vicenda. Nessuno ha violato @code. Open VSX non è stato compromesso nel senso classico del termine. Il modello delle estensioni ha fatto esattamente ciò per cui è stato progettato: Lei installa un componente aggiuntivo, e questo gira con i suoi permessi, dentro il suo progetto aperto, accanto ai suoi secret. Quel modello è stato costruito per un mondo in cui l'autore dell'estensione era l'unica parte di cui fidarsi. GlassWorm trasforma l'account di un autore affidabile in un camion di consegne e nasconde il carico in caratteri che Lei non può vedere. Lo strumento non ha fallito. Il modello di minaccia si è spostato sotto i piedi di tutti contemporaneamente.
Il che la porta a una domanda scomoda sulla propria macchina. Quando un'estensione di cui si fidava apre il suo progetto, cosa c'è lì dentro da prendere?
Per la maggior parte degli sviluppatori la risposta è: tutto. Un token npm di lunga durata in un dotfile. Un personal access token che una guida di setup premurosa le ha detto di incollare una volta e dimenticare. Secret in un file env che ogni processo sulla macchina può leggere. Queste credenziali sono a riposo, nel punto esatto in cui gira il codice, in attesa di qualunque cosa abbia accesso locale. Un worm invisibile nel suo editor non ha bisogno di violare la crittografia. Gli serve un file.
Clavitor parte dal presupposto opposto. Una credenziale viene negoziata nel momento in cui serve, con ambito limitato all'unica operazione per cui è destinata, e scade. Non viene mai scritta nel suo ambiente di sviluppo per essere scoperta in seguito. Così, quando del codice ostile setta la workspace in cerca di chiavi a riposo, non trova un token npm permanente, nessun GitHub PAT eterno, nulla che sopravviva al secondo in cui è stato usato. Il worm apre il cassetto, e il cassetto è vuoto.
Il limite onesto: una credenziale in uso attivo resta valida finché è in uso. Se la sua sessione è in corso e del codice ostile condivide quella sessione, può sfruttare ciò che è vivo in quel momento, dentro la breve finestra e il ristretto ambito di quella credenziale. L'emissione effimera e con ambito limitato riduce il raggio d'impatto e la durata del rischio. Non rende sicura una macchina che ha consegnato a un attaccante. Nessun sistema lo fa. Ma c'è una differenza enorme tra un attaccante che riesce a intercettare una singola credenziale con ambito limitato durante l'uso e un attaccante che copia un file di chiavi permanenti e La possiede per un anno.
Abbiamo redatto la lista breve di ciò che un sistema di credenziali non dovrebbe mai fare. Quasi in cima: non lasciare secret dove gira il codice. Le legga qui
Clavitor (@clavitorai) è il vault di credenziali costruito per gli agenti AI, e contro di essi. clavitor.ai
Fonti
[1] Koi Security — "GlassWorm: The First Self-Propagating Worm Using Invisible Code Hits the Open VSX Marketplace" (società di ricerca; nessun handle X verificato)
[2] Socket, via @TheHackersNews — "GlassWorm Supply-Chain Attack Abuses 72 Open VSX Extensions to Target Developers" (@SocketSecurity)
[3] @SecurityWeek — "Supply Chain Attack Targets VS Code Extensions With 'GlassWorm' Malware"