CSIRT Toscana

ChainDrop: campagna worm auto-propagante nell’ecosistema npm (BL01/260805/CSIRT-ITA)

Data:
5 Agosto 2026

Sintesi

Ricercatori di sicurezza hanno recentemente identificato una campagna di compromissione della supply chain software presente nell’ecosistema npm – denominata “ ChainDrop ” – che ha interessato oltre 400 pacchetti appartenenti a maintainer e organizzazioni differenti. La minaccia si caratterizza per la presenza di un malware auto-propagante in grado di compromettere workstation di sviluppo e ambienti CI/CD, esfiltrare credenziali e riutilizzarle per pubblicare ulteriori versioni malevole di pacchetti legittimi. Tra i pacchetti coinvolti figurano componenti ampiamente utilizzati nell’ecosistema JavaScript, come keyv , flat-cache , file-entry-cache e cache-manager .

Descrizione e potenziali impatti

Le evidenze finora disponibili per la campagna in oggetto, suggeriscono l’utilizzo, da parte degli attaccanti, di credenziali e/o token di accesso npm già compromessi in precedenza per perpetrare la pubblicazione di pacchetti npm opportunamente predisposti, consentendo agli attaccanti la capacità di distribuire versioni contenenti codice malevolo attraverso il registro ufficiale. Le release compromesse introducono tipicamente uno script preinstall che avvia un componente denominato setup.mjs , responsabile del caricamento del payload principale identificato come Math_Symbol.js (o varianti analoghe).

Vettore di infezione

L’esecuzione del contenuto malevolo avviene durante la fase di installazione del pacchetto, prima del completamento della procedura npm. Tale comportamento consente al malware di operare sia sulle workstation degli sviluppatori sia sugli ambienti CI/CD utilizzati per build e deployment automatizzati. Una volta avviato, il payload è in grado di distinguere tra workstation e runner CI/CD: nei sistemi di integrazione continua può mantenersi agganciato al processo di build per accedere ai secret, ai token temporanei e alle credenziali disponibili nel contesto della pipeline stessa.

Meccanismo di propagazione

Una volta eseguito, il malware raccoglie informazioni e credenziali presenti sul sistema locale, incluse variabili d’ambiente, token npm, token GitHub, chiavi SSH, credenziali cloud e segreti utilizzati nelle pipeline di automazione. Le credenziali ottenute vengono successivamente utilizzate per accedere a repository, servizi cloud e account npm, consentendo la pubblicazione automatizzata di ulteriori pacchetti compromessi per la diffusione della campagna verso nuovi bersagli.

Persistenza ed evasione

Le analisi hanno evidenziato la capacità del malware di modificare file di configurazione associati ad ambienti di sviluppo e repository GitHub , inclusi componenti collegati a Visual Studio Code e Claude Code , al fine di mantenere la persistenza sui sistemi e favorire ulteriori esecuzioni anche successivamente alla rimozione della dipendenza originaria. Inoltre, il payload utilizza tecniche di offuscamento avanzate e meccanismi cifrati di esfiltrazione delle informazioni raccolte.

Impatto

La compromissione può determinare l’esfiltrazione di credenziali e di segreti aziendali, l’accesso non autorizzato a repository software e infrastrutture cloud, l’alterazione di workflow di sviluppo e distribuzione, e la pubblicazione di ulteriori componenti software compromessi. La natura auto-propagante del malware aumenta significativamente il potenziale impatto sull’intera catena di fornitura software.

Prodotti e versioni affette

Sono stati identificati oltre 400 pacchetti npm compromessi. I pacchetti e le relative versioni note includono, ma non sono limitati a:

  • keyv 6.0.0
  • flat-cache 6.1.24
  • file-entry-cache 11.1.6
  • cache-manager 7.2.10
  • cacheable 2.5.1
  • cacheable-request 13.0.20
  • @cacheable/memory 2.2.1
  • @cacheable/node-cache 3.1.2
  • @cacheable/utils 2.5.1
  • @cacheable/net 2.1.1
  • ecto 5.0.1

NB : a causa del meccanismo auto-propagante, il perimetro delle versioni impattate risulta estremamente dinamico. Si raccomanda di non limitare la verifica ai soli numeri di versione sopra indicati, ma di estendere il controllo a qualsiasi release pubblicata nella finestra temporale della campagna.

Azioni di mitigazione

Si raccomanda di valutare l’adozione delle seguenti misure di sicurezza:

  • aggiornare il client npm alle versioni più recenti disponibili e valutare l’utilizzo della funzionalità min-release-age per ridurre il rischio derivante dall’installazione automatica di release appena pubblicate;
  • eseguire l’installazione delle dipendenze npm/yarn impostando tassativamente il flag –ignore-scripts in fase di analisi o bonifica per impedire l’esecuzione automatica di hook preinstall e postinstall ;
  • analizzare package-lock.json , yarn.lock e pnpm-lock.yaml per identificare eventuali riferimenti ai pacchetti e alle versioni compromesse segnalate dai ricercatori;
  • utilizzare esclusivamente versioni verificate come sicure ed evitare aggiornamenti automatici verso release non ancora validate (valutare il blocco temporaneo o la risoluzione rigida tramite overrides / resolutions );
  • in presenza di sistemi che abbiano installato versioni compromesse, procedere alla revoca e rigenerazione di token npm, credenziali GitHub, chiavi cloud, segreti CI/CD e ulteriori credenziali accessibili dall’host interessato;
  • eliminare le cache npm e yarn, verificare gli artefatti prodotti durante il periodo di esposizione e ricostruire immagini e runner CI/CD da sorgenti affidabili;
  • controllare la presenza di modifiche non autorizzate a repository GitHub, workflow automatizzati e file di configurazione associati agli strumenti di sviluppo (es. estensioni e impostazioni di VS Code e Claude Code);
  • verificare la presenza di file quali setup.mjs , Math_Symbol.js , math_init.js o altre varianti analoghe riconducibili alla campagna ChainDrop.

Infine, si raccomanda di valutare l’implementazione degli Indicatori di Compromissione (IoC) riportati nelle fonti ufficiali disponibili nella sezione Riferimenti.

Riferimenti

Change log

Versione Note Data
1.0 Pubblicato il 05-08-2026 05/08/2026

Il presente articolo è un prodotto originale di csirt.gov.it, riproposto qui a solo scopo di aumentarne la visibilità. Può essere visualizzato in versione originale al seguente link

Ultimo aggiornamento

5 Agosto 2026, 15:29