Axios Avvelenato: Supply Chain Attack su npm Distribuisce un RAT Multipiattaforma

Immagina di andare al supermercato, prendere il tuo solito barattolo di nutella — quello che compri da dieci anni, sempre lo stesso, sempre lì sullo scaffale — e scoprire che qualcuno di notte ci ha messo dentro qualcosa di molto meno buono. Ecco, è esattamente quello che è successo ad Axios.
Se sei uno sviluppatore JavaScript, Axios non ha bisogno di presentazioni. Se invece sei appena arrivato da Marte: è la libreria per fare richieste HTTP più usata nell’ecosistema JS, con oltre 83 milioni di download a settimana. Sì, avete letto bene. Ottantatré milioni. A settimana.
E qualcuno ci ha messo dentro un trojan.
Come Funziona un Supply Chain Attack (Spiegato a Mio Cugino)
Prima di entrare nel dettaglio tecnico, due parole sul concetto. Un supply chain attack (attacco alla catena di fornitura) è quando un malintenzionato non attacca direttamente il tuo sistema — perché magari è ben difeso — ma attacca qualcosa che tu usi per costruire il tuo sistema. Una libreria, un tool di build, un pacchetto npm.
È come avvelenare l’acqua alla fonte invece di avvelenare ogni singolo bicchiere. Molto più efficiente. Molto più inquietante.
Nel caso di Axios, l’attaccante non ha trovato una vulnerabilità nel codice. Ha fatto qualcosa di più semplice e devastante: ha compromesso le credenziali npm del maintainer principale del progetto, un utente di nome jasonsaayman.
La Timeline dell’Attacco: 39 Minuti per Colpire Due Branch
Quello che colpisce di questo attacco non è solo l’obiettivo scelto, ma la precisione chirurgica con cui è stato eseguito. I ricercatori di StepSecurity hanno ricostruito la sequenza:
- 30 marzo 2026, 05:57 UTC — Viene pubblicata una versione “pulita” del pacchetto
plain-crypto-js@4.2.0. Serve a far sembrare legittimo l’autore e a non destare sospetti. - 30 marzo 2026, 23:59 UTC — Viene pubblicata
plain-crypto-js@4.2.1, questa volta con il payload malevolo dentro. - 31 marzo 2026, 00:21 UTC — Con l’account
jasonsaaymancompromesso, viene pubblicataaxios@1.14.1che iniettaplain-crypto-js@4.2.1come dipendenza. - 31 marzo 2026, 01:00 UTC — Stesso trattamento per
axios@0.30.4.
Tra la prima versione infetta e la seconda: 39 minuti. Entrambi i branch di rilascio colpiti. Tre payload separati pre-compilati per tre sistemi operativi diversi. Il tutto preparato 18 ore prima. Questo non è uno script kiddie che si è svegliato annoiato: c’era un piano.
Il Malware: Un RAT Che Si Cancella da Solo
Il meccanismo di infezione è elegante, nel senso disturbante del termine. plain-crypto-js@4.2.1 non contiene codice malevolo visibile — è tutto nascosto in uno script postinstall. Quando npm installa il pacchetto, esegue automaticamente questo script, un dropper Node.js obfuscato chiamato setup.js.
Il dropper rileva il sistema operativo e sceglie il percorso di attacco appropriato:
Su macOS esegue un payload AppleScript che scarica un binario trojan dal server C2 (sfrclak.com:8000), lo salva in /Library/Caches/com.apple.act.mond (notate la scelta accurata di una cartella di sistema per sembrare legittimo), lo rende eseguibile e lo lancia in background. Poi cancella se stesso.
Su Windows individua PowerShell, ne fa una copia in %PROGRAMDATA%\wt.exe (spacciandola per Windows Terminal), scrive uno script VBScript in una cartella temporanea, lo esegue per scaricare un RAT in PowerShell dal solito server C2. File scaricato? Cancellato subito.
Su Linux usa execSync di Node.js per scaricare uno script Python RAT via curl, salvarlo in /tmp/ld.py e lanciarlo in background con nohup. Stesso copione.
Tutti e tre i percorsi contattano lo stesso C2 ma su endpoint diversi (/product0 per macOS, /product1 per Windows, /product2 per Linux), così il server può rispondere con il payload appropriato.
Una volta installato, il RAT per macOS — scritto in C++ — fa una cosa sola ma la fa bene: ogni 60 secondi contatta il server remoto e aspetta comandi. Sa eseguire shell command, enumerare il filesystem, lanciare payload aggiuntivi e, ovviamente, auto-terminarsi quando serve.
La Pulizia Forense: Il Dettaglio che Fa Spavento
La parte più sofisticata dell’attacco non è il RAT in sé, ma quello che succede dopo l’installazione. Il malware esegue tre operazioni di cleanup:
- Rimuove lo script
postinstalldalla directory del pacchetto installato - Cancella il
package.jsonche contiene il riferimento allo scriptpostinstall - Rinomina
package.mdinpackage.json
Questo package.md è un file incluso in plain-crypto-js che contiene un package.json pulito, senza alcun hook postinstall. Dopo l’esecuzione, se qualcuno va a guardare cosa c’è nella cartella del pacchetto, trova un manifest innocente. Zero tracce. Come se non fosse mai successo niente.
Come ha detto il ricercatore Ashish Kurmi di StepSecurity: ogni traccia era progettata per auto-distruggersi. Non è un’esagerazione: è una descrizione tecnica accurata.
Come Faccio a Sapere se Sono Stato Colpito?
Prima cosa: controlla quali versioni di Axios hai installato. Se vedi 1.14.1 o 0.30.4 in qualsiasi progetto, sei potenzialmente esposto.
Poi controlla se esistono questi file sul sistema:
- macOS:
/Library/Caches/com.apple.act.mond - Windows:
%PROGRAMDATA%\wt.exe - Linux:
/tmp/ld.py
Se trovi uno di questi artefatti, assumi di essere compromesso e inizia a ruotare tutte le credenziali presenti sulla macchina. Non “forse”, non “valutiamo”: ruotale. Tutte.
Le versioni sicure a cui fare il downgrade sono 1.14.0 e 0.30.3. Rimuovi anche plain-crypto-js dalla cartella node_modules. E blocca il traffico verso sfrclak[.]com sul tuo firewall.
Se usi CI/CD — e chi non lo usa — controlla i log delle pipeline per le run che potrebbero aver installato le versioni infette.
Non Solo Axios: L’Onda si Allarga
Come se non bastasse, i ricercatori di Socket hanno identificato altri due pacchetti npm che distribuiscono lo stesso malware:
@shadanai/openclaw(versioni 2026.3.28-2, 2026.3.28-3, 2026.3.31-1, 2026.3.31-2)@qqbrowser/openclaw-qbot(versione 0.0.130)
Quest’ultimo è particolarmente interessante perché include direttamente una copia modificata di axios@1.14.1 nella sua cartella node_modules. Quando npm processa questa versione vendorizzata di Axios, installa plain-crypto-js e innesca l’intera catena malevola.
Il vero Axios ha solo tre dipendenze: follow-redirects, form-data e proxy-from-env. Qualsiasi altra dipendenza è un segnale di allarme.
La Morale della Favola (Se di Morale si Può Parlare)
Questo attacco ci ricorda, nel modo più brutale possibile, che la sicurezza della supply chain è il problema numero uno del momento nello sviluppo software moderno. Non importa quanto il tuo codice sia sicuro: se una delle dipendenze che usi viene compromessa, sei compromesso anche tu.
Alcune cose su cui riflettere:
Il lock sull’account era il vero problema. L’attaccante non ha sfruttato una vulnerabilità nel codice di Axios. Ha ottenuto un token npm long-lived per l’account del maintainer. Probabilmente rubato da qualche leak, forse da un breach di un’altra piattaforma dove jasonsaayman usava la stessa password. Abilita l’MFA su npm. Adesso.
Il postinstall è una superficie di attacco enorme. Ogni volta che fai npm install, stai potenzialmente eseguendo codice arbitrario di chiunque abbia pubblicato un pacchetto. Esistono strumenti come StepSecurity o Socket che monitorano i pacchetti npm proprio per questo. Considerali, soprattutto in ambienti di produzione.
Pinning delle versioni ≠ sicurezza assoluta. Se avevi axios@^1.14.0 nel tuo package.json, hai probabilmente installato 1.14.1 al prossimo npm install. Il pinning esatto della versione (1.14.0 senza il ^) aiuta, ma non è una soluzione completa: devi anche verificare i checksum.
83 milioni di download a settimana. Pensateci. Se l’attacco fosse rimasto attivo anche solo qualche ora in più, il numero di sistemi compromessi sarebbe stato potenzialmente astronomico. Il fatto che sia stato scoperto relativamente in fretta è una buona notizia. Ma “relativamente in fretta” significa comunque che qualcuno ha potuto installare questo roba per ore.
Come sempre nella sicurezza informatica: non è una questione di se succederà, ma di quando. E quando succede, meglio essere preparati.
Aggiorna Axios, controlla le tue pipeline e buona fortuna a tutti noi.