
Il malware npm si nasconde nel codice di esecuzione, non negli script di installazione
Checkmarx ha scoperto che il pacchetto npm indexed-btree, scaricato due milioni di volte a settimana, nasconde il malware nel codice di esecuzione invece che negli script di installazione.
Una nuova ondata di malware npm si è nascosta nel codice quotidiano di una libreria popolare anziché negli script che vengono eseguiti al momento dell'installazione, secondo i ricercatori di sicurezza di Checkmarx. Il pacchetto si chiama indexed-btree ed è stato pubblicato su npm, il catalogo pubblico che gli sviluppatori di software usano per scaricare pezzi di codice già pronti nei loro progetti, impersonando sorted-btree, una libreria legittima con un nome molto simile. Checkmarx afferma che il pacchetto falso aveva già accumulato due milioni di download settimanali.
La scoperta è importante perché prende di mira una difesa che l'ecosistema npm ha messo in atto solo di recente. Nel giugno 2026, GitHub ha annunciato una serie di misure di sicurezza npm volte a prevenire gli attacchi alla catena di approvvigionamento che hanno scosso ripetutamente i progetti open source dalla fine del 2025. Un attacco alla catena di approvvigionamento è un attacco in cui gli aggressori non violano direttamente una vittima, ma compromettono un componente di cui molte vittime si fidano e che installano. Una delle misure chiave blocca gli script del ciclo di vita delle dipendenze, i piccoli pezzi di codice chiamati preinstall, install e postinstall che vengono eseguiti automaticamente durante l'installazione, a meno che non siano esplicitamente approvati. Altre misure impediscono a npm di scaricare automaticamente dipendenze da repository Git o indirizzi web remoti senza autorizzazione.
indexed-btree aggira tutto questo non utilizzando alcuno script di installazione. Invece, il loader è nascosto all'interno del metodo BTree.prototype.set() della libreria stessa, che Checkmarx descrive come la funzione principale che ogni utente della libreria chiamerebbe costantemente. Quel metodo non fa nulla di sospetto durante l'installazione del pacchetto; agisce solo in fase di esecuzione, cioè mentre l'applicazione è effettivamente in funzione, e solo quando viene chiamato con un valore di chiave specifico. Di conseguenza, l'installazione appare completamente pulita e non attiva nessuno dei meccanismi di approvazione di npm versione 12. Il loader nascosto è un file chiamato sharedLoad.min.js, che contiene il primo stadio del malware in forma offuscata, cioè scritto deliberatamente in modo confuso affinché il suo vero scopo sia difficile da leggere.
Checkmarx osserva che questo è un modo ben congegnato per eludere gli strumenti standard di analisi della contaminazione, che seguono come i dati si muovono attraverso un programma, e la maggior parte degli scanner statici, che ispezionano il codice senza mai eseguirlo. Poiché il comportamento dannoso appare solo quando l'applicazione viene eseguita, gli strumenti che esaminano un pacchetto al momento dell'installazione non vedono nulla di insolito.
Una volta in esecuzione, il malware raccoglie dettagli sulla macchina su cui è atterrato, tra cui architettura del processore, hostname, CPU, memoria e tempo di attività, e invia tali informazioni attraverso canali Slack e Telegram codificati. Interroga anche un contratto intelligente sulla rete di test Sepolia, un ambiente di test basato su Ethereum, per recuperare le sue informazioni di comando e controllo, cioè le istruzioni che gli operatori inviano alle macchine infette. Utilizza lo scambio di chiavi X25519 per derivare una chiave AES, due metodi crittografici usati per creare e scambiare i codici segreti che bloccano e sbloccano i dati, e poi decripta un payload di secondo stadio memorizzato in quel contratto. Gli operatori possono anche scegliere di terminare l'attacco: il malware è in grado di eliminare i propri file e rimuovere il trigger malevolo dal codice del pacchetto, cancellando le tracce lasciate dietro di sé.
I ricercatori riferiscono che gli aggressori si sono spinti molto in là per far sembrare il progetto affidabile, costruendo un repository GitHub dall'aspetto legittimo, riempiendo la sua cronologia di commit e curando l'account sviluppatore che lo ha pubblicato. La campagna potrebbe anche essere stata redditizia. Secondo Checkmarx, gli aggressori usano un portafoglio contenente 109 ETH, la criptovaluta della rete Ethereum. Il rapporto non dice che quei fondi provengano da furto di criptovalute, e quel collegamento non è stato stabilito.
Checkmarx ha identificato altri nove pacchetti npm collegati alla stessa operazione e riferisce che ora sono stati rimossi da npm. Anche loro hanno raggiunto conteggi di download sostanziali: ordered-kv-index (448.184), btree-leaderboard (493.685), priority-slot-queue (402.860), btree-range-store (468.092), btree-core (1.951.274), btree-time-index (425.312), btree-lru-cache (372.185), neighbor-key-map (366.019) e sliding-score-window (448.024).
La lezione pratica che i ricercatori traggono è che la scansione al momento dell'installazione da sola non è sufficiente, perché un pacchetto può comportarsi perfettamente durante l'installazione e diventare ostile molto più tardi. Checkmarx consiglia di aggiungere l'analisi comportamentale in fase di esecuzione, cioè osservare cosa fa effettivamente il codice installato mentre viene eseguito. A chiunque abbia installato indexed-btree o uno dei nove pacchetti elencati sopra si consiglia di ruotare tutti i segreti, in altre parole di sostituire ogni password, token di accesso e chiave che la macchina interessata potrebbe aver visto, e di ripristinare l'ambiente di sviluppo da un backup sicuro invece di tentare di pulirlo sul posto. Per i team che desiderano una revisione indipendente di ciò che viene eseguito all'interno dei propri sistemi, AEU-I offre servizi IT, infrastrutturali e di consulenza improntati alla sicurezza, che è esattamente il tipo di controllo di cui questo incidente dimostra il valore.
Come Proteggerti
- Se possiedi un sito web costruito con componenti di codice esterni, chiedi a chi lo mantiene di controllare i nomi dei pacchetti in questa storia e rimuovere quelli che trova.
- Cambia le password e le chiavi di accesso per qualsiasi servizio che sia mai stato configurato su un computer dove potrebbe essere stato installato questo tipo di codice, perché le chiavi rubate possono essere riutilizzate in seguito.
- Mantieni un backup recente del tuo sito web e del tuo computer di lavoro, così puoi ricostruire in modo pulito se qualcosa si rivela infetto.
- Non aggiungere componenti software di editori sconosciuti solo perché sono popolari; controlla chi li ha creati e da quanto tempo esiste il progetto.
- Attiva gli aggiornamenti automatici e l'accesso in due passaggi ovunque siano offerti, così una sola password rubata non è sufficiente per far entrare un aggressore.
I Termini Spiegati
- npm Un catalogo online pubblico che gli sviluppatori di software usano per scaricare pezzi di codice già pronti nei loro progetti.
- install script Un piccolo pezzo di codice che viene eseguito da solo mentre un componente software viene installato, prima che qualcuno lo usi.
- supply chain attack Un attacco in cui i criminali compromettono un pezzo di software ampiamente fidato invece di violare ogni vittima una per una.
- obfuscated Scritto in modo deliberatamente confuso così che una persona che lo legge non possa facilmente capire cosa fa.
- runtime Il momento in cui un programma è effettivamente in esecuzione e svolge il suo lavoro, in contrapposizione al momento in cui viene installato.
- command-and-control Il canale attraverso cui i criminali inviano ordini a una macchina infetta e ricevono informazioni da essa.
- smart contract Un piccolo programma memorizzato su una blockchain che viene eseguito automaticamente quando si verificano determinate condizioni.