Mini Shai-Hulud, der mit der Gruppe TeamPCP in Verbindung steht, hat sich zu einem der gefährlichsten Würmer in den npm- und PyPI-Ökosystemen entwickelt: Er hat die Pakete TanStack, UiPath, Mistral AI, OpenSearch und Guardrails AI kompromittiert, indem er bösartige Versionen über legitime GitHub Actions mit gültiger SLSA-Signatur veröffentlichte und sich anschließend automatisch auf andere Pakete desselben Maintainers ausbreitete; Entwickler und Unternehmen, die diese Ökosysteme nutzen, müssen umgehend die verwendeten Versionen überprüfen, npm-/GitHub-Tokens widerrufen und die CI/CD-Infrastruktur auf Anzeichen einer Kompromittierung untersuchen.
Technische Details der Mini-Shai-Hulud-Attacke
Der Hauptangriffsvektor im TanStack-Ökosystem ist eine Kette von Angriffen auf GitHub Actions. Nach Angaben des TanStack-Teams nutzten die Angreifer drei Schlüsselelemente: den Trigger pull_request_target, eine Vergiftung des GitHub-Actions-Caches und die Extraktion eines OIDC-Tokens aus dem Speicher des Runner-Prozesses zur Laufzeit (Postmortem von TanStack; Untersuchung zum GitHub-Actions-Cache – Adnan Khan).
Die weiteren Schritte des Angriffs auf TanStack sahen wie folgt aus:
- Vorbereitung eines bösartigen Payloads in einem Fork des Projekts auf GitHub;
- Injection bösartiger Dateien in die veröffentlichten Tarballs der npm-Pakete;
- Übernahme des legitimen Workflows TanStack/router über das gestohlene OIDC-Token und Veröffentlichung kompromittierter Versionen über die offizielle Release-Pipeline.
In der Folge wurden im TanStack-Ökosystem bösartige Versionen von 42 Paketen (84 Versionen) veröffentlicht; der Vorfall wurde mit der Kennung CVE-2026-45321 und einem CVSS-Score von 9.6 versehen, was im Advisory des Projekts auf GitHub (GitHub Security Advisory) und in der NVD-Datenbank (NVD CVE-2026-45321) dokumentiert ist.
Die zentrale Komponente des bösartigen Codes in den npm-Paketen ist die obfuskierte JavaScript-Datei router_init.js, die:
- die Ausführungsumgebung profiliert (Betriebssystem, Ausführungskontext, Entwicklungswerkzeuge);
- einen multifunktionalen Credential-Stealer startet, der auf Cloud-Provider, Kryptowallets, KI-Werkzeuge, Messenger und CI-Systeme einschließlich GitHub Actions abzielt;
- Daten an die Domain filev2.getsession[.]org exfiltriert, die zum dezentralen Messenger Session gehört, was die Wahrscheinlichkeit einer Blockierung des Traffics in Firmennetzen verringert;
- als Rückfallkanal verschlüsselte Daten mithilfe gestohlener GitHub-Tokens über die GitHub-GraphQL-API in von den Angreifern kontrollierte Repositories committet; der Autor der Commits tarnt sich als
[email protected].
Zur Persistenz verankert sich die Malware in den IDEs Claude Code und Visual Studio Code, sodass der Credential-Stealer bei jedem Start der Entwicklungsumgebung ausgeführt wird. Zusätzlich wird ein Dienst gh-token-monitor installiert, um GitHub-Tokens zu überwachen und wiederholt zu exfiltrieren, und es werden zwei bösartige GitHub-Actions-Workflows hinzugefügt, die die Secrets des Repositories in JSON serialisieren und an den Server api.masscan[.]cloud senden.
Eine Besonderheit des Wurms ist seine Fähigkeit zur selbstständigen Verbreitung im npm-Ökosystem. Der bösartige Code:
- sucht nach einem Veröffentlichungstoken von npm mit dem Flag bypass_2fa=true;
- listet alle Pakete auf, die vom selben Maintainer veröffentlicht wurden;
- erhält über das gestohlene GitHub-OIDC-Token individuelle Veröffentlichungstokens für jedes Paket und umgeht so traditionelle Authentifizierungsmechanismen.
Die kompromittierten npm-Pakete werden mit gültigen SLSA-Build-Level-3-Attestierungen ausgeliefert, d. h., der Angriff hat erstmals gezeigt, dass bösartige, aber formal „nachweislich reproduzierbare“ Builds über eine vertrauenswürdige Pipeline veröffentlicht werden können (Analyse von StepSecurity).
Ausweitung der Kampagne über TanStack hinaus
Der Wurm Mini Shai-Hulud hat sich über TanStack hinaus ausgebreitet und andere Projekte und Ökosysteme, einschließlich PyPI, betroffen. Bestätigt kompromittierte Pakete und Versionen sind:
- [email protected] (PyPI)
- [email protected] (PyPI)
- @opensearch-project/opensearch: 3.5.3, 3.6.2, 3.7.0, 3.8.0
- @squawk/[email protected]
- @squawk/[email protected]
- @squawk/[email protected]
- @tallyui/connector-medusa: 1.0.1, 1.0.2, 1.0.3
- @tallyui/connector-vendure: 1.0.1, 1.0.2, 1.0.3
Die Analyse von Microsoft zum bösartigen Paket [email protected] zeigt, dass dieses einen Credential-Stealer von dem Host 83.142.209[.]194 lädt und Logik enthält, die von Land und Systemsprache abhängt: Die Malware meidet russischsprachige Umgebungen und verfügt über einen „geografisch begrenzten destruktiven Zweig“ mit einer Wahrscheinlichkeit von 1 zu 6, rm -rf / auszuführen, wenn das System nach ihrer Einschätzung in Israel oder Iran steht (Analyse von Microsoft Threat Intelligence).
Die Kompromittierung von [email protected] ist besonders gefährlich, da der bösartige Code bereits bei der Modul-Importierung ausgeführt wird. Laut Analyse von Socket (Analyse von Socket) führt das Paket Folgendes aus:
- Es prüft, ob es unter Linux ausgeführt wird;
- es lädt ein Artefakt von https://git-tanstack.com/transformers.pyz herunter;
- es schreibt dieses nach
/tmp/transformers.pyzund führt es mitpython3ohne jede Integritätsprüfung aus.
Kontext und Besonderheiten der Bedrohung
Mindestens drei Aspekte machen Mini Shai-Hulud zu einer qualitativ neuen Stufe der Bedrohung für die Software-Lieferkette:
- Selbstverbreitender Wurm im npm-Ökosystem. Die Malware kompromittiert nicht nur einmalig ein Paket, sondern sucht aktiv nach weiteren Paketen desselben Maintainers und infiziert diese, indem sie Besonderheiten des Token-Managements von npm und der Integration mit GitHub OIDC ausnutzt.
- Missbrauch vertrauenswürdiger Mechanismen – SLSA und OIDC. Organisationen, die sich auf SLSA Build Level 3 und „secretless“ Pipelines mit OIDC als Vertrauensgarantie verlassen haben, erhalten ein eindrückliches Beispiel dafür, dass eine Kompromittierung von Runner und Workflow diese Mechanismen in einen Kanal zur Auslieferung von Schadcode verwandeln kann.
- Heuristisches Ausweichen und nicht triviale Destruktivität. Die Nutzung der Session-Infrastruktur (Domain getsession[.]org) verringert die Wahrscheinlichkeit einer Netzwerkblockierung, und die geozentrierte Logik in der Version für mistralai schafft eine kombinierte Bedrohung aus Spionage und gezielter Datenvernichtung.
Der Angriff zeigt ein ausgereiftes Verständnis der Angreifer für die inneren Mechanismen von GitHub Actions und Cache-Management, wie zuvor ausführlich in der Untersuchung zur Cache-Vergiftung beschrieben (Analyse des GitHub-Actions-Caches), und macht deutlich, dass selbst „infrastrukturnaher“ CI/CD-Code als vorrangiges Schutzobjekt betrachtet werden muss.
Auswirkungsanalyse
Besonders gefährdet sind:
- Entwicklungsteams, die TanStack und die oben aufgeführten npm-/PyPI-Pakete direkt oder transitiv (über Abhängigkeiten) einsetzen;
- Organisationen, in denen GitHub Actions weitreichende Rechte besitzt (write auf Repositories, Release-Management, Ausgabe von OIDC-Tokens in Cloud-Accounts);
- Unternehmen, die intensiv KI-Werkzeuge und -Bibliotheken (Mistral, Guardrails, AI-Plugins) sowie CI/CD-Infrastruktur auf Basis von GitHub Actions nutzen.
Potenzielle Folgen bei ausbleibender Reaktion umfassen:
- Kompromittierung der Software-Lieferkette: Veröffentlichung bösartiger Versionen interner Bibliotheken und Anwendungen über legitime Build-Pipelines;
- Leakage von Secrets (Tokens, Passwörter, API-Schlüssel) aus GitHub-, CI/CD- und Cloud-Umgebungen durch eingepflanzte Workflows und den Dienst gh-token-monitor;
- direkten Schaden an der Infrastruktur – von unbefugtem Zugriff auf Repositories und Cloud-Ressourcen bis hin zur möglichen Löschung des Dateisystems auf bestimmten Zielhosts;
- Reputations- und Compliance-Risiken, falls Kunden oder Partner über infizierte Lieferketten geschädigt werden.
Angesichts der Natur des Wurms und des kritischen CVSS-Scores von 9.6 für CVE-2026-45321 ist der Vorfall als Sicherheitsvorfall höchster Priorität für alle Organisationen zu bewerten, die sich auf GitHub Actions und öffentliche Paketregister für Abhängigkeiten stützen.
Praktische Empfehlungen
1. Inventarisierung und Bereinigung von Abhängigkeiten
- Sofort prüfen, ob in Projekten folgende Versionen verwendet wurden:
- alle betroffenen TanStack-Pakete gemäß Advisory GHSA-g7cv-rxg3-hmpx;
guardrails-ai==0.10.1,mistralai==2.4.6(PyPI);@opensearch-project/opensearchin den Versionen 3.5.3, 3.6.2, 3.7.0, 3.8.0;@squawk/[email protected],@squawk/[email protected],@squawk/[email protected];@tallyui/connector-medusaund@tallyui/connector-vendurein den Versionen 1.0.1–1.0.3.
- Lockfiles (package-lock.json, pnpm-lock.yaml, poetry.lock, requirements.txt) und CI-Build-Logs prüfen, nicht nur die aktuelle Abhängigkeitskonfiguration.
- Für gefundene bösartige Versionen:
- sofort auf gepatchte Versionen aktualisieren oder auf bekannte sichere Releases zurückrollen;
- betroffene Anwendungen neu bauen und erneut deployen.
2. Prüfung auf Kompromittierungsindikatoren
- In Netzwerk- und Proxy-Logs nach Verbindungen zu folgenden Zielen suchen:
filev2.getsession[.]org,api.masscan[.]cloud,83.142.209[.]194,git-tanstack.com/transformers.pyz.
- Auf Dateisystemen von Entwicklerrechnern und CI-Runnern:
- Vorhandensein von
router_init.jsaußerhalb des erwarteten Kontexts; - Spuren von
/tmp/transformers.pyzund dessen Ausführungpython3 /tmp/transformers.pyzin Shell-Logs.
- Vorhandensein von
- In GitHub:
- Suche nach Commits mit dem Autor
[email protected]:
git log --author="[email protected]"; - Audit des Verzeichnisses
.github/workflowsauf kürzlich hinzugefügte oder geänderte Workflows, insbesondere solche mit Serialisierung von Secrets und Netzwerkzugriff auf externe Hosts; - Prüfung installierter und aktualisierter Erweiterungen für VS Code und Claude Code, die zeitgleich mit der Nutzung kompromittierter Pakete erschienen sind.
- Suche nach Commits mit dem Autor
3. Management von npm-/GitHub-Tokens und OIDC
- Widerrufen und neu ausstellen:
- npm-Veröffentlichungstokens, insbesondere mit dem Flag
bypass_2fa; - persönliche GitHub-Access-Tokens und Secrets, die in GitHub Actions verwendet werden;
- Rollen und Trust-Policies, die mit GitHub-OIDC-Tokens in Cloud-Accounts verknüpft sind.
- npm-Veröffentlichungstokens, insbesondere mit dem Flag
- Die Nutzung des Triggers
pull_request_targetauf Fälle beschränken, in denen er objektiv notwendig ist; erwägen, sensible Workflows aufpull_requestohne erhöhte Rechte umzustellen. - Die Rechtepolitik für GitHub Actions verschärfen:
- minimal erforderliche Berechtigungen (principle of least privilege) für
GITHUB_TOKENund einzelne Workflows; - Verbot von Schreibzugriffen auf das Repository aus Workflows, die externe Pull Requests verarbeiten, ohne zusätzliche Validierung.
- minimal erforderliche Berechtigungen (principle of least privilege) für
4. Vertrauenspolitik für SLSA und Build-Artefakte
- Interne Richtlinien überprüfen, die Paketen mit „hohem“ SLSA-Level oder anderen Provenance-Attestierungen automatisch vertrauen: Eine Attestierung der Build-Herkunft ersetzt nicht die Analyse des Inhalts.
- In die Pipeline integrieren:
- statische und dynamische Analyse von Abhängigkeiten;
- Prüfung auf bekannte IOCs und C2-Domains;
- separate Sicherheitskontrollen für Artefakte aus Fork-Repositories oder von externen Contributor:innen.
Zentrale Erkenntnis für Entwicklungs- und Sicherheitsteams: Mini Shai-Hulud hat gezeigt, dass vertrauenswürdige Build-Pipelines, SLSA-Attestierungen und OIDC-Mechanismen allein nicht ausreichen – es ist notwendig, umgehend einen Audit der Abhängigkeiten auf betroffene Versionen durchzuführen, alle mit kompromittierten Projekten und Runnern verbundenen npm-/GitHub-Tokens zu widerrufen und neu auszustellen und die Konfiguration von GitHub Actions zu verschärfen (Einschränkung von pull_request_target und Workflow-Rechten), um die in dieser Kampagne demonstrierten Verbreitungsvektoren zu schließen.