OreNPMGuard - Scanner di pacchetti Shai-Hulud
Versione 2.0.0 - Rilevamento Shai-Hulud 2.0 e Sistema di Prevenzione Potenziato
Uno strumento di sicurezza per rilevare i pacchetti npm compromessi dagli attacchi alla supply chain di Shai-Hulud (originale settembre 2025 e Shai-Hulud 2.0 novembre 2025). Scansiona sia i file package.json che package-lock.json per rilevare le versioni installate esatte e gli Indicatori di Compromissione (IoC). Disponibile sia in implementazioni Python che Node.js con configurazione YAML centralizzata per una facile manutenzione.
Ultimo aggiornamento: 24 novembre 2025 - 738+ pacchetti compromessi tracciati con 1.291 combinazioni uniche package@version. Ora rileva sia le varianti d'attacco originali di Shai-Hulud sia quelle di Shai-Hulud 2.0.
Per la scansione multi-ecosistema, vedi ore-mal-pkg-inspector.
🔗 Progetti Correlati
Per la scansione di pacchetti dannosi multi-ecosistema (npm, PyPI, Maven, RubyGems, Go, Cargo), vedi:
ore-mal-pkg-inspector - Scanner completo di pacchetti dannosi con threat intelligence dinamico.
OreNPMGuard si concentra specificamente sulla difesa dagli attacchi Shai-Hulud per i pacchetti npm.
Shai-Hulud è un worm autoreplicante che ha iniziato a compromettere i pacchetti npm il 14-15 settembre 2025, rappresentando il primo attacco auto-propagante riuscito nell'ecosistema npm e uno degli attacchi alla supply chain JavaScript più gravi osservati finora. Chiamato così in onore dei vermi delle sabbie giganti della serie Dune di Frank Herbert, questo malware si è evoluto in molteplici varianti.
Shai-Hulud Originale (settembre 2025)
L'attacco originale ha infettato 200+ pacchetti npm (come tracciato in questo strumento) con più versioni compromesse per ciascun pacchetto.
Shai-Hulud 2.0 (novembre 2025) - NUOVO
Una nuova variante è emersa a novembre 2025 con cambiamenti significativi:
- 738+ pacchetti compromessi con 1.291 combinazioni uniche package@version
- 25.000+ repository compromessi su ~350 utenti unici
- Nuova fase di esecuzione: utilizza script
preinstall (non solo postinstall)
- Nuovi file payload:
setup_bun.js e bun_environment.js (in aggiunta a bundle.js)
- Persistenza potenziata: crea runner self-hosted chiamati 'SHA1HULUD' e nuovi pattern di workflow GitHub
- Target multi-cloud: raccolta di credenziali AWS, Azure e GCP
- Escalation dei privilegi Docker: tenta di ottenere accesso root tramite contenitori privilegiati
- Pacchetti caricati tra 21-23 novembre 2025
Riferimento: Wiz Research - Post del blog su Shai-Hulud 2.0
🦠 Come Funziona l'Attacco
Paziente Zero: l'attacco è iniziato con il pacchetto rxnt-authentication pubblicato il 14 settembre 2025 alle 17:58:50 UTC dall'account npm compromesso "techsupportrxnt".
Catena d'Attacco (Shai-Hulud Originale):
- Installazione: il pacchetto malizioso esegue lo script
postinstall che esegue bundle.js (payload JavaScript di 3MB+)
- Raccolta di credenziali: usa TruffleHog per cercare token GitHub/npm, credenziali AWS/GCP/Azure, variabili d'ambiente e chiavi cloud esposte tramite IMDS
- Esfiltrazione dei dati: crea un repository pubblico "Shai-Hulud" nell'account GitHub della vittima con i segreti rubati in
data.json (doppia codifica base64)
- Persistenza: inietta un workflow GitHub Actions malizioso (
.github/workflows/shai-hulud-workflow.yml) che esfiltra i segreti del repository verso webhook[.]site
- Migrazione dei repository: forza i repository organizzativi privati a diventare repository personali pubblici con suffisso "-migration" e descrizione "Shai-Hulud Migration"
- Propagazione del worm: usa i token npm rubati per iniettare malware in altri pacchetti mantenuti dalla vittima, incrementando i numeri di versione e aggiungendo hook
postinstall
Catena d'Attacco (Shai-Hulud 2.0 - novembre 2025):
- Installazione: il pacchetto malizioso esegue lo script
preinstall che esegue setup_bun.js o bun_environment.js (nuovi file payload)
- Creazione dei file dati: crea i file
cloud.json, contents.json, environment.json e truffleSecrets.json
- Raccolta di credenziali: targeting multi-cloud (AWS, Azure, GCP) utilizzando SDK ufficiali, estraendo credenziali da file di configurazione, variabili d'ambiente e IMDS
- Registrazione del runner self-hosted: registra la macchina infetta come runner self-hosted chiamato 'SHA1HULUD'
- Iniezione del workflow GitHub:
- Crea
.github/workflows/discussion.yaml con runner self-hosted per accesso backdoor
- Crea
.github/workflows/formatter_*.yml per l'esfiltrazione dei segreti (poi elimina il workflow per nascondere l'attività)
- Escalation dei privilegi Docker: tenta di ottenere accesso root tramite
docker run --rm --privileged -v /:/host
- Dump dei segreti cloud: utilizza sessioni autenticate per eseguire il dump dei segreti da AWS Secrets Manager, Google Secret Manager e Azure Key Vault
- Creazione di repository: crea repository con "Shai-Hulud" nella descrizione per l'esfiltrazione
🎯 Cosa Viene Rubato
- Credenziali di sviluppo: GitHub PAT (
ghp_*, gho_*), token di autenticazione npm
- Credenziali cloud: chiavi e token di accesso AWS, GCP, Azure
- Chiavi API: credenziali Atlassian, Datadog e altri servizi
- Informazioni di sistema: variabili d'ambiente, dettagli host, account utente
- Codice sorgente: repository privati resi pubblici o clonati
📊 Scala dell'Impatto
Shai-Hulud Originale (settembre 2025):
- 200+ pacchetti compromessi in questo database di monitoraggio (inclusi pacchetti popolari come
@ctrl/tinycolor, ngx-bootstrap)
- Molteplici account GitHub compromessi (il numero esatto varia a seconda della fonte)
- Repository pubblici creati con l'etichetta "Shai-Hulud Migration"
- Sviluppatori potenzialmente colpiti tramite le dipendenze dei pacchetti
Shai-Hulud 2.0 (novembre 2025):
- 738+ pacchetti compromessi con 1.291 combinazioni uniche package@version
- 25.000+ repository interessati creati su ~350 utenti unici
- 1.000+ nuovi repository aggiunti ogni 30 minuti durante le ore iniziali della campagna
- Colpisce pacchetti dei principali ecosistemi: Zapier, ENS Domains, PostHog, Postman, AsyncAPI e altri
- Furto di credenziali multi-cloud (AWS, Azure, GCP)
- Tentativi di escalation dei privilegi Docker
Furto di credenziali verificato (da ~20.000 repository analizzati):
- 775 token di accesso GitHub compromessi
- 373 credenziali AWS esposte
- 300 credenziali GCP esposte
- 115 credenziali Azure esposte
⚠️ Avviso di Esfiltrazione tra Vittime
CRITICO: Wiz Research ha confermato che è in corso l'esfiltrazione incrociata tra vittime. Ciò significa:
- I segreti rubati di una vittima possono essere pubblicati su repository di proprietà di una vittima diversa e non correlata
- Se trovi dati sospetti nei tuoi repository GitHub, potrebbero appartenere a un altro utente compromesso
- I tuoi dati potrebbero essere stati esfiltrati verso repository che non possiedi
- Questo complica l'attribuzione e la risposta agli incidenti
Implicazione per le indagini: quando esamini i dati esfiltrati nei tuoi repository, verifica se i dati appartengono effettivamente alla tua organizzazione o a un'altra vittima.
🔗 Collegamento con gli Attacchi Precedenti