PhantomRaven, il malware nascosto nei pacchetti NPM che sfrutta dipendenze invisibili

di Redazione
0 commenti

La campagna di malware PhantomRaven ha colpito nel 2025 l’ecosistema NPM, introducendo una tecnica sofisticata basata su dipendenze dinamiche remote per rubare token e credenziali da sviluppatori e pipeline CI/CD. Questo attacco evidenzia un punto cieco nella sicurezza della supply chain software: il codice malevolo non risiede nei pacchetti stessi ma viene richiamato da server esterni durante l’installazione, eludendo i controlli statici e ingannando anche gli strumenti basati su intelligenza artificiale.

Scoperta della campagna PhantomRaven

image 931
PhantomRaven, il malware nascosto nei pacchetti NPM che sfrutta dipendenze invisibili 7

Il motore di analisi comportamentale ha individuato PhantomRaven in ottobre 2025, dopo oltre due mesi di attività occulta. La campagna aveva già compromesso 126 pacchetti, accumulando più di 86.000 download. Ottanta di questi pacchetti risultavano ancora attivi al momento della scoperta. Gli attaccanti avevano pubblicato i primi ventuno pacchetti in agosto, subito rimossi da NPM, ma ne avevano caricati altri ottanta tra settembre e ottobre. Tutti facevano riferimento a infrastrutture sospette come il dominio packages.storeartifact.com, collegato all’indirizzo IP 54.173.15.59.
Gli autori avevano creato account email sequenziali – da [email protected] a [email protected] – e nomi utente come “npmhell” o “npmpackagejpd”. Questi dettagli hanno permesso di collegare l’intera operazione a un’unica entità.

Tecniche di elusione e struttura del malware

Il malware PhantomRaven sfrutta Remote Dynamic Dependencies (RDD), una tecnica che consente di dichiarare dipendenze sotto forma di URL HTTP esterni. Durante l’esecuzione di “npm install”, NPM scarica il contenuto remoto, che può essere aggiornato o sostituito a piacimento dagli attaccanti. Ciò permette di servire codice benigno ai ricercatori e malevolo alle reti aziendali, rendendo quasi impossibile la rilevazione statica. Il meccanismo di esecuzione si basa sugli script preinstall, inseriti nel file package.json, che eseguono comandi prima del completamento dell’installazione. Una volta attivati, gli script raccolgono variabili d’ambiente, file di configurazione come .gitconfig, .npmrc e package.json, e token da GitHub Actions, GitLab CI, Jenkins e CircleCI. I dati vengono esfiltrati via HTTP GET o POST, e in caso di blocchi di rete, tramite WebSocket, garantendo la trasmissione anche in ambienti isolati.

La catena di attacco PhantomRaven

La catena di infezione si attiva al momento dell’installazione di un pacchetto infetto. Il codice remoto scaricato dal dominio dell’attaccante viene eseguito immediatamente. Il malware effettua un’analisi approfondita del sistema, raccoglie indirizzi IP pubblici e locali, hostname, versione del sistema operativo e versione di Node.js. Tutte le informazioni vengono inviate all’endpoint “jpd.php”, ospitato sullo stesso dominio sospetto. Il codice nel pacchetto visibile su NPM appare innocuo, spesso limitato a una semplice stringa “console.log(‘Hello, world!’)”, senza dipendenze registrate. Questo approccio inganna non solo gli utenti ma anche le piattaforme di sicurezza automatizzate, che vedono pacchetti apparentemente legittimi e senza contenuti malevoli.

Pacchetti coinvolti e strategie di diffusione

Tra i pacchetti dannosi figurano nomi come fq-ui, mocha-no-only, unused-imports, polyfill-corejs3, eslint-plugin-cli-microsoft365, google-cloud-functions-framework e airbnb-base-hf. Tutti imitano librerie esistenti o popolari, applicando la tecnica dello slopsquatting, che consiste nel creare nomi quasi identici a quelli legittimi. Questo metodo inganna anche i suggerimenti automatici di AI come GitHub Copilot, inducendo gli sviluppatori a installare le versioni false. La diffusione di PhantomRaven è quindi potenziata dall’intelligenza artificiale: i modelli linguistici tendono a suggerire i pacchetti più “plausibili”, favorendo inconsapevolmente quelli dannosi.

Infrastruttura di comando e controllo

Il dominio principale, packages.storeartifact.com, ospita le dipendenze invisibili e i payload aggiornati. L’IP 54.173.15.59 funge da nodo di esfiltrazione dei dati e riceve informazioni dai pacchetti compromessi. Il file jpd.php elabora le informazioni raccolte, tra cui token di accesso e credenziali CI/CD.
Gli attaccanti gestiscono la campagna in modo modulare, caricando nuovi pacchetti ogni volta che i precedenti vengono rimossi, mantenendo così un flusso costante di infezioni. Questa strategia dimostra una comprensione profonda delle dinamiche di sicurezza dell’ecosistema NPM.

Analisi tecnica e comportamento del malware

Il malware PhantomRaven non si limita al furto di credenziali: analizza i file di configurazione per identificare i flussi di lavoro aziendali. Raccoglie variabili d’ambiente, token d’autenticazione NPM, e indirizzi dei repository remoti, consentendo accessi non autorizzati a infrastrutture di sviluppo interne.
La sua architettura modulare consente aggiornamenti continui: gli attaccanti possono modificare il codice distribuito tramite la RDD senza pubblicare nuove versioni del pacchetto su NPM. Questo garantisce persistenza, adattabilità e un’elevata difficoltà di rilevazione.

Indicatori di compromissione e persistenza

Gli indicatori di compromissione (IoC) includono le richieste HTTP verso packages.storeartifact.com, connessioni all’IP 54.173.15.59, e script “preinstall” sospetti. La persistenza della campagna è stata resa possibile dalla scarsa visibilità del comportamento runtime dei pacchetti e dall’uso di infrastrutture dinamiche. Ogni volta che NPM rimuoveva i pacchetti infetti, gli attaccanti ne pubblicavano di nuovi, con minime variazioni di nome o contenuto. Questa tattica ha mantenuto attiva la minaccia per mesi, esponendo migliaia di sviluppatori e aziende.

Lezioni di sicurezza e raccomandazioni

Il caso PhantomRaven mostra i limiti delle analisi statiche e l’urgenza di adottare monitoraggi comportamentali. Solo l’osservazione runtime — che registra accessi ai file, connessioni di rete e script eseguiti — permette di individuare queste minacce.

Gli esperti raccomandano di:
– Verificare sempre le dipendenze e i domini da cui vengono scaricati i pacchetti.
– Evitare l’uso di librerie suggerite automaticamente da strumenti AI senza controllo umano.
– Implementare tool che analizzano le attività durante l’installazione e non solo la struttura statica dei pacchetti.

La sicurezza dell’ecosistema open source richiede un cambio di paradigma: dal semplice controllo delle firme digitali alla sorveglianza del comportamento in esecuzione. PhantomRaven rappresenta una delle campagne di supply chain più sofisticate mai osservate su NPM, capace di sfruttare le lacune di fiducia e le dipendenze invisibili per infiltrarsi silenziosamente nelle catene di sviluppo globali.