De getroffen pakketten waren samen goed voor meer dan 1,1 miljoen downloads per week . Microsoft schreef de operatie op 19 juni met hoge zekerheid toe aan Sapphire Sleet, een Noord-Koreaanse statelijke actor die vooral de financiële en cryptosector viseert . De groep wordt ook gevolgd onder de namen BlueNoroff en APT38.
De campagne maakte gebruik van een bekend zwak punt in softwareketens: één gestolen publiceeraccount kan worden gebruikt om updates naar een groot aantal vertrouwde pakketten te sturen.
De aanvallers gebruikten social engineering om de inloggegevens van een legitieme Mastra-bijdrager te bemachtigen. Het gecompromitteerde npm-account, ehindero, beschikte over publiceermachtigingen voor de volledige @mastra-scope .
Met dat account brachten de aanvallers nieuwe versies uit van alle pakketten binnen @mastra/*. De volledige operatie nam ongeveer 88 minuten in beslag; sommige onderzoeken plaatsen de grootste publicatiepiek zelfs binnen 19 minuten . Dat tempo wijst op het gebruik van een geautomatiseerd publicatiescript.
De besmette versies bevatten een afhankelijkheid met de naam easy-day-js. Die naam lijkt op dayjs, een legitieme en veelgebruikte JavaScript-bibliotheek voor datumfuncties . Onderzoekers gebruiken daarom de naam “easy-day-js” voor deze campagne .
npm installDe kwaadaardige code werd uitgevoerd via npm’s postinstall-script. Daardoor kon het schadelijke programma al starten zodra een ontwikkelaar een getroffen pakket installeerde. Het was niet nodig om de applicatie zelf te starten of een AI-agent uit te voeren .
De payload zocht naar cryptowalletsleutels, cloudreferenties en geheimen voor CI/CD-systemen op ontwikkelaarscomputers en in buildomgevingen . Volgens Microsoft werd bovendien de TLS-verificatie uitgeschakeld en een tweede fase van de infostealer opgehaald vanaf infrastructuur die door de aanvallers werd beheerd .
Microsoft beoordeelde op 19 juni 2026 met hoge zekerheid dat Sapphire Sleet achter de aanval zat. Daarbij verwees het bedrijf naar de gebruikte infrastructuur en naar tactieken, technieken en procedures — vaak afgekort als TTP’s — die overeenkomen met eerder aan de groep toegeschreven activiteiten .
Amazon Threat Intelligence bracht Sapphire Sleet daarnaast in verband met eerdere aanvallen op npm-pakketten, waaronder axios, debug, chalk en typo-crypto .
De Mastra-aanval onderstreept waarom pakketregisters afscheid nemen van langdurige publiceersleutels. Microsoft voert daarom voor NuGet.org, het pakketregister voor .NET-ontwikkelaars, een tweedelige wijziging door:
Microsoft noemt langdurige API-sleutels “losse tekenreeksen die gemakkelijk kwijtraken” en ziet gestolen sleutels als een belangrijk risico voor softwareketens . Wie zo’n sleutel bemachtigt, kan gedurende langere tijd schadelijke versies publiceren onder de naam van een vertrouwd project.
De wijziging geldt voor NuGet en is dus niet rechtstreeks de maatregel waarmee npm de Mastra-aanval afhandelt. Ze past wel in dezelfde bredere beveiligingsverschuiving: publiceertoegang moet zo kort mogelijk geldig zijn en niet als permanent geheim in een repository of CI/CD-systeem staan.
Microsoft raadt maintainers aan om over te stappen op Trusted Publishing, een publicatieworkflow die in september 2025 voor NuGet werd geïntroduceerd . In plaats van een langdurige API-sleutel gebruikt de workflow OpenID Connect (OIDC) om per publicatie een tijdelijke identiteit te bevestigen.
In de praktijk vraagt een CI/CD-workflow, bijvoorbeeld via GitHub Actions, een cryptografisch ondertekend OIDC-token aan. NuGet.org controleert of dat token overeenkomt met het geregistreerde beleid voor de repository, workflow en eventueel de ingestelde omgeving. Daarna wordt een tijdelijke, eenmalige API-sleutel uitgegeven die doorgaans ongeveer één uur geldig is .
De voordelen zijn onder meer :
Trusted Publishing is ook beschikbaar voor andere pakketregisters, waaronder npm en PyPI . Het systeem voorkomt niet iedere vorm van misbruik — een geautoriseerde workflow kan bijvoorbeeld nog steeds worden misbruikt — maar haalt wel het risico weg van één langdurige sleutel die uit een omgeving kan worden gestolen.
Naast de NuGet-wijzigingen zijn in het npm-ecosysteem al verschillende beveiligingsmaatregelen ingevoerd:
npm login geeft nu sessietokens uit die twee uur geldig zijn .Samen zijn deze maatregelen bedoeld om precies het aanvalspad moeilijker te maken dat bij Mastra werd gebruikt: één onvoldoende beschermd, langdurig accounttoken met publiceertoegang tot een volledige pakketnamespace.
npm install --ignore-scripts — of de configuratieoptie ignore-scripts = true — voorkomt dat preinstall- en postinstall-scripts automatisch draaien .De Mastra-zaak laat zien dat een aanval op de softwareketen niet begint bij een kwetsbaarheid in de uiteindelijke applicatie. Soms is één gestolen publiceeraccount voldoende om in minder dan anderhalf uur een groot deel van een ontwikkelaarsecosysteem te bereiken.