IronWorm: Rust Malware con eBPF Rootkit su NPM
La scoperta
A luglio 2026, ricercatori hanno identificato IronWorm, un nuovo malware sofisticato distribuito tramite 36 package npm infetti.
Quello che rende IronWorm diverso da altri malware npm:
- Scritto in Rust: difficile da disassemblare, più stealthy di JavaScript
- eBPF kernel rootkit: nasconde il malware a livello kernel, evitando detection da userland tools
- Self-propagating: utilizza stolen npm credentials per infettare ulteriori package
- Tor C2: comunicazione con il server di comando tramite Tor network
Architettura di IronWorm
┌─────────────────────────────────────────────────┐
│ Strato 1: Userland (Visibile) │
│ ┌───────────────────────────────────────────┐ │
│ │ Legittimo package npm wrapper │ │
│ │ npm install --run-scripts (esegue) │ │
│ │ Carica IronWorm binary Rust │ │
│ └───────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ Strato 2: Kernel Mode (eBPF Rootkit) │
│ ┌───────────────────────────────────────────┐ │
│ │ eBPF program che: │ │
│ │ - Hide processo IronWorm dai processi list│ │
│ │ - Hide file descriptor dal filesystem │ │
│ │ - Hide connessioni di rete (Tor traffic) │ │
│ │ - Hook system calls per evitare logging │ │
│ └───────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ Strato 3: C2 Communication │
│ IronWorm → [Tor Network] → C2 server │
│ (credenziali, dati esfiltrati) │
└─────────────────────────────────────────────────┘
Componenti e funzionalità
1. Userland Component (Rust binary)
- Raccoglie dati sensibili (SSH keys, API tokens, environment variables)
- Ruba credenziali npm da ~/.npmrc
- Effettua auto-propagation: accede all’account npm e pubblica versioni malevole di altri package
2. eBPF Rootkit
eBPF (Extended Berkeley Packet Filter) è una tecnologia che consente l’esecuzione di programmi nel kernel Linux in modo sicuro. IronWorm sfrutta eBPF per:
// eBPF hook di esempio
SEC("tracepoint/syscalls/sys_enter_open")
int hide_ironworm_files(struct trace_event_raw_sys_enter *ctx) {
// Intercetta tutte le system call open()
// Se il file è correlato a IronWorm, ritorna errore
// Questo nasconde i file da strumenti userland come "ls", "find"
return 0;
}
Effetto: strumenti tradizionali di detection (che operano in userland) non vedono i file / processi di IronWorm, perché il rootkit eBPF intercetta le system call e rifiuta di rivelarli.
3. Tor Communication
Il malware comunica solo tramite Tor:
- ✅ Nasconde l’indirizzo IP reale del server C2
- ✅ Difficile da tracciare / bloccare dagli ISP
- ✅ Comunicazione crittografata end-to-end
I 36 package infetti
Package compromessi includono:
- Package di utility (data formatting, string manipulation)
- Package di logging (utilizzati da migliaia di applicazioni)
- Crypto-related package (ironico, dato che uno stealer di credenziali)
Combinazione pericolosa: Se una applicazione dipende da 5 package diversi, e 2 sono compromessi, il malware viene installato con accesso “legittimo”.
Timeline di infezione
| Fase | Data | Evento |
|---|---|---|
| Creazione | Maggio 2026 | IronWorm sviluppato / testato |
| Primo upload | Giugno 2026 | Primo package compromesso pubblicato su npm |
| Propagazione | Giugno-Luglio | Attraverso stolen credentials, ulteriori package compromessi |
| Rilevamento | 14 Luglio | Ricercatori notano binario Rust sospetto in package audit |
| Disclosure | 15 Luglio | Advisory publico; npm inizia pulizia |
| Remediation | 16-20 Luglio | Revocazione token, rimozione package, alert alla community |
Perché eBPF è pericoloso per la sicurezza
eBPF è stato progettato per observation (monitoring performance) e filtering (firewall rules). Però è stato utilizzato qui per evasion (nascondere malware).
Il dilemma:
- ✅ eBPF è potente e consente innovazione in kernel-level tooling
- ❌ eBPF può essere abusato per rootkit evasione
- ❌ Detection di malware eBPF richiede kernel-level tools (difficile)
Difesa e rilevamento
Se hai installato uno dei 36 package:
- Immediate:
npm auditper identificare package vulnerabili- Update / remove package compromessi
- System inspection:
# Cerca processi sospetti ps aux | grep -i ironworm # Cerca connessioni Tor (port 9050 tipicamente) netstat -tulpn | grep 9050 # Esamina file eBPF (difficile, richiede bpftool) bpftool prog list - Lungo termine:
- Pulisci credenziali npm, SSH keys, API tokens
- Rivedi CI/CD logs per attività anomale durante il periodo di infezione
- Se code/artifact è stato built con IronWorm, ripubblica / rideploy
Limitazioni di detection tradizionali
IronWorm dimostra i limiti degli strumenti di security tradizionali:
| Tool | Problema |
|---|---|
| Antivirus | Rust binaries sono polimorfici, difficili da firmare |
| Process monitoring | eBPF rootkit nasconde il processo |
| File integrity monitoring | eBPF hook intercetta stat() calls, nasconde le modifiche |
| Network monitoring | Tor nasconde il vero indirizzo IP del C2 |
Conclusione
IronWorm rappresenta una nuova generazione di malware che:
- Sfrutta tecnologie “moderne” (Rust, eBPF) per evitare detection
- Utilizza auto-propagation per scale massiccia
- Rimane “invisibile” anche agli strumenti di sistema
Per la comunità npm e per i developer:
- Supply chain security rimane il perimetro più vulnerabile
- eBPF security sia come opportunità (detection) che come minaccia (evasion)
- Il modello di “fiducia implicita” nei package pubblici è intrinsecamente fragile
IronWorm non è il primo eBPF rootkit malware, ma è il primo ampiamente distribuito tramite package manager mainstream. Non sarà l’ultimo.