Attacco supply chain npm: Tinycolor infetta 500 pacchetti

di Redazione
0 commenti 7 minuti di lettura

L’attacco supply chain contro @ctrl/tinycolor introduce una campagna worm-like denominata Shai-Hulud che compromette oltre 500 pacchetti npm, inclusi tool open source sotto il namespace CrowdStrike, e punta a segreti di sviluppatori e pipeline CI/CD attraverso TruffleHog, workflow GitHub Actions persistenti e webhook hardcoded. La minaccia, osservata il 16 settembre 2025, sfrutta una versione malevola del pacchetto Tinycolor per auto-propagarsi con ripubblicazioni automatizzate, iniettare bundle.js e esfiltrare token come GITHUB_TOKEN, NPM_TOKEN e credenziali cloud, mettendo a rischio progetti ad alto volume di download e mostrando la fragilità delle dipendenze transitive. L’azione coordinata di Socket e Check Point individua e descrive il flusso completo, mentre npm e CrowdStrike rimuovono versioni compromesse e ruotano le chiavi, con impatti globali su team e repository. Le mitigazioni immediate richiedono pinning delle versioni sicure, rotazione dei segreti, audit dei log e monitoraggio comportamentale su pubblicazioni e workflow anomali.

Shai-Hulud: attacco worm alla supply chain npm

La campagna Shai-Hulud dimostra come un pacchetto leggero possa fungere da paziente zero per un’infezione a catena nell’ecosistema npm. L’obiettivo consiste nel rubare segreti e abusare delle identità di maintainer e pipeline per ripubblicare pacchetti trojanizzati. Il comportamento auto-propagante consente di espandere rapidamente il perimetro da decine a centinaia di pacchetti in poche ore, sfruttando fiducia e automazioni tipiche dei flussi DevOps.

Origine e compromissione di @ctrl/tinycolor

image 257
Attacco supply chain npm: Tinycolor infetta 500 pacchetti 8

Gli attaccanti compromettono @ctrl/tinycolor il 16 settembre 2025, un pacchetto con 2,2 milioni di download settimanali usato per manipolazioni colore in JavaScript. La versione malevola introduce la funzione NpmModule.updatePackage, che scarica i tarball di pacchetti affini dello stesso maintainer, ne modifica il package.json per iniettare bundle.js, quindi reimpacchetta e ripubblica su npm. Il risultato è una propagazione automatica che trojanizza a cascata le dipendenze downstream, capitalizzando sul meccanismo di fiducia tra maintainer e sulle automazioni di publish. Le prime anomalie emergono durante le scansioni di routine di Socket, mentre Check Point conferma lo stile worm battezzandolo Shai-Hulud. L’espansione segue un gradiente di correlazione: da Tinycolor ai pacchetti @ctrl/, fino a namespace terzi come @crowdstrike/, con account di pubblicazione abusati e credenziali rubate.

Propagazione automatica e struttura del payload

Il payload in bundle.js si attiva in fase di installazione e orchestra le fasi di raccolta segreti, persistence e esfiltrazione. La funzione updatePackage rappresenta il motore di diffusione, perché automatizza il ciclo di download, modifica, iniezione e ripubblicazione dei pacchetti correlati, permettendo al malware di scalare rapidamente con intervento umano minimo. L’aumento osservato da circa 40 a 187 e poi a 500 pacchetti compromessi in poche ore testimonia l’efficienza del modello, soprattutto in ambienti CI dove il publish avviene spesso su trigger automatici.

TruffleHog e caccia ai segreti

Il codice scarica e invoca TruffleHog, uno scanner legittimo di segreti, per enumerare variabili d’ambiente e chiavi presenti su macchine sviluppatore e runner CI. Vengono cercati GITHUB_TOKEN, NPM_TOKEN, AWS_ACCESS_KEY_ID e altri indicatori utili a validare sessioni e autenticarsi ai servizi. Il malware verifica i token npm via API per misurare il potenziale di ripubblicazione non autorizzata, quindi estrae metadati cloud come AWS instance role, aumentando la superficie offensiva su repository e pipeline.

Persistenza con GitHub Actions e webhook

La persistenza avviene con la creazione del workflow GitHub Actions denominato shai-hulud.yaml o shai-hulud-workflow.yml, inserito direttamente nel repository della vittima. Questo workflow si attiva su push o schedule, esegue nuove scansioni e inoltra dati verso un webhook hardcoded. L’endpoint osservato è hxxps://webhook[.]site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7, usato per ricevere i segreti raccolti e per telemetria della campagna. La hash SHA256 associata a bundle.js è 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09. La combinazione di workflow persistente e token validati consente agli attaccanti di mantenere accesso, lateralizzare e automatizzare ripubblicazioni, bypassando controlli manuali.

Tecniche di offuscamento e anti-analisi

Il payload è minificato e ridotto da 18.000 a 12 linee nell’analisi di Socket, con rinomina di funzioni e dead code inserito per distrarre il reverse engineering. Le stringhe vengono deoffuscate runtime con XOR ed esistono varianti con PowerShell multistage. Funzioni di anti-debugging ostacolano strumenti standard e evadono l’ispezione durante l’installazione. In alcune iterazioni, il payload tenta raccolte più ampie come credenziali browser e wallet su Chrome e Firefox, con una telemetria che mostra invii da più paesi e rotazione del webhook in caso di blocchi.

Impatto su CrowdStrike e sull’ecosistema npm

image 258
Attacco supply chain npm: Tinycolor infetta 500 pacchetti 9

La campagna colpisce il namespace CrowdStrike, dove l’account di pubblicazione viene abusato per rilasciare versioni trojanizzate di pacchetti open source. CrowdStrike interviene rimuovendo i pacchetti e ruotando chiavi GitHub e npm, chiarendo che la piattaforma Falcon non è impattata. Gli effetti ricadono su dipendenze transitive e tool usati da terze parti, con rischi di leak di codice e furti di IP a valle. La finestra di esposizione coinvolge progetti ad ampia adozione, come la Google Gemini CLI, laddove installazioni cadono nel periodo dell’attacco. L’ecosistema npm, con oltre 2 milioni di pacchetti, evidenzia singoli punti di fallimento legati a maintainer e automazioni, e mostra come ripubblicazioni automatiche possano moltiplicare i danni in tempi brevissimi.

Rilevamento, IOC e segnali comportamentali

Gli IOC principali includono l’URL del webhook indicato, i nomi dei workflow shai-hulud.yaml e shai-hulud-workflow.yml e la SHA256 di bundle.js. Sul piano comportamentale, risaltano publish npm da indirizzi IP inusuali, creazione improvvisa di workflow via API GitHub, accesso anomalo alle variabili d’ambiente in CI, ed entropia elevata nel bundle.js. Alcune telemetrie mostrano picchi di invii verso webhook e sottomissioni su VirusTotal da più paesi, con regole YARA focalizzate sui pattern del workflow e DPI su POST in uscita. La rilevazione precoce consente di isolare i runner, invalidare token e interrompere la catena di ripubblicazioni.

Mitigazioni operative per team e sviluppatori

Le misure immediate richiedono di pinnare versioni sicure di Tinycolor (ad esempio < 2.4.0), rimuovere eventuali bundle.js iniettati e ruotare tutti i segreti: GITHUB_TOKEN, NPM_TOKEN, chiavi AWS e credenziali CI/CD. Occorre auditare i log di publish, limitare lo scope delle credenziali con permessi minimi, abilitare 2FA, e separare ambienti di sviluppo e produzione. Si raccomanda l’uso di runner effimeri, la verifica dei maintainer, e il monitoraggio costante di workflow creati o modificati. Strumenti come Dependabot e SBOM aiutano a tracciare dipendenze e intercettare anomalie di aggiornamento. Nelle organizzazioni, politiche zero trust su repository e token hardware riducono sensibilmente la superficie d’attacco.

Cronologia e scala dell’infezione

La timeline descrive una scalata rapida: dall’innesco su Tinycolor alla compromissione dei pacchetti @ctrl/, fino al coinvolgimento di namespace terzi come @crowdstrike/. In poche ore, l’insieme passa da oltre 40 pacchetti iniziali a 187, fino a circa 500 versioni rimosse o sospese da npm. La propagazione sfrutta processi automatizzati che ripubblicano pacchetti appena modificati, mentre workflow persistenti continuano la raccolta segreti e l’esfiltrazione sui runner attivi.

Abuso di fiducia e automazioni DevOps

Il modello di minaccia non dipende da un exploit zero-day, ma dall’abuso della fiducia e dalle automazioni che caratterizzano le catene DevOps moderne. La disponibilità di token con permessi eccessivi e la mancanza di review sui workflow consentono agli attaccanti di insediarsi e procedere con pubblicazioni fraudolente. L’uso di strumenti legittimi come TruffleHog riduce la frizione operativa e rende ambigua la telemetria, complicando la distinzione tra attività lecita e malevola.

Evoluzione e ipotesi tattiche

Alcuni elementi tattici richiamano campagne come “s1ngularity”, con overlap nelle tecniche di esfiltrazione e persistenza. La natura auto-propagante favorisce ondate successive, con varianti che ruotano webhook e payload, includendo PowerShell o moduli orientati a furti browser. La componente builder potenzia la scalabilità, trasformando il malware da semplice RAT a framework dinamico di distribuzione e raccolta segreti.

Implicazioni per CI/CD e supply chain

L’impatto sistemico riguarda sviluppatori, maintainer, provider CI/CD e aziende che si affidano a dipendenze transitive. Per i team enterprise, la governance di token, ruoli e workflow diventa una priorità al pari della patching tradizionale. La capacità di validare la provenienza (ad esempio con SLSA) e di rilevare anomalie nei publish costituisce un pilastro difensivo. L’autunno 2025 viene indicato come periodo critico, con ondate previste e rafforzamento del vetting da parte di npm e dei provider git.

Lezioni strategiche dalla campagna Shai-Hulud

Shai-Hulud conferma che la supply chain non è un backstage ma un bersaglio primario: un singolo progetto può esporre un ecosistema intero. Le lezioni operative sono chiare: audit continuo delle dipendenze, rotazione periodica dei segreti, limitazione dello scope dei token, monitoraggio di workflow e publish inusuali, e verifica proattiva della provenienza. Dove automazione e fiducia si incontrano, servono controlli stringenti e telemetria mirata per interrompere propagazioni worm prima che diventino crisi di filiera.

Attacco supply chain npm su Tinycolor compromette 500 pacchetti: propagazione Shai-Hulud, esfiltrazione segreti, IOC e mitigazioni per team DevSecOps.

Articoli correlati

MatriceDigitale.it – Copyright © 2024, Livio Varriale – Registrazione Tribunale di Napoli n° 60 del 18/11/2021. – P.IVA IT10498911212 Privacy Policy e Cookies