Il 17 giugno 2026, Microsoft ha attribuito con «high confidence» l'attacco supply chain che ha compromesso oltre 140 pacchetti npm dell'organizzazione @mastra al gruppo di minaccia nordcoreano Sapphire Sleet, noto anche come BlueNoroff e UNC1069. La campagna ha sfruttato la compromissione di un account maintainer legittimo per iniettare una dipendenza typosquat eseguita al momento dell'installazione, esponendo un ecosistema di sviluppatori AI a un pattern d'attacco già replicato su Axios due mesi prima. La rilevanza del caso sta nella combinazione tra maturità operativa del threat actor e fragilità strutturale del framework bersaglio: Mastra generava attestazioni SLSA in CI/CD, ma non le rendeva obbligatorie, consentendo a un token npm standard di pubblicare pacchetti senza provenance.
- Microsoft attribuisce con «high confidence» l'attacco al gruppo nordcoreano Sapphire Sleet, attore che principalmente targeting il settore finanziario e già responsabile della compromissione supply chain Axios npm in aprile 2026.
- Il vettore tecnico è stato la compromissione dell'account npm «ehindero», maintainer legittimo con diritti di pubblicazione scope-wide sull'organizzazione @mastra, tramite social engineering su LinkedIn.
- I pacchetti @mastra compromessi — 145 secondo The Hacker News, oltre 140 secondo Microsoft e StepSecurity — hanno raggiunto 1,1 milioni di download settimanali combinati, con @mastra/core solo a 918.000 download settimanali.
- La dipendenza malevola «easy-day-js», typosquat della libreria legittima «dayjs» (57 milioni di download settimanali), ha seguito il pattern «clean bait then weaponized»: pulita nella versione 1.11.21 il 16 giugno, weaponized nella 1.11.22 alle 01:01 UTC del 17 giugno.
La sequenza operativa: 88 minuti di pubblicazione automatizzata
L'attacco ha richiesto due fasi distinte, documentate da Microsoft con precisione cronologica. Nella fase uno, il 16 giugno 2026, Sapphire Sleet ha pubblicato easy-day-js@1.11.21: un pacchetto funzionalmente identico a dayjs, privo di codice malevolo. Questa «esche pulita» ha superato i controlli di analisi statica e ha costruito trust artificiale sulla base della version history. Nella fase due, alle 01:01 UTC del 17 giugno, è stata rilasciata easy-day-js@1.11.22 con l'iniezione del payload.
A partire dalle 01:12 UTC, i pacchetti @mastra sono stati pubblicati in rapida successione: 88 minuti di finestra temporale, secondo The Hacker News, con aggiunta automatica della dipendenza malevola al SemVer range che risolveva la versione weaponized. I pacchetti @mastra stessi rimanevano essenzialmente puliti: la minaccia risiedeva nella dipendenza transitiva, eludendo la logica di trust basata sulla reputazione del maintainer primario.
Il postinstall hook eseguiva setup.cjs, un dropper di 4.572 byte offuscato. Il codice disabilitava la verifica TLS, contattava il server di comando e controllo 23.254.164[.]92 sulla porta 8000, scaricava un second-stage payload e lo eseguiva come processo detached nascosto. StepSecurity ha documentato tecnicamente il blocco di questa comunicazione in ambienti CI/CD, confermando l'indirizzo C2 e la struttura del flusso.
Il payload cross-platform e il targeting crypto
Il second-stage è un information stealer cross-platform per Windows, Linux e macOS. Secondo Microsoft, il malware verifica la presenza di 166 estensioni browser per wallet di criptovalute. The Hacker News riporta «over 160» estensioni controllate. Su sistemi con comunicazione C2 stabilita, Sapphire Sleet ha dispiegato ulteriori componenti: un backdoor PowerShell, meccanismi di persistenza aggiuntivi, esclusioni per Microsoft Defender e un servizio malevolo per ottenere accesso SYSTEM.
Microsoft collega esplicitamente questa infrastruttura C2 e questa tradecraft a campagne precedenti dello stesso gruppo. La dichiarazione di attribuzione è netta: «The PowerShell backdoor, tradecraft, and C2 infrastructure have been used by Sapphire Sleet in other, prior campaigns». Il gruppo ha condotto la compromissione supply chain Axios npm nell'aprile 2026 con TTP identici, consolidando un pattern operativo ricorrente sugli ecosistemi JavaScript.
La provenance gap: quando l'attestazione è opt-in
Il framework Mastra, posizionato all'intersezione tra sviluppo AI e infrastruttura cloud, gestisce credenziali sensibili: chiavi LLM, token di accesso cloud, segreti runtime. StepSecurity ha evidenziato che «its packages are routinely installed in environments that hold some of the most sensitive credentials in modern software development». Eppure, come documentato da SafeDep via The Hacker News, «Mastra generated provenance on CI publishes but did not require it, so a standard npm token could still publish without attestations».
Questa «provenance gap» ha consentito all'account compromesso di pubblicare 140-145 pacchetti senza che l'ecosistema npm verificasse automaticamente l'origine della build. Il meccanismo di pubblicazione manuale — anomalo rispetto alla pipeline CI/CD GitHub Actions OIDC abitualmente usata da Mastra — non ha scatenato blocchi preventivi. Kirill Boychenko di Socket, citato da The Hacker News, sintetizza: «The strongest attribution signal in this incident is the operational pattern: a legitimate maintainer was compromised, publish rights were abused, the Mastra packages themselves were left essentially clean, and the threat actor inserted a malicious transitive dependency that executed at install time».
«Microsoft assesses with high confidence that this activity is attributable to Sapphire Sleet, a North Korean state actor that primarily targets the financial sector» — Microsoft Security Blog, 19 giugno 2026
Cosa fare adesso
Le azioni prioritarie derivano dai fatti documentati nel dossier e dalle misure che Mastra stessa ha implementato post-incidente.
Verificare l'esposizione storica. Gli ambienti che hanno installato pacchetti @mastra tra le 01:12 e le 02:39 UTC del 17 giugno 2026 devono essere considerati potenzialmente compromessi. La verifica richiede il controllo dei lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml) per la presenza di easy-day-js nel range di versione weaponized.
Ispezionare le estensioni browser wallet. Il malware targetta 166+ estensioni crypto. Se sistemi aziendali o di sviluppo hanno ospitato wallet browser, la verifica degli indirizzi e dei saldi è prioritaria. Microsoft non quantifica il volume esfiltrato, ma la funzionalità di enumerazione delle estensioni è documentata.
Bloccare l'infrastruttura C2 documentata. Gli indirizzi 23.254.164[.]92 e 23.254.164[.]123, con le relative porte 8000 e 443, devono essere inseriti nei blocchi di rete. StepSecurity ha già dimostrato l'efficacia del blocco in pipeline CI/CD.
Rivendicare la provenance come requisito obbligatorio. Mastra ha post-incidente implementato il requisito SLSA provenance. Per organizzazioni con ecosistemi npm critici, la lezione è strutturale: le attestazioni di build non devono essere opt-in ma obbligatorie, con rifiuto automatico delle pubblicazioni prive di provenance verificabile.
La linea di Sapphire Sleet: dal settore finanziario agli sviluppatori AI
L'attribuzione a Sapphire Sleet — non Lazarus Group o APT38 generici, ma un cluster operativo distinto specializzato nel targeting finanziario — indica una direzione precisa. Gli attori statali nordcoreani stanno industrializzando il supply chain npm come vettore primario, spostando il bersaglio da istituzioni finanziarie tradizionali a infrastrutture software con accesso nativo a capitali digitali e credenziali cloud.
Il caso Mastra non è anomalia ma iterazione. L'attacco Axios di aprile 2026, la campagna VS Code Marketplace documentata da altri vendor, e ora Mastra costituiscono una serie coerente. La differenza è la maturità del meccanismo: la compromissione del maintainer, la pulizia dei pacchetti primari, l'iniezione transitiva, il pattern clean-then-armed. Ogni elemento è ottimizzato per eludere i controlli esistenti.
Il limite strutturale esposto dall'incidente non è una vulnerabilità zero-day in npm o Node.js, ma una scelta architetturale: la provenance come funzionalità disponibile ma non imposta come default. La sicurezza «opt-in» in ecosistemi open-source critici lascia spazi operativi che attori statali sanno sfruttare con precisione chirurgica.
FAQ
I pacchetti @mastra contenevano codice malevolo diretto?
No. I pacchetti Mastra erano essenzialmente puliti. La minaccia risiedeva nella dipendenza transitiva easy-day-js iniettata automaticamente, che si risolveva alla versione weaponized al momento dell'installazione.
È sufficiente aggiornare ai pacchetti rimossi da Mastra per essere al sicuro?
La rimozione dei pacchetti compromessi e la revoca del token da parte di Mastra interrompono la catena di distribuzione attuale, ma non mitigano compromissioni già avvenute su sistemi che hanno eseguito l'installazione nella finestra temporale dell'attacco.
Qual è il legame preciso tra Sapphire Sleet e Lazarus Group?
Microsoft identifica l'attore come Sapphire Sleet, con alias BlueNoroff e UNC1069. Non emerge nel dossier una sovrapposizione infrastrutturale che lo colleghi direttamente al cluster Lazarus Group o APT38 allo stato attuale: è un'entità operativa distinta con propria tradecraft e infrastruttura C2.
Le informazioni sono state verificate sulle fonti citate e aggiornate al momento della pubblicazione.
Fonti
- https://www.bleepingcomputer.com/news/security/microsoft-links-mastra-ai-supply-chain-attack-to-north-korean-hackers/
- https://thehackernews.com/2026/06/fake-microsoft-alerts-used-to-deploy.html
- https://thehackernews.com/2026/06/144-mastra-npm-packages-compromised-via.html
- https://thehackernews.com/2026/06/north-korean-hackers-are-turning.html
- https://www.microsoft.com/en-us/security/blog/2026/06/17/postinstall-payload-inside-mastra-npm-supply-chain-compromise/
- https://news.risky.biz/risky-bulletin-canadas-spy-agency-allowed-to-remove-a-botnet-from-canadian-devices/
- https://www.microsoft.com/en-us/security/blog/2026/04/01/mitigating-the-axios-npm-supply-chain-compromise/
- https://www.microsoft.com/en-us/security/blog/2026/02/24/c2-developer-targeting-campaign/
- https://www.stepsecurity.io/blog/mastra-npm-packages-compromised-using-easy-day-js
- https://yeethsecurity.com/blog/2026-06-09-jupyter-powerdev-backdoor
- https://krebsonsecurity.com/2026/06/popa-botnet-linked-to-publicly-traded-israeli-firm/
- https://www.welivesecurity.com/en/eset-research/killing-me-gently-inside-gentlemens-edr-killer-framework/