Pacchetto npm malevolo nascondeva malware nel codice di runtime

Pacchetto npm malevolo nascondeva malware nel codice di runtime

Checkmarx ha scoperto un pacchetto npm malevolo, indexed-btree, che eseguiva il suo malware dal normale codice della libreria invece che dagli script di installazione, ed è stato scaricato milioni di volte.

Un pacchetto npm malevolo chiamato indexed-btree trasportava il suo malware all'interno di normale codice di libreria che viene eseguito mentre un'applicazione è in funzione, invece che negli hook al momento dell'installazione che i team di sicurezza hanno imparato a monitorare. Il pacchetto è stato identificato da Checkmarx, una società di sicurezza della supply chain del software, che ha dichiarato che il codice imitava sorted-btree, una legittima utility di indicizzazione costruita attorno a un B-tree, una struttura dati ordinata che le applicazioni usano per memorizzare e cercare rapidamente informazioni ordinate. Il pacchetto e il suo repository GitHub associato non sono più disponibili per il download da npm.

npm è il principale registro pubblico da cui i progetti JavaScript e Node.js scaricano codice già pronto scritto da altre persone. Per anni, uno dei modi più semplici per attaccare quell'ecosistema è stato uno script del ciclo di vita, una breve istruzione come preinstall o postinstall che viene eseguita automaticamente quando un pacchetto viene installato. Checkmarx ha osservato che questi hook hanno usi onesti, come compilare codice, popolare un database con valori iniziali o impostare file di configurazione, ma che gli attaccanti li hanno spesso abusati per eseguire codice malevolo su una macchina senza che l'utente fosse d'accordo. La versione 12 di npm ha introdotto un cambiamento di sicurezza per impedire l'esecuzione automatica di script del ciclo di vita come preinstall e postinstall. La campagna indexed-btree sembra essere una risposta diretta a quel cambiamento: il pacchetto non si affida affatto a quegli hook e invece viene eseguito interamente dal codice dell'applicazione a runtime.

Il loader è nascosto all'interno di un metodo chiamato BTree.prototype.set(), una funzione dall'aspetto normale che l'applicazione di uno sviluppatore chiama quando memorizza un valore nella struttura dati. Quando quella funzione viene eseguita, attiva un secondo file, sharedLoad.min.js, un payload JavaScript che incorpora il primo stadio offuscato (volutamente rimescolato in modo che sia difficile da leggere) del malware. Secondo Checkmarx, quello stadio prende le impronte della macchina su cui è in esecuzione, segnala ciò che trova a un canale Slack e a un bot Telegram codificati in modo fisso, quindi usa una tecnica chiamata EtherHiding per recuperare blob crittografati di codice da uno smart contract distribuito sulla testnet Sepolia, una blockchain di test Ethereum. I blob vengono uniti per costruire il payload di secondo stadio. Una volta fatto ciò, il malware elimina i propri artefatti e rimuove il trigger dal codice del pacchetto, così la traccia è più difficile da seguire.

Le statistiche citate da Checkmarx mostrano che indexed-btree è stato caricato per la prima volta nel registro npm il 18 giugno 2026 da un utente npm chiamato charlessadler25, e che ha accumulato milioni di download in un breve arco di tempo. La campagna potrebbe anche aver fruttato denaro all'operatore: Checkmarx ha dichiarato che ha generato circa 230.933,57 EUR in criptovaluta, equivalenti a 109 ETH.

Checkmarx ha dichiarato che indexed-btree è uno dei tanti pacchetti npm legati alla stessa operazione, tutti rimossi da npm: ordered-kv-index, btree-leaderboard, priority-slot-queue, btree-range-store, btree-core, btree-time-index, btree-lru-cache, neighbor-key-map, sliding-score-window e mutex-forge.

Per contrastare la minaccia, Checkmarx raccomanda agli sviluppatori di non affidarsi solo alla scansione al momento dell'installazione e al blocco degli script del ciclo di vita, ma di usare anche l'analisi del comportamento a runtime, cioè strumenti che osservano ciò che il software fa effettivamente mentre è in esecuzione. Ensar Seker, chief information security officer di SOCRadar, ha dichiarato in una nota condivisa con The Hacker News che la campagna mostra gli attaccanti adattarsi quasi immediatamente a difese più forti della supply chain del software: npm ha migliorato la sicurezza al momento dell'installazione limitando gli script del ciclo di vita delle dipendenze, e questa operazione ha spostato l'esecuzione malevola in funzionalità di runtime dall'aspetto legittimo. Il punto più ampio di Seker è che i controlli di sicurezza cambiano il comportamento degli attaccanti piuttosto che eliminare la minaccia sottostante. Bloccare gli script del ciclo di vita è un miglioramento importante, ha sostenuto, ma gli attaccanti continueranno a cercare percorsi di esecuzione alternativi, quindi i difensori hanno bisogno di controlli a strati in grado di rilevare comportamenti malevoli prima dell'installazione, durante l'esecuzione e dopo il deployment.

Separatamente, la società di sicurezza Socket ha dichiarato di aver eliminato codice malevolo nella versione dev-main di visanduma/nova-two-factor, un pacchetto su Packagist, il principale registro pubblico per il codice PHP, con più di 700.000 download cumulativi. Socket ha collegato quell'intrusione a una campagna in corso che chiama PolinRider, che secondo lei è associata alla Corea del Nord. Un tratto distintivo della campagna è che gli operatori compromettono account di sviluppatori e iniettano contenuti malevoli nei repository del codice sorgente, poi usano azioni di routine degli sviluppatori come clonare un repository o aprirlo in un ambiente di sviluppo integrato (IDE, il programma in cui il codice viene scritto ed eseguito) come trigger che avvia la catena di infezione. Secondo Socket, questo spesso comporta la riscrittura della cronologia Git, l'occultamento di payload all'interno di file di configurazione o di font, l'impostazione di attività VS Code malevole che si eseguono da sole e l'affidamento a una distribuzione resistente alla rimozione come EtherHiding e il suo successore orientato alla furtività NullReceiver per recuperare payload a stadi attraverso una blockchain.

Il ricercatore di sicurezza di Socket Karlo Zanki ha dichiarato che l'analisi dell'organizzazione GitHub Visanduma indica che i suoi repository sono stati compromessi da metà giugno 2026, con le modifiche malevole introdotte tramite l'account sviluppatore LaHiRu. Un cambiamento notevole in questa iterazione, secondo Socket, è l'inserimento diretto di JavaScript pesantemente offuscato in index.php e la sua esecuzione tramite la funzione shell_exec() di PHP. Questo approccio consente a un punto di ingresso PHP di avviare la catena di infezione JavaScript, e Socket lo legge come un segno che gli operatori adattano il loro metodo di esecuzione al progetto che hanno compromesso invece di usare un unico percorso di distribuzione fisso.

Socket ha anche tratto una conclusione più ampia: la compromissione del registro dei pacchetti è spesso una conseguenza di un'intrusione più ampia basata su Git piuttosto che l'obiettivo principale della campagna. Gli operatori usano la normale collaborazione sul codice sorgente per raggiungere gli ambienti degli sviluppatori, diffondersi in repository aggiuntivi e mantenere l'accesso nel tempo. Un repository sorgente compromesso dà loro la possibilità di infettare i collaboratori, raggiungere progetti privati e muoversi attraverso i normali flussi di lavoro di sviluppo, e pubblicare un pacchetto diventa solo un ulteriore percorso di distribuzione quando quel repository produce una nuova release.

Per i proprietari di siti web e i team IT la lezione pratica è che i siti moderni sono assemblati da dozzine, a volte centinaia, di componenti di terze parti, e entrambi questi casi mostrano che un'installazione pulita non è prova di sicurezza. Gli scanner che guardano il codice solo quando viene installato possono perdere malware che aspetta che l'applicazione sia effettivamente in esecuzione, e un repository sorgente può essere compromesso molto prima che qualsiasi pacchetto venga pubblicato. I team dovrebbero tenere un inventario di ciò da cui dipendono i loro siti e applicazioni, osservare comportamenti inattesi dai loro server come traffico in uscita verso servizi che nessuno ha configurato, e proteggere gli account degli sviluppatori, le chiavi dei sistemi di rilascio e deployment, con la stessa cura dei login di produzione, inclusa l'autenticazione a due fattori. Per le organizzazioni che preferiscono non rivedere interamente da sole come costruiscono ed eseguono il software, AEU-I è il nostro servizio di IT, infrastruttura e consulenza orientato alla sicurezza, e le sue pagine pubbliche illustrano le aree che copre.

Come Proteggerti

  1. Chiedi a chi costruisce o mantiene il tuo sito web quali pezzi di codice esterni utilizza e come li controlla per problemi di sicurezza.
  2. Mantieni aggiornati automaticamente la piattaforma del tuo sito web, i plugin e i temi, ma solo dalla fonte ufficiale, e rimuovi qualsiasi componente aggiuntivo che non usi più.
  3. Non installare pacchetti di codice, estensioni del browser o strumenti con nomi molto simili a uno popolare finché non sei sicuro di chi li ha pubblicati.
  4. Chiedi al tuo provider di hosting o IT se il software del tuo sito viene monitorato mentre è in esecuzione e non solo quando viene installato.
  5. Attiva l'autenticazione a due fattori (un secondo codice al momento del login) per ogni account che può pubblicare codice o gestire il tuo sito web.
  6. Se il tuo sito improvvisamente invia traffico verso servizi che non hai mai configurato, o la tua bolletta di hosting aumenta senza una ragione chiara, segnalalo subito al tuo provider.

I Termini Spiegati

  • npm La principale libreria pubblica online da cui i progetti JavaScript e Node.js scaricano pezzi di codice già pronti scritti da altre persone.
  • lifecycle script Una breve istruzione all'interno di un pacchetto di codice che viene eseguita da sola mentre il pacchetto viene installato, senza che la persona che lo installa faccia nulla.
  • package registry Un catalogo online dove gli sviluppatori pubblicano pacchetti di codice e altri li scaricano, come npm per JavaScript o Packagist per PHP.
  • B-tree Un modo di organizzare i dati memorizzati in modo che un programma possa trovare e ordinare gli elementi rapidamente, simile a un archivio ben ordinato.
  • EtherHiding Un trucco in cui il codice malevolo viene memorizzato su una blockchain, un registro pubblico condiviso, in modo che non possa essere facilmente rimosso.
  • smart contract Un piccolo programma che vive su una blockchain e viene eseguito automaticamente, che gli attaccanti possono usare come luogo di archiviazione nascosto per il codice.
  • obfuscated Scritto in modo volutamente rimescolato affinché un lettore umano non possa facilmente capire cosa fa il codice.
  • IDE Un ambiente di sviluppo integrato, il programma software in cui gli sviluppatori scrivono, eseguono e testano il loro codice.

Servizi AEU correlati

  • AEU-I Consulenza IT e sicurezza