Ein vergessenes Contributor-Konto kompromittierte den gesamten Mastra-npm-Paket-Scope
Marian Corneci
16. Juni 2026
0 Min. LesezeitAm 17. Juni 2026 veröffentlichte ein Angreifer den gesamten @mastra-npm-Scope erneut und schleuste eine einzelne schädliche Abhängigkeit in 143 Pakete und weitere ein. Dazu gehörte auch @mastra/core mit rund 4 Millionen Downloads pro Monat und Hunderten abhängigen Projekten. Die eingeschleuste Abhängigkeit easy-day-js tarnt sich als dayjs. Ihr Installations-Hook deaktiviert die TLS-Verifizierung, lädt eine Payload der zweiten Stufe von einer Raw-IP-Adresse herunter und führt im Hintergrund einen plattformübergreifenden Kryptowährungs-Stealer aus. Dieser Angriff auf ein npm-Paket wurde durch ein früheres Contributor-Konto ermöglicht, dessen Zugriffsrechte auf den Scope nie entzogen wurden.
Erforderliche Maßnahme: Wenn Sie am oder nach dem 17. Juni 2026 ein @mastra-Paket oder ein davon abhängiges Paket in einem neuen oder aktualisierten Dependency-Baum installiert haben, behandeln Sie den Vorfall als Offenlegung von Zugangsdaten und Wallets und lesen Sie weiter.
UPDATE: Snyk hat ein weiteres kompromittiertes Paket hinzugefügt: @mastra/node-speaker, Version 0.1.1.
Kurzfassung
Vorfall: Übernahme des npm-Scopes
@mastra, massenhafte Neuveröffentlichung mit eingeschleuster schädlicher AbhängigkeitSchädliche Abhängigkeit:
easy-day-js@1.11.22(eindayjs-Imitat, das als Dropper dient)Snyk-Advisory: SNYK-JS-EASYDAYJS-17353313, eingebetteter schädlicher Code; betrifft
easy-day-js 1.11.21und1.11.22Betroffene Pakete: im Wesentlichen der gesamte
@mastra-Scope, am 17. Juni 2026 erneut veröffentlicht; Mastras eigene Behebung umfasst 142 veröffentlichbare PaketeBemerkenswerte Versionen:
@mastra/core@1.42.1,mastra@1.13.1,create-mastra@1.13.1CVE / CVSS: keine zugewiesen; es handelt sich um einen aktiven Supply-Chain-Vorfall, der Mastra-Quellcode selbst wurde nicht verändert
Payload: plattformübergreifender Kryptowährungs-Wallet-Stealer sowie ein Remote-Access-Trojaner mit Persistenz
Status:
easy-day-jswurde von npm entfernt,ehinderoist kein Inhaber des Scopes mehr und Mastra hat saubere Versionen nachgeschoben (PR #18056). Die neueste Version von@mastra/core latestist wieder die saubere Version1.42.0. Behandeln Sie jede kompromittierte Version, die Sie bereits aufgelöst haben, als Hinweis auf eine mögliche Kompromittierung des Hosts.
So lief der Angriff ab
Der Angreifer nutzte veraltete Maintainer-Zugangsdaten als Einstiegspunkt. Der @mastra-Scope wurde über das npm-Konto ehindero veröffentlicht, das einem früheren Mastra-Mitwirkenden gehörte. Die Veröffentlichungshistorie der npm-Registry verzeichnet legitime Alpha-Releases von @mastra/core über dieses Konto Ende 2024 und Anfang 2025. Danach wurde das Konto nicht mehr genutzt. Der Zugriff auf den Scope wurde nie entzogen.
Es gibt Anzeichen für eine Kontoübernahme statt einer Insideraktion. Dazu zählt eine Änderung der E-Mail-Adresse, weg von der ursprünglichen Adresse des Mitwirkenden hin zu ehindero2016@tutamail[.]com. Die Vorgehensweise sollte uns zu denken geben: npm lässt Veröffentlichungsberechtigungen für Scopes bei Inaktivität nicht ablaufen. Eine einzige veraltete Maintainer-Zugangsinformation reichte also aus, um jedes Paket im Scope zu veröffentlichen. Die Ursache liegt in der Projekthygiene, nicht in einer Zero-Day-Sicherheitslücke.
Der Übertragungsweg: eine Zeile in jeder package.json
Der Angreifer hat den Mastra-Quellcode nicht verändert. Das Schadprogramm wurde beim Veröffentlichen in die Tarballs eingeschleust. Mastras eigener Behebungs-PR bestätigt, dass das Repository in jeder package.json und jeder Lockdatei auf easy-day-js geprüft wurde und sauber war (PR #18056). Jede schädliche npm-Version fügte der veröffentlichten package.json genau eine Zeile hinzu:
Die Abhängigkeit wird im Mastra-Quellcode nirgendwo importiert. Sie dient ausschließlich dazu, bei der Installation einen Trojaner einzuschleusen. Der Trick ist der Caret-Versionsbereich. Am 16. Juni veröffentlichte der Angreifer zunächst eine saubere Version easy-day-js@1.11.21, die dayjs bis hin zur gebündelten Datei dayjs.min.js und der Paketbeschreibung Byte für Byte imitierte. Am nächsten Tag veröffentlichte er easy-day-js@1.11.22 mit der Malware und markierte sie als latest. Da 1.11.22 die Bedingung ^1.11.21 erfüllt, löst eine gewöhnliche npm install-Ausführung direkt die präparierte Version auf.
Am 17. Juni 2026 veröffentlichte der Angreifer dann in kurzer Folge die übrigen Pakete des Scopes erneut; jedes enthielt dieselbe eingeschleuste Abhängigkeit. Mastras eigene Behebungsmaßnahmen beziffern den Umfang genau: Der Notfall-Changeset aktualisiert 142 veröffentlichbare Pakete im @mastra/*-Scope sowie mastra, create-mastra und mastracode auf höhere, saubere Versionen (PR #18056). Öffentliche Berichte nannten je nach Zeitpunkt zwischen 80 und 144 Pakete. Maßgeblich ist jedoch die eigene Angabe des Anbieters. Die Schlussfolgerung bleibt dieselbe: Im Wesentlichen war der gesamte Scope betroffen.
Bei einigen wenigen Paketen veröffentlichte der Angreifer sogar Versionen oberhalb der legitimen Version latest (zum Beispiel @mastra/schema-compat@1.2.12, @mastra/react@1.0.1, @mastra/voice-playai@0.12.2). Deshalb musste Mastra später explizit höhere Versionen festlegen, statt die Angreifer-Versionen mit gewöhnlichen Patch-Updates zu überholen (PR #18060).
Der Malware-Dropper: TLS deaktivieren, abrufen, abkoppeln, löschen
easy-day-js@1.11.22 enthält eine Datei setup.cjs, die als postinstall-Hook ausgeführt wird. Bei der Installation:
Deaktiviert die TLS-Zertifikatsprüfung, indem
NODE_TLS_REJECT_UNAUTHORIZED='0'gesetzt wird. So gelingt ein HTTPS-Abruf von einer Raw-IP-Adresse mit selbstsigniertem Zertifikat.Schreibt Markerdateien (
~/.pkg_history, ~/.pkg_logs), um Installationen nachzuverfolgen.Lädt eine Payload der zweiten Stufe von
https://23.254.164[.]92:8000/update/49890878herunter (gehostet bei Hostwinds).Schreibt sie in das temporäre Verzeichnis und startet sie als abgekoppelten, verborgenen Hintergrundprozess ohne Konsolenausgabe.
Löscht sich selbst, um forensische Spuren zu verringern.
Die Payload: plattformübergreifender Krypto-Stealer und RAT
Die Payload der zweiten Stufe (SHA256 221c45a790dec2a296af57969e1165a16f8f49733aeab64c0bbd768d9943badf) ist ein verschleierter Kryptowährungs-Wallet-Stealer – dieselbe Payload-Klasse, die Snyk bereits bei früheren npm-Kompromittierungen beobachtet hat. Sie durchsucht Chrome-, Brave- und Edge-Profile nach einer fest codierten Liste von Kryptowährungs-Wallet-Browser-Erweiterungen, darunter MetaMask, Phantom, Solflare, Coinbase Wallet, OKX und Keplr. Neben Wallet-Daten erfasst sie Benutzernamen, Hostnamen, Betriebssystem und Architektur, Node-Version, installierte Anwendungen, Browserverlauf und laufende Prozesse. Anschließend codiert sie alle Daten als Base64 und übermittelt sie in einem JSON-Beacon.
Außerdem richtet sie eine als Node-Tooling getarnte Persistenz ein und sendet etwa alle 10 Minuten ein Signal an einen separaten RAT-C2-Server (23.254.164[.]123/49890878). Dabei kommt ein selbstsigniertes wolfSSL-Testzertifikat zum Einsatz (CN=www.wolfssl.com, im Januar 2018 abgelaufen):
macOS: LaunchAgent unter
~/Library/LaunchAgents/com.nvm.protocal.plistLinux: systemd-Benutzerdienst
~/.config/systemd/user/nvmconf.serviceWindows: PowerShell-Ausführung, abgelegt unter
C:\ProgramData\NodePackages
Die Abhängigkeit, die zunächst sauber und dann präpariert war, der setup-Postinstall-Dropper, der TLS-Bypass mit Abruf von einer Raw-IP-Adresse und die Krypto-Stealer-Payload ähneln stark dem Axios-npm-Kompromiss, den Snyk Anfang 2026 analysiert hat – bis hin zum Installations-Dropper, der sich selbst löscht. Microsoft Threat Intelligence schrieb die frühere Kampagne dem Akteur zu, den das Unternehmen als Sapphire Sleet (BlueNoroff) verfolgt. Eine Zuordnung dieses konkreten Vorfalls ist nicht bestätigt. Wir spekulieren hier nicht weiter; für Sicherheitsteams ist das Muster dennoch beachtenswert, ohne es als Tatsache darzustellen.
Analyse der Auswirkungen
Allein @mastra/core kommt auf etwa 4 Millionen Downloads pro Monat (npm-Registry) und hat Hunderte abhängige Projekte. mastra steuert rund 1,5 Millionen weitere Downloads bei (npm-Registry). Da 142 Pakete im gesamten Scope erneut veröffentlicht wurden, erreicht das aggregierte monatliche Downloadvolumen mehrere zehn Millionen. Das potenzielle Ausmaß des Angriffs ist daher groß.
Das tatsächliche Risiko ist geringer als diese Schlagzeilenzahl vermuten lässt – wichtig ist hier Genauigkeit. Gefährdet sind Sie nur, wenn bei einem Build oder auf einem Entwicklerrechner während des Expositionszeitraums eine der schädlichen Versionen aufgelöst wurde. Lockdateien sind dabei ausschlaggebend und bieten npm-Projekten eine sichere, reproduzierbare Methode für den Umgang mit Abhängigkeiten:
Über eine eingecheckte Lockdatei auf eine Version vor dem Vorfall festgelegt: Mit
npm ciwäre das schädliche Release nicht installiert worden. Wahrscheinlich sind Sie nicht betroffen, prüfen sollten Sie es trotzdem.Keine Lockdatei, ein offener Versionsbereich oder eine Neuinstallation bzw. Neuerstellung der Lockdatei am oder nach dem 17. Juni: Der Caret-Versionsbereich hätte
easy-day-js@1.11.22aufgelöst und derpostinstall-Hook wäre ausgeführt worden.
Da die Payload bei der Installation ausgeführt wird, sind auch CI-Runner, kurzlebige Build-Agenten und Entwickler-Laptops betroffen – nicht nur Produktionsserver. Über jeden dieser Hosts könnten Zugangsdaten und Wallets offengelegt worden sein.
Erkennung: Sind Sie betroffen?
1. Prüfen Sie, ob easy-day-js jemals in Ihrem Dependency-Baum enthalten war. Es sollte dort niemals legitimerweise auftauchen:
2. Prüfen Sie die aufgelösten @mastra Versionen. Kompromittierte Releases wurden am 17. Juni 2026 veröffentlicht und verfügen über keine SLSA-Provenienz. Prüfen Sie, welche Versionen tatsächlich in Ihrer Lockdatei festgehalten sind:
3. Führen Sie einen Snyk-Scan durch. Snyk kennzeichnet das schädliche Paket als SNYK-JS-EASYDAYJS-17353313 (eingebetteter schädlicher Code):
4. Suchen Sie auf allen Rechnern, auf denen während des Zeitraums eine Installation ausgeführt wurde, nach Host-Artefakten:
5. Prüfen Sie ausgehende Verbindungsprotokolle auf Verbindungen zu 23.254.164[.]92:8000 oder 23.254.164[.]123 sowie zu anderen Adressen in 23.254.164.0/24.
Eine praktische Schritt-für-Schritt-Anleitung, wie Sie mit Snyk eine solche npm-Kompromittierung eines gesamten Scopes finden und beheben, finden Sie in dieser Demo zur Behebung:

Shai-Hulud-NPM-Angriff: Behebung mit Snyk (ein praktischer Behebungsablauf für einen Supply-Chain-Angriff mit massenhafter Neuveröffentlichung von npm-Paketen).
Behebung
Wenn easy-day-js nicht vorhanden ist und Ihre Lockdatei @mastra Versionen von vor dem Vorfall festlegt: Bestätigen Sie dies anhand der oben genannten Erkennungsschritte, behalten Sie die festgelegte Version in Ihrer Lockdatei bei und fahren Sie fort.
Wenn Sie eine schädliche Version aufgelöst haben, behandeln Sie jeden betroffenen Host als kompromittiert.
Aktualisieren Sie auf eine saubere Version; legen Sie nicht einfach eine niedrigere Version fest. Mastra reagierte, indem saubere Releases für alle 142 veröffentlichbaren Pakete nachgeschoben und der
latest-Dist-Tag über die kompromittierten Versionen hinaus verschoben wurden (PR #18056, PR #18049), statt sich auf das Zurückziehen der Pakete zu verlassen. Aktualisieren Sie auf das aktuelle saubere Release (zum Beispiel@mastra/core@1.42.0oder höher), erstellen Sie eine saubere Lockdatei und entfernen Sie alle Spuren voneasy-day-js. Da der Angreifer einige Versionen oberhalb der legitimen Versionlatestveröffentlicht hat, prüfen Sie genau, ob die von Ihnen verwendete Version ein bekanntermaßen sauberes Mastra-Release ist und keine verwaiste Angreifer-Version.Erneuern Sie alle Zugangsdaten, auf die der Host zugreifen konnte: Cloud-Schlüssel, CI-Secrets und -Tokens, LLM- und andere API-Schlüssel, npm-Tokens und SSH-Schlüssel. Da Mastra ein Agent-Framework ist, sind LLM-Provider-Schlüssel besonders wahrscheinlich vorhanden.
Übertragen Sie Kryptowährungs-Wallets: Wenn ein Browserprofil auf dem Rechner eine angegriffene Wallet-Erweiterung enthielt, gehen Sie davon aus, dass Seed-Phrase und Schlüssel offengelegt wurden. Übertragen Sie Ihr Guthaben von einem sauberen Gerät aus auf eine neue Wallet.
Entfernen Sie die Persistenzmechanismen: Löschen Sie den LaunchAgent, den systemd-Dienst oder die Ablage unter
C:\ProgramData\NodePackages, beenden Sie den abgekoppelten Prozess und entfernen Sie die Marker des Droppers.Setzen Sie das System nach Möglichkeit neu auf. Bei einem RAT mit etablierter Persistenz ist ein sauberer Neuaufbau die sicherste Lösung.
So verringern Sie künftig das Risiko dieser Angriffsklasse:
Deaktivieren Sie Installationsskripte standardmäßig mit
npm config set ignore-scripts trueund erlauben Sie sie nur dort, wo sie für einen Build wirklich benötigt werden. Dadurch werdenpostinstall-Dropper neutralisiert. Dies ist eine der Best Practices für npm-Sicherheit von Snyk.Committen Sie Lockfiles und verwenden Sie
npm ciin CI, damit Builds reproduzierbar sind und ein geänderter latest-Tag nicht unbemerkt eine erneute Auflösung auslöst.Verlangen Sie Provenance. Mastra generierte bei CI-Veröffentlichungen SLSA-Provenance, sie war jedoch nicht vorgeschrieben. Daher konnte weiterhin mit einem einfachen Token ohne Attestierungen veröffentlicht werden. Dieselbe Lücke ermöglicht es, bösartige Versionen auszuliefern, wie beim Nx-Paketkompromiss. Die Durchsetzung von Provenance bei der Nutzung erhöht die Hürde.
Achten Sie auf Phantom-Abhängigkeiten. Wenn ein ausgereiftes, weit verbreitetes Paket plötzlich eine einzelne ungenutzte Abhängigkeit erhält, ist das genau das Signal, auf das Sie achten sollten. Risikobasierte Priorisierung und die Erkennung von Assets in Ihrer Umgebung helfen Ihnen dabei, herauszufinden, wo ein betroffenes Paket tatsächlich eingesetzt wurde und welche Instanzen erreichbar sind und Zugangsdaten enthalten. So beheben Sie zuerst die exponierten Hosts, statt gleichzeitig jeder Installation im gesamten Scope nachzugehen.
Weitere Snyk-Beiträge
Dies ist der jüngste Fall einer Reihe von Übernahmen von npm-Scopes und Maintainer-Konten im Jahr 2026. Das Muster – ein kompromittiertes Maintainer-Konto ermöglicht eine schnelle, automatisierte Neuveröffentlichung – steckt auch hinter den Mini-Shai-Hulud-Kampagnen:

Mini Shai-Hulud: Der ausgefeilteste npm-Supply-Chain-Angriff des Jahres 2026 (eine Schritt-für-Schritt-Anleitung, wie ein einziges kompromittiertes Maintainer-Konto dazu genutzt wird, Hunderte von npm-Paketen auf einmal mit Trojanern zu versehen, und wie Sie eine Gefährdung erkennen und beheben).
Weitere Informationen zu derselben Angriffsgruppe und Abwehrmaßnahmen finden Sie in Snyks Berichten über den Axios-npm-Kompromiss, den Mini-Shai-Hulud-Angriff auf AntV und auf TanStack, den sich selbst verbreitenden node-gyp-Wurm sowie die Kompromisse bei tinycolor und ngx-bootstrap. Eine Einführung in die Absicherung Ihrer Installationspipeline finden Sie unter NPM-Sicherheit: Supply-Chain-Angriffe verhindern sowie in der Snyk-Learn-Lektion zur Kompromittierung eines legitimen Pakets.
Zeitachse
Ende 2024 bis Anfang 2025: Das Konto
ehinderoveröffentlicht legitime Alpha-Versionen von@mastra/coreund wird dann inaktiv. Der Zugriff auf den Scope wird nie entzogen.16. Juni 2026: Eine saubere Version von
easy-day-js@1.11.21wird als Tarnung veröffentlicht und gibt sich alsdayjsaus.17. Juni 2026, ca. 01:01 UTC: Die schädliche Version
easy-day-js@1.11.22wird veröffentlicht und mit dem Taglatestversehen.17. Juni 2026, ca. 01:12 bis 02:36 UTC: Der Großteil des
@mastra/*-Scopes wird mit der eingeschleusten Abhängigkeiteasy-day-jsneu veröffentlicht.17. Juni 2026: Mehrere Sicherheitsanbieter machen den Vorfall öffentlich bekannt;
easy-day-jswird von npm entfernt und die schädlichen Versionen werden gekennzeichnet (Snyk-HinweisSNYK-JS-EASYDAYJS-17353313).17. Juni 2026 (am selben Tag): Mastra reagiert, entfernt den unbefugten Eigentümer, erstellt Changesets für dringende saubere Veröffentlichungen (PR #18049), veröffentlicht alle 142 veröffentlichbaren Pakete mit höheren Versionen neu (PR #18056) und setzt explizite höhere Versionen fest, wenn der Angreifer Versionen über
latestveröffentlicht hatte (PR #18060).
Sichern Sie Ihre Supply Chain mit Snyk
87 % der Befragten waren von Problemen mit der Supply-Chain-Sicherheit betroffen. Schützen Sie Ihre Supply Chain mit Snyk.
