Eine groß angelegte Supply-Chain-Attacke auf npm hat Hunderte Pakete des @antv-Ökosystems – einer populären Bibliothek für Datenvisualisierung – sowie eine Reihe weit verbreiteter JavaScript-Pakete getroffen, darunter echarts-for-react mit rund 1,1 Millionen wöchentlichen Downloads. Nach Angaben der Forschenden von Socket steht der Angriff im Zusammenhang mit der laufenden Kampagne Mini Shai-Hulud, bei der ein kompromittiertes Maintainer-Konto genutzt wird, um massenhaft trojanisierte Paketversionen zu veröffentlichen. Die Schadnutzlast stiehlt mehr als 20 Arten von Zugangsdaten – von AWS- und Azure-Schlüsseln bis hin zu GitHub- und npm-Tokens – und ist in der Lage, sich über gestohlene Tokens selbst weiterzuverbreiten. Organisationen, die betroffene Pakete einsetzen, müssen umgehend ihre Abhängigkeiten prüfen und potenziell kompromittierte Secrets zurückziehen.
Umfang der Kompromittierung und betroffene Pakete
Der Angriff betrifft Pakete, die mit dem npm-Maintainerkonto atool verknüpft sind. Laut Socket veröffentlichte der Angreifer 639 bösartige Versionen in 323 einzigartigen Paketen, von denen 558 Versionen auf 279 Pakete im Namensraum @antv entfallen. Eine unabhängige Analyse von SafeDep nennt leicht abweichende Zahlen – 631 bösartige Versionen in 314 Paketen –, was auf eine gewisse Unsicherheit hinsichtlich des exakten Umfangs der Kampagne hinweist.
Zu den bestätigten betroffenen Paketen gehören:
- Namensraum @antv: @antv/g2, @antv/g6, @antv/x6, @antv/l7, @antv/s2, @antv/f2, @antv/g, @antv/g2plot, @antv/graphin, @antv/data-set
- Außerhalb von @antv: echarts-for-react, timeago.js, size-sensor, canvas-nest.js
Wie Socket anmerkt, ist das potenzielle Schadensausmaß beträchtlich, da das kompromittierte Konto mit weit verbreiteten Paketen aus den Ökosystemen für Datenvisualisierung, Charting, Kartographie und React-Komponenten verknüpft ist. Organisationen, die neue Versionen ihrer Abhängigkeiten automatisch einspielen, sind einem besonders hohen Risiko ausgesetzt.
Technische Anatomie des Angriffs
Infektionsmechanismus
Nach Angaben von SafeDep nutzt der Angriff zwei Ausführungspfade. Jede kompromittierte Version fügt einen preinstall-Hook hinzu, der bun run index.js aufruft. Darüber hinaus injizieren 630 von 631 bösartigen Versionen einen Eintrag optionalDependencies, der auf sogenannte Imposter-Commits verweist – gefälschte Commits im legitimen GitHub-Repository antvis/G2, über die eine zweite Kopie der Schadnutzlast ausgeliefert wird.
Bemerkenswert ist die Geschwindigkeit der Operation: SafeDep registrierte einen 22‑minütigen Veröffentlichungsanstieg, der 314 Pakete und 631 Versionen mit identischer, verschleierter Nutzlast umfasste. Das weist eindeutig auf eine vollständig automatisierte Operation unter Verwendung eines gestohlenen Tokens hin und nicht auf einen schrittweisen oder zielgerichteten Angriff.
Fähigkeiten des Stealers
Die Schadnutzlast stiehlt nach Angaben der Forschenden mehr als 20 Arten von Zugangsdaten:
- Schlüssel von Cloud-Providern: Amazon Web Services, Google Cloud, Microsoft Azure
- Entwickler-Tokens: GitHub, npm
- Infrastruktur-Secrets: SSH-Schlüssel, Kubernetes, Vault
- Zahlungsdaten: Stripe
- Verbindungsstrings zu Datenbanken
- Versuch des Ausbruchs aus einem Docker-Container über den Host-Socket
Die gesammelten Daten werden serialisiert, komprimiert, verschlüsselt und über Port 443 an die Domain t.m-kosche[.]com übertragen. Als Fallback-Mechanismus zur Exfiltration nutzt die Malware ein gestohlenes GitHub-Token, um unter dem Konto des Opfers ein öffentliches Repository anzulegen und die Daten in eine JSON-Datei zu committen.
Selbstausbreitung
Ein zentrales Merkmal von Mini Shai-Hulud ist die integrierte Logik zur Verbreitung über npm. Die Malware validiert gestohlene npm-Tokens über die API des Registrys, listet die dem Tokeninhaber gehörenden Pakete auf, lädt die Paketarchive herunter, injiziert die Schadnutzlast, fügt einen preinstall-Hook hinzu, erhöht die Versionsnummer und veröffentlicht die Pakete erneut im Namen des kompromittierten Maintainers. Auf diese Weise erzeugt jede Kompromittierung die nächste und löst einen Kaskadeneffekt aus.
Kompromittierungsindikator auf GitHub
Die von der Malware angelegten Repositories enthalten eine charakteristische Beschreibung: „niagA oG eW ereH :duluH-iahS“ (rückwärts gelesen – „Shai-Hulud: Here We Go Again“). Zum Zeitpunkt der Veröffentlichung der Analysen ergab eine Suche auf GitHub mehr als 2200 Repositories mit diesem Marker – ein indirekter Hinweis auf das Ausmaß kompromittierter Konten.
Attribution und Eskalation der Bedrohung
Die Kampagne Mini Shai-Hulud wird nach Einschätzung der Forschenden mit der finanziell motivierten Gruppe TeamPCP in Verbindung gebracht. Die Lage hat sich jedoch deutlich verschärft: Wie SlowMist berichtet, hat TeamPCP den vollständigen Quellcode des Frameworks im Rahmen eines gemeinsam mit BreachForums ausgerufenen Wettbewerbs für Supply-Chain-Angriffe veröffentlicht.
Wie Datadog hervorhebt, ist die Veröffentlichung des Quellcodes eines aktiv eingesetzten offensiven Frameworks ein seltenes Ereignis. Dies senkt die Einstiegshürde für andere Angreifer, da es ihnen fertige Techniken an die Hand gibt, darunter den Missbrauch von OIDC-Tokens, die Fälschung von Paket-Herkunftsdaten und Hooks zur Persistenz in KI-basierten Tools.
Die Folgen sind bereits sichtbar: Nach Angaben von Mondoo hat ein unbekannter Angreifer vier bösartige npm-Pakete hochgeladen, von denen eines nahezu eine wörtliche Kopie des Shai-Hulud-Wurms mit eigener Steuerungsinfrastruktur enthält. Das Auftauchen von Klonen erschwert die Attribution und vergrößert die Angriffsfläche.
Wie Trend Micro betont, sind Organisationen, die GitHub Actions, PyPI, Docker Hub, GitHub Container Registry, VS-Code-Erweiterungen und Cloud-CI-Runner einsetzen, unmittelbar den Risiken dieser Kampagne ausgesetzt.
Einschätzung der Auswirkungen
Am stärksten gefährdet sind Entwicklerteams, die @antv-Pakete und verwandte Bibliotheken für Datenvisualisierung in Unternehmensprojekten nutzen. Angesichts der Tatsache, dass echarts-for-react mehr als eine Million Mal pro Woche heruntergeladen wird, geht die potenzielle Zahl betroffener Organisationen in die Tausende. Der sich selbst verbreitende Charakter des Wurms bedeutet, dass die Kompromittierung eines Maintainers kaskadenartig alle Pakete betreffen kann, die mit dessen Tokens verknüpft sind. Das Abfließen von Cloud-Schlüsseln, SSH-Secrets und CI/CD-Tokens ebnet den Weg zu einer vollständigen Kompromittierung der Infrastruktur.
Praktische Empfehlungen
- Abhängigkeitsaudit: Prüfen Sie, ob in Ihren Projekten betroffene Pakete verwendet werden. Fixieren Sie die Versionsstände der Abhängigkeiten und rollen Sie auf nachweislich saubere Versionen zurück, die vor Beginn der Kampagne veröffentlicht wurden.
- Widerruf von Secrets: Falls betroffene Pakete in Ihrer Umgebung installiert wurden, rotieren Sie umgehend alle npm- und GitHub-Tokens, Cloud-Schlüssel für AWS/GCP/Azure, SSH-Schlüssel und Datenbank-Verbindungsstrings.
- GitHub-Überprüfung: Durchsuchen Sie Ihre Organisation nach Repositories mit der Beschreibung „niagA oG eW ereH :duluH-iahS“ – deren Vorhandensein weist auf eine Kompromittierung hin.
- Blockieren von IOC: Fügen Sie die Domain
t.m-kosche[.]comden Blacklists Ihrer Netzüberwachung hinzu. - Deaktivierung automatischer Updates: Überdenken Sie Ihre Richtlinie zum automatischen Einspielen neuer Abhängigkeitsversionen. Verwenden Sie Lockfiles und Version Pinning.
- Überwachung von preinstall-Hooks: Prüfen Sie Abhängigkeiten auf verdächtige preinstall-Hooks, insbesondere Aufrufe von
bun run index.js.
Die Kampagne Mini Shai-Hulud legt eine systemische Schwachstelle des npm-Ökosystems offen: Ein einziges kompromittiertes Maintainer-Token löst einen Kaskadenangriff aus, und die Veröffentlichung des Wurm-Quellcodes verwandelt eine Einzelbedrohung in ein Massenphänomen. Vordringliche Maßnahmen sind jetzt – ein Audit aller Abhängigkeiten aus dem @antv-Namensraum und verwandter Pakete, die Rotation aller Secrets, die in kompromittierten Umgebungen zugänglich gewesen sein könnten, sowie der Umstieg auf striktes Version Pinning mit manueller Prüfung von Updates für kritische Abhängigkeiten.