Hunderte npm- und PyPI-Pakete mit Malware infiziert

Lesezeit
2 Minuten
Bis jetzt gelesen

Hunderte npm- und PyPI-Pakete mit Malware infiziert

12.05.2026 - 13:20
Veröffentlicht in:

Ein einziger kompromittierter GitHub-Actions-Workflow reichte aus, um Dutzende weit verbreitete npm-Pakete in Credential-Stealer zu verwandeln – und der Schadcode überlebt sogar die Deinstallation.

Wer in den vergangenen Tagen bestimmte JavaScript-Pakete der TanStack-Familie installiert hat, könnte ungewollt Schadsoftware auf seinem Rechner oder in seiner CI-Pipeline ausgeführt haben. Das Sicherheitsunternehmen Socket deckte am 11. Mai einen laufenden Supply-Chain-Angriff auf, der unter dem Namen "Mini Shai-Hulud" verfolgt wird.

Betroffen sind mindestens 84 Paket-Artefakte im TanStack-Namespace – darunter "@tanstack/react-router" mit über zwölf Millionen wöchentlichen Downloads, das in unzähligen Web-Projekten steckt, oft ohne dass Entwickler es direkt eingebunden haben. Sockets KI-Scanner erkannte die schadhaften Versionen in jeweils weniger als sechs Minuten nach deren Veröffentlichung.

Der Angriff gelang über eine Schwachstelle in der GitHub-Actions-Pipeline von TanStack. Vereinfacht gesagt: Wer einen Pull Request von einem Fork einreicht, darf normalerweise keine privilegierten Secrets des Hauptprojekts anfassen. Die Angreifer hebelte diese Grenze jedoch mit dem sogenannten "Pwn Request"-Muster aus – einem bekannten Angriffsmuster, bei dem der "pull_request_target"-Trigger missbraucht wird, um dennoch an privilegierte Laufzeitdaten zu gelangen.

Kombiniert mit einer Manipulation des GitHub-Actions-Caches konnten sie schließlich einen OIDC-Token aus dem Runner-Prozess extrahieren. Dieser Token erlaubte es, direkt beim npm-Registry Pakete zu veröffentlichen – ganz ohne gestohlene npm-Passwörter oder API-Keys.

Schadcode in JavaScript-Datei

Der eigentliche Schadcode steckt in einer neu hinzugefügten Datei namens "router_init.js", die rund 2,3 MByte groß und absichtlich schwer lesbar gemacht wurde. Technisch handelt es sich um einen sogenannten Supply-Chain-Wurm: Das Programm stiehlt Zugangsdaten aus der Ausführungsumgebung – etwa GitHub-Tokens, AWS-Credentials, HashiCorp-Vault-Tokens und Kubernetes-Service-Account-Tokens - und verbreitet sich anschließend selbst weiter, indem es mit gestohlenen OIDC-Tokens neue, infizierte Pakete im npm-Registry veröffentlicht.

Besonders tückisch ist die Persistenz: Der Code schreibt sich in die Hook-Verzeichnisse von Claude Code (".claude/") und VS Code (".vscode/tasks.json") ein und überlebt damit auch eine Deinstallation des npm-Pakets. Die gestohlenen Daten schickt er verschlüsselt über das dezentralisierte Messenger-Netzwerk Session ab - der Datenverkehr sieht dabei aus wie normaler Messenger-Traffic und fällt kaum auf.

Zahlreiche kompromittierte Pakete

Die Kampagne traf mehr als nur TanStack. Im Laufe der Nacht dokumentierte Socket kompromittierte Pakete von Mistral AI, UiPath, OpenSearch, Guardrails AI und mehreren Squawk-Paketen – sowohl im npm- als auch im PyPI-Ökosystem. Einen besonders dreisten Fund gab es beim Python-Paket "guardrails-ai@0.10.1": Es lädt beim bloßen Import eine Datei von der Domain "git-tanstack.com" herunter und führt sie aus, ohne zu prüfen, ob sie unverändert ist.

Auf eben dieser Domain hinterließen die Angreifer, die sich als "TeamPCP" identifizierten, eine Nachricht, in der sie angaben, seit über zwei Stunden aktiv Zugangsdaten zu stehlen, während die Untersuchung noch lief. Den GitHub-Account hinter dem verdächtigen Commit – "voicproducoes" – verriet ein öffentliches Repository mit dem bezeichnenden Namen "A Mini Shai-Hulud has Appeared".

Zugangsdaten austauschen

TanStack hat die betroffenen Paketversionen inzwischen als veraltet markiert, die schadhaften Dateien zusammen mit dem npm-Sicherheitsteam entfernt und den betroffenen Workflow gehärtet. Für alle, die eine kompromittierte "@tanstack/*"-Version installiert haben, gilt: Zugangsdaten sofort rotieren – allen voran npm-Tokens, GitHub PATs und AWS-Credentials. Außerdem sollten die Verzeichnisse ".claude/" und ".vscode/" auf unbekannte Dateien wie "router_runtime.js" oder "setup.mjs" überprüft werden, da eine einfache Deinstallation des Pakets nicht reicht.

Wer auf Nummer sicher gehen will, prüft mit dem Befehl "shasum -a 256" alle "router_init.js"-Dateien im Dependency-Baum gegen den bekannten Schadcode-Hash und sperrt auf DNS-Ebene den Zugriff auf "getsession.org". Die vollständige Liste kompromittierter Pakete und weitere technische Details pflegt Socket unter socket.dev/supply-chain-attacks/mini-shai-hulud.