11 Min. Lesezeit
Kritisch
Von

CVE-2026-48027 — Achtzehn Minuten Nx Console in der VS-Code-Marketplace und 3.800 interne GitHub-Repos später ist die Lieferkette einen Layer höher gerutscht

28. Mai 2026. Die CISA hat gestern CVE-2026-48027 in die Known-Exploited-Vulnerabilities-Liste aufgenommen — die kompromittierte Nx-Console-Version 18.95.0, die am 18. Mai achtzehn Minuten in der Visual-Studio-Marketplace (12:30–12:48 UTC) und rund sechsunddreißig Minuten auf Open VSX (12:33–13:09 UTC) live war und in dieser Zeit nach Narwhal-Schätzung mehr als 6.000 Entwickler-Installationen erreichte (bei einer Gesamt-Verbreitung der Extension von 2,2 Millionen Installationen). Das Extension-Bundle selbst trug keinen Payload — beim Workspace-Activation startete es einen Shell-Aufruf, der ein verstecktes nx-next-Paket von einem orphaned Commit im offiziellen nrwl/nx-Repository nachlud, getarnt als routinemäßiger Nx-MCP-Setup-Task. Die Payload selbst (von Google Threat Intelligence als „SANDCLOCK" benannt) harvestete GitHub-Tokens, npm-Tokens, AWS- und GCP-Credentials, Vault-Tokens, Kubernetes-Daten, 1Password-CLI-Sessions, SSH-Private-Keys, Docker-Credentials und ausdrücklich auch Claude-Code-Konfigurationsdateien; die operative Folge ist GitHub-CISO Alexis Wales öffentlich bestätigt: rund 3.800 interne GitHub-Repositories abgeflossen, OpenAI, Grafana Labs und Mistral AI als namentlich genannte downstream-Opfer. Eintritt war die TanStack-npm-Welle vom 11. Mai (CVE-2026-45321, TeamPCP / „Mini Shai-Hulud"-Wurm), aus deren Token-Diebstahl eine Narwhal-Entwickler-Identität weiterlief.

TL;DR — die 90-Sekunden-Zusammenfassung

Was wurde veröffentlicht?

CVE-2026-48027 (CISA-KEV-Aufnahme 27.05.2026), eine kompromittierte Version 18.95.0 der Nx-Console-Extension für VS Code und VS-Code-kompatible IDEs (Cursor, VSCodium, Windsurf via OpenVSX). Die malicious Version war am 18.05.2026 zwischen 12:30 UTC und 12:48 UTC — exakt achtzehn Minuten — in der Visual-Studio-Marketplace und parallel von 12:33 bis 13:09 UTC (36 Minuten) auf Open VSX live; Nx hat die Klasse selbst als „critical" eingestuft und die CVE vergeben.

Wie schwer?

Kritisch auf der Credential-Klasse: die Payload (Google TI nennt sie SANDCLOCK) harvestet GitHub-Personal-Access-Tokens, OAuth- und App-Tokens, npm-Auth-Tokens, AWS-Credentials via Instance Metadata und Umgebungsvariablen, HashiCorp-Vault-Tokens, Kubernetes-Service-Account-Secrets, 1Password-CLI-Sessions, SSH-Private-Keys, Google-Cloud- und Docker-Credentials — und ausdrücklich auch Claude-Code-Konfigurationsdateien in einem einzigen Sweep vom Dateisystem und aus dem In-Memory-Cache der Entwickler-Maschine. Die operative Folge ist GitHub-CISO Alexis Wales öffentlich bestätigt: rund 3.800 interne GitHub-Repositories abgeflossen, OpenAI, Grafana Labs und Mistral AI namentlich als downstream-Opfer. Nach Narwhal-Schätzung (Jeff Cross, Co-Founder) haben mehr als 6.000 Entwickler die malicious Version in den 18 Marketplace- bzw. 36 OpenVSX-Minuten gezogen.

Welche Nx-Console-Versionen sind betroffen?

Konkret nur Version 18.95.0 — sie ist die einzige malicious Version, die in der Marketplace publiziert wurde. Die Vorgänger- und Nachfolger-Versionen tragen den Schad-Payload nicht. Fix-Pflicht: Nx Console 18.100.0 oder höher, plus eine vollständige Persistence-Bereinigung und Credential-Rotation auf jeder Maschine, die die 18.95.0 im Marketplace-Fenster gezogen hat.

Was war der Eintritts-Pfad?

Die TanStack-npm-Welle vom 11.05.2026 (CVE-2026-45321, attribuiert auf TeamPCP / „Mini Shai-Hulud"-Kampagne), in der Pull-Request-Target-„Pwn Request"-Pattern, GitHub-Actions-Cache-Poisoning und OIDC-Token-Extraktion zur Veröffentlichung von 84 malicious Versionen quer durch 42 @tanstack/*-Pakete genutzt wurden. Aus dem TanStack-Token-Pool ist eine Narwhal-Entwickler-Identität weitergelaufen — der Angreifer hat sie genutzt, um Nx Console 18.95.0 zu signieren und in beide Marketplaces (Visual Studio Marketplace und Open VSX) zu publizieren.

Bin ich als Moselwal-Kunde betroffen?

Moselwal selbst betreibt keinen Nx-StackTYPO3-, Sylius- und unsere Plattform-Komponenten brauchen weder das Build-System noch die Console-Extension. Direkt betroffen sind Sie also nur, wenn auf Ihrer Plattform parallel zu uns ein Entwicklungs-Team mit Nx-Monorepo arbeitet (typisch in größeren JavaScript-/TypeScript-Frontend-Teams oder bei Sylius-Storefronts mit React-/Vue-Frontends) und dort Nx Console im VS Code, Cursor oder Windsurf installiert hat. Indirekt trifft uns die Klasse über die Claude-Code-Konfigurationsdateien — wer Claude Code im eigenen Werkbank-Workflow nutzt und im 18-Minuten-Fenster eine Nx Console im Auto-Update hatte, hat seine Claude-Code-Konfig potenziell mit ausgespielt. Die operative Frage ist daher dreistufig: welche Entwickler-Maschinen hatten Nx Console aktiv, welche waren im Fenster online, welche Credentials sind seit 18.05. noch nicht rotiert.

Sofort-Mitigation?

Nx Console auf 18.100.0 oder höher heben, Marketplace-Plugin-Status prüfen, dann auf jeder Maschine im 18.05.-Fenster eine vollständige Credential-Rotation: alle GitHub-Personal-Access-Tokens, alle npm-Auth-Tokens, alle AWS-Access-Keys, alle GCP-Service-Account-Keys, alle Vault-Tokens, alle SSH-Private-Keys (~/.ssh/-Tree komplett neu generieren), 1Password-CLI-Session-Logout und Re-Auth, Docker-Login mit neuen Credentials, plus Anthropic-API-Keys und Claude-Code-Konfigurationen rotieren. Plus ein Audit-Sweep der CI/CD-Logs auf ungewöhnliche Push-/Pull-/Release-Aktivität seit 18.05.

 

Was ist passiert

Die Disclosure-Kette ist dokumentiert. Am 18. Mai 2026 publizierte ein Angreifer eine malicious Version 18.95.0 der Nx-Console-Extension unter dem verifizierten Publisher-Handle nrwl — von 12:30 UTC bis 12:48 UTC in der Visual-Studio-Marketplace (18 Minuten) und von 12:33 UTC bis 13:09 UTC parallel auf Open VSX (36 Minuten). Bei einer Gesamt-Verbreitung der Extension von rund 2,2 Millionen Installationen kamen in dem Fenster nach Narwhal-Schätzung (Jeff Cross, Co-Founder von Narwhal Technologies) mehr als 6.000 Entwickler-Maschinen mit der malicious Version in Berührung; Microsoft und Nx zogen die Version anschließend zurück, Nx Console 18.100.0 erschien als sauberer Fix-Build.

Methodisch interessant ist die Trennung von Träger und Payload. Das Extension-Bundle selbst trug keinen Schadcode; bei der Workspace-Activation startete es einen einzelnen Shell-Aufruf, der ein verstecktes nx-next-Paket von einem orphaned Commit im offiziellen nrwl/nx-Repository nachlud — getarnt als routinemäßiger Nx-MCP-Setup-Task. Das Google-Threat-Intelligence-Team hat den nachgeladenen Stealer als „SANDCLOCK" benannt; er liest standardisierte Dateipfade (~/.aws/, ~/.gcp/, ~/.kube/, ~/.ssh/, ~/.npmrc, ~/.docker/, ~/.config/op/), in-memory-Caches gängiger CLI-Tools (1Password-CLI, Vault VAULT_TOKEN-Env), GitHub-Personal-Access-Tokens, OAuth-Tokens, npm-Auth-Tokens — und ausdrücklich auch Claude-Code-Konfigurationsdateien. Letzteres ist die Klasse, die diesen Vorfall für jedes Team mit Claude Code im Werkbank-Workflow relevant macht, auch wenn Nx selbst nicht im Stack ist.

Der Eintrittspfad ist die TanStack-npm-Kompromittierung vom 11. Mai (CVE-2026-45321), in der die Angreifergruppe TeamPCP via Pull-Request-Target-Pwn-Request, GitHub-Actions-Cache-Poisoning und OIDC-Token-Extraktion 84 malicious Versionen über 42 @tanstack/*-Pakete publizierte — Teil des „Mini Shai-Hulud"-Wurms, der von TeamPCP seit April/Mai 2026 cross-ecosystem operiert. Aus dem dort abgegriffenen Token-Pool ist eine Narwhal-Entwickler-Identität weitergelaufen, die der Angreifer für die Marketplace-Publikation nutzte. GitHub-CISO Alexis Wales hat den Vorfall am 21. Mai öffentlich bestätigt: rund 3.800 interne GitHub-Repositories sind über kompromittierte Mitarbeiter-Maschinen abgeflossen, OpenAI, Grafana Labs und Mistral AI sind als downstream-Opfer namentlich genannt.

Technische Einordnung

Strukturell ist CVE-2026-48027 keine klassische Code-Schwachstelle, sondern ein Supply-Chain-Kompromittierungs-Vorfall in der IDE-Extension-Distribution. Die malicious Version war nur 18 Minuten in der Visual-Studio-Marketplace und 36 Minuten auf Open VSX live, der Marketplace-Pull lag in dieser Zeit aber bei mehr als 6.000 Installationen — eine Geschwindigkeit, die zeigt, wie automatisch IDE-Extensions in modernen Dev-Workflows nachgezogen werden. Wer in seinem Setup VS Code oder Cursor mit aktiviertem Auto-Update der Extensions betreibt, hat keine bewusste Installation-Entscheidung zwischen 12:30 und 12:48 UTC am 18.05. getroffen — die Extension ist still nachgewachsen.

Die Payload-Klasse ist ein lokaler Credential-Harvester, von Google Threat Intelligence als SANDCLOCK benannt. Sie liest standardisierte Dateipfade (~/.aws/credentials, ~/.gcp/credentials, ~/.kube/config, ~/.ssh/, ~/.npmrc, ~/.docker/config.json, ~/.config/op/), greift auf in-memory-Caches gängiger CLI-Tools (1Password-CLI-Session-Tokens, Vault-Tokens via VAULT_TOKEN-Env oder ~/.vault-token), GitHub-Personal-Access- und OAuth-Tokens, npm-Auth-Tokens — und ausdrücklich auch Claude-Code-Konfigurationsdateien. Sie exfiltriert die gefundenen Credentials an einen Command-and-Control-Endpoint. Das ist Lehrbuch-Functionality eines „workstation credential vacuum", aber die Liste der harvesteten Quellen ist breit genug, dass eine getroffene Entwickler-Maschine den vollen Zugriff auf die Cloud-Identität und die AI-Tooling-Konfiguration ihres Inhabers preisgibt. Wenn diese Identität wiederum Repository-Pull-Rechte auf die internen Organisationsrepositories trägt — und das ist der Normalfall in einer modernen Entwickler-Maschine — dann ist der Sprung von „Credential gestohlen" auf „interne Repositories abgeflossen" trivial.

Die Verbindung zur TanStack-Welle ist die methodisch interessante Lage. TeamPCP arbeitet seit den ersten Mini-Shai-Hulud-Wellen im April und Mai 2026 mit einem cross-ecosystem-Pattern: ein in npm abgegriffener Token wird für die Veröffentlichung in einer benachbarten Distributionsplattform genutzt — PyPI, RubyGems, Visual Studio Marketplace, OpenVSX. Die Lieferketten-Topologie der Angreifer ist nicht mehr „ein npm-Maintainer-Account, eine Welle"; sie ist „eine Identitäts-Sammlung, viele Wellen". CVE-2026-48027 ist die erste IDE-Extension-Welle in dieser Serie, die in die CISA KEV gewandert ist, und sie wird wahrscheinlich nicht die letzte sein.

Bedeutung für den Mittelstand

Wir schreiben diesen Post nicht aus eigener Betroffenheit. Moselwal betreibt keinen Nx-Stack — TYPO3, Sylius und unsere Plattform-Komponenten brauchen weder das Build-System noch die Console-Extension, und unsere Entwickler-Maschinen haben Nx Console nie installiert. Bei einem Teil unserer Kundschaft sitzt Nx aber sehr wohl im Bild: in größeren JavaScript-/TypeScript-Monorepos (Enterprise-Frontend-Teams, Sylius-Storefronts mit React-/Vue-Frontends), in TypeScript-Plattform-Repos, die Nx als Workspace-Tool nutzen, ohne sich als „Monorepo" zu verstehen, und überall dort, wo ein Frontend-Team Nx Console in VS Code oder Cursor als Standard-Integration im Onboarding-Pack hat.

Die operative Pointe für uns selbst liegt eine Schicht weiter — bei den Claude-Code-Konfigurationsdateien, die SANDCLOCK explizit harvested. Wer in unserem Team oder in einem Kundenteam mit Claude Code arbeitet und im 18-Minuten-Marketplace- bzw. 36-Minuten-OpenVSX-Fenster eine Nx Console im Auto-Update mitgezogen hat (z. B. weil das gleiche Notebook für ein zweites Projekt mit Nx genutzt wird), hat seine ~/.claude/- und ~/.config/anthropic/-Inhalte potenziell mit ausgespielt. Bei Teams in der mitteleuropäischen Zeitzone war das 18.05. 14:30 bis 14:48 MESZ (Marketplace) bzw. 14:33 bis 15:09 MESZ (OpenVSX) — der frühe Nachmittag eines Montags. Die Reflex-Frage ist nicht „haben wir Nx", sondern „läuft auf einer unserer oder einer Kunden-Maschinen Claude Code parallel zu einer Nx-Workspace, und war diese Maschine im Fenster online".

Compliance-seitig wirkt der Vorfall auf den Standard-Achsen, aber mit einer neuen Schicht. NIS-2 Art. 21 verlangt Lieferketten-Disziplin, und die TanStack→Nx-Console-Kette ist Lieferkette in genau der erweiterten Definition, die NIS-2 explizit aufmacht — nicht nur die direkten Software-Dependencies, auch die Werkzeuge, mit denen sie gebaut werden. BSI APP.4.3 (Server-Webanwendungen) und APP.6 (Allgemeine Software) tragen den Befund auf der Application-Layer-Seite; für die Workstation-Seite ist DER.1 (Detektion) und CON.3 (Datensicherung) der relevante Baustein. DSGVO Art. 32 trifft jede Plattform, deren Repository-Inhalte personenbezogene Daten enthalten — Konfigurations-Dateien, Customer-Test-Datasets, Backup-Skripte; ein 3.800-Repository-Abfluss wie bei GitHub selbst ist ein meldepflichtiger Vorfall, sobald die Bestätigung der personenbezogenen Inhalte vorliegt. Für DORA-Pflichtige (Finanzdienstleister) und MaRisk-Häuser gehört IDE-Extensions als Lieferketten-Komponente jetzt ausdrücklich ins Drittparteien-Risiko-Inventar — und das ist eine Schicht, die in den meisten existierenden SBOM-Pipelines bisher nicht erfasst war.

Bedeutung für die technische Entwicklung

Methodisch zeichnet die TanStack→Nx-Console-Kette eine Spur, die wir in der Daily-News-Welle der letzten zwei Wochen mehrfach gesehen haben. Cross-ecosystem-Identitäts-Verkettungen werden zur Hauptklasse der Supply-Chain-Vorfälle. Es ist nicht mehr „ein Maintainer-Account wird übernommen, eine Welle läuft"; es ist „eine Token-Sammlung wird aufgebaut, mehrere Wellen quer durch npm, PyPI, RubyGems und IDE-Marketplaces laufen aus derselben Sammlung". Die Lehre für das Mittelstands-Tooling ist nicht „weniger Open-Source-Werkzeuge nutzen", sondern: SBOM-Pipelines müssen IDE-Extensions explizit erfassen, und Credential-Rotation-Disziplin auf Entwickler-Maschinen ist eine eigene Kategorie neben der Server-Credential-Rotation.

Architektonisch sitzt die zweite Lehre in der IDE-Extension-Auto-Update-Konfiguration. Visual Studio Code zieht Extensions per Default automatisch nach, sobald eine neue Version in der Marketplace erscheint; das ist Convenience für den Entwickler, aber eine Achillesferse in einer Welt, in der eine 18-Minuten-Marketplace-Lücke mehr als 6.000 Installationen einsammelt. Für sicherheitsorientierte Teams ist der Reflex, Extensions-Auto-Update zu deaktivieren und Updates nur in einer kuratierten Wartungsrunde nachzuziehen, ab heute kein paranoides Setup mehr, sondern eine vernünftige Standard-Disziplin. Im Unternehmenskontext gibt es zusätzlich die Möglichkeit, Extension-Allowlists per Group-Policy oder MDM zu erzwingen — das ist Mehraufwand, aber für regulierte Branchen ab DORA und NIS-2 der nächstlogische Schritt.

Konkrete Handlungsempfehlung

In dieser Reihenfolge. Erstens, prüfen Sie heute, ob auf Ihren Entwickler-Maschinen Nx Console läuft — bei Moselwal selbst ist das nicht der Fall (TYPO3-/Sylius-Stack), bei einem Teil unserer Kundschaft mit JavaScript-/TypeScript-Frontend-Teams sehr wohl: code --list-extensions | grep -i nrwl.angular-console (und der entsprechende Cursor-/Windsurf-Aufruf) liefert den Überblick. Zweitens, falls Nx Console installiert ist: Version auf 18.100.0 oder höher heben, alle Persistence-Artefakte (Marketplace-Cache, Extension-Storage) der 18.95.0 entfernen, gleiches für nx-next-Artefakte unter ~/.npm/_npx/. Drittens, für jede Maschine, die im Fenster 18.05. 12:30–13:09 UTC mit Marketplace- oder OpenVSX-Update-Aktivität online war: vollständige Credential-Rotation — GitHub-PATs, npm-Tokens, AWS-Keys, GCP-Service-Account-Keys, Vault-Tokens, SSH-Schlüssel-Tree, 1Password-Re-Auth, Docker-Login, plus Anthropic-API-Keys und Claude-Code-Konfigurationen, weil SANDCLOCK diese Klasse explizit harvested. Viertens, Audit-Sweep der CI/CD- und Git-Logs auf ungewöhnliche Push-/Release-Aktivität seit 18.05.; speziell auf Force-Pushes, neue Tags und unangekündigte Releases. Fünftens, deaktivieren Sie für sicherheitsrelevante Entwickler-Profile den Extension-Auto-Update in VS Code (extensions.autoUpdate: false im Settings-JSON) und führen Sie Extension-Updates in einer kuratierten wöchentlichen Wartungsrunde nach. Sechstens, dokumentieren Sie die IDE-Extensions in Ihrem SBOM-Prozess — wenn Sie keinen haben, ist das der Anlass, einen aufzusetzen. Wenn diese Schritte aus eigener Kraft nicht laufen, sprechen Sie mit uns: Moselwal richtet Entwickler-Workstation-Stacks und SBOM-Pipelines, in denen IDE-Extensions als eigene Lieferketten-Klasse geführt werden.

Dieser Beitrag spiegelt unsere technische und strategische Einschätzung. Er ersetzt keine Rechtsberatung und keine Datenschutz-Folgenabschätzung.

Quellen

Über den Autor

Foto von Kai Ole Hartwig.

Kai Ole Hartwig

Founder · Moselwal Digitalagentur · OnlyOle

Programmiert seit 2002 – autodidaktisch gelernt, 2012 mit KO-Web selbständig gemacht, heute Moselwal. Über 100 Projekte, Fokus auf Security, Performance, Automatisierung und Qualität.