Backdoor in der Claude-Code-Extension im Cursor-Marketplace: was ausgeführt wurde, was nach der Deinstallation bleibt und warum die Versionsnummer nicht verrät, welchen Build du bekommen hast
Die manipulierten Builds trugen Anthropics Publisher-Namen und in einem Fall eine Version, die Anthropic wirklich veröffentlicht hat. Beides sagt nichts darüber, wer die Bytes gebaut hat, und was sie angelegt haben, bleibt auf dem Rechner, wenn die Extension längst weg ist.
Inhalt
Am 29. Oktober hat Cursors Extension-Marketplace rund elf Stunden lang manipulierte Builds von Anthropic.claude-code ausgeliefert, der Claude-Code-Extension, Versionen 2.1.312 und 2.1.313, für macOS und Windows. Cursor nennt das Fenster 02:27 bis 13:35 PT, also 09:27 bis 20:35 UTC. Cursor hat die Builds entfernt, den Marketplace abgeschaltet, seine Schlüssel rotiert, mit dem Hoster den Server des Angreifers vom Netz genommen und den Marketplace wieder hochgefahren.
Was hat die Claude-Code-Extension mit Backdoor getan?
Sie hat versucht, sich einen Weg zurück auf den Rechner zu öffnen, sobald der Editor startet, und was sie dabei anlegen konnte, überlebt die Extension. Ein Gespräch mit Claude war dafür nicht nötig. Beide Analysen beschreiben einen Loader, der extension.js vorangestellt wurde; OpenSourceMalware zählt etwa 66 Zeilen. Das offizielle Manifest von 2.1.312 aktiviert die Extension bei onStartupFinished, der Loader läuft also jedes Mal, wenn der Editor fertig gestartet ist.
Laut Phorion und OpenSourceMalware hängt er einen Angreifer-Key mit dem Kommentar svc-telemetry an ~/.ssh/authorized_keys an, versucht den SSH-Server einzuschalten, öffnet einen Reverse-SSH-Tunnel zu 134.209.82.225 und installiert einen Launcher, der den Tunnel alle 60 Sekunden neu aufbaut. Außerdem schickt er einmalig einen Bericht an den Server des Angreifers und an einen lokalen Port: Hostname, Benutzername, Betriebssystem, Home- und Arbeitsverzeichnis, deine globale Git-E-Mail, deine öffentliche IP und die Namen (nicht die Werte) von bis zu 40 Umgebungsvariablen, die KEY, TOKEN, SECRET, PASS, AWS oder GCP enthalten. Der Code hat auch einen Linux-Zweig, obwohl Cursor nur Builds für macOS und Windows auflistet.
Wie viel davon tatsächlich griff, hängt vom Rechner ab. Laut Cursor scheitert das Einschalten von SSH, solange der Editor nicht mit Administratorrechten gestartet wurde, und Phorion hat einen Bug gefunden, der den macOS-Schritt oft ganz überspringt: Ohne Root gibt die Statusabfrage einen Fehler aus, den der Code nicht erkennt. Lauscht nichts auf localhost:22, führt der Tunnel ins Leere. Key-Datei, Launcher und Bericht brauchen keine Adminrechte, das konnte also auch dort klappen, wo SSH ausgeschaltet blieb.
Ist die offizielle Claude-Code-Extension betroffen?
Weder Anthropic noch Cursor hat Hinweise darauf gefunden, und niemand hat gesagt, wie die manipulierten Builds in den Marketplace kamen. Cursor schreibt, es gebe „no evidence that other versions of the extension or the official distribution are affected“. Cursor verortet die Kompromittierung im eigenen Marketplace, nicht bei Open VSX, und OpenSourceMalware wiederholt das. Schlagzeilen, die Open VSX nennen, liegen also falsch. Für Anthropic zitiert The Register Felix Rieseberg, Member of Technical Staff und kein Pressesprecher, mit einem Post auf X:
"it wasn't a compromise of Anthropic's systems or employee laptops."
"A malicious actor used access to Cursor's marketplace to publish a
tampered copy of the Claude Code extension"Seitdem kursiert eine Zahl von bis zu 5.000 betroffenen Entwicklern. The Register schreibt sie ungenannten Branchenleuten zu, bestätigt hat sie niemand.
Ich habe den offiziellen Build 2.1.312 für darwin-arm64 von Open VSX geladen. Das VSIX passte zu seinem veröffentlichten SHA-256, und seine extension.js enthält weder svc-telemetry noch die Adresse des Angreifers. Das passt dazu, dass der offizielle Kanal sauber ist. Über das manipulierte 2.1.312 sagt es nichts, davon gibt es keine Kopie mehr.
Verrät die Versionsnummer der Claude-Code-Extension einen manipulierten Build?
Nein, in keine der beiden Richtungen. 2.1.312 ist ein echtes Release, am 27. Oktober auf GitHub veröffentlicht, die manipulierte Kopie hat also eine Nummer benutzt, die du erwarten würdest. 2.1.313 hat kein GitHub-Release und keinen Eintrag bei Open VSX. Das wirkt wie ein verräterisches Indiz, bis man merkt, dass Stand 31. Oktober auch 2.1.315 an beiden Stellen fehlt. Eine fehlende Nummer allein sagt nichts.
Eine Registry-Signatur auch nicht. Open VSX signiert die Pakete, die es ausliefert, und der Public Key, den es für Anthropics Extension angibt, ist derselbe wie bei Red Hat und rust-lang. Meine Lesart: Eine gültige Signatur dort zeigt, dass die Registry die Datei signiert hat, nicht, dass Anthropic sie gebaut hat.
Entscheidend ist der Inhalt. Vergleiche deine installierte extension.js mit derselben Version für dieselbe Plattform von Open VSX. Ein gleicher Hash heißt, diese Datei ist die offizielle; über das, was der Loader schon angelegt hat, sagt das nichts. Ein abweichender Hash ist ein Grund, genauer hinzusehen, kein Urteil, denn ich habe nicht geprüft, ob Cursor im Normalfall byte-identische Dateien ausliefert.
Was prüfen, wenn sich Claude Code für Cursor am 29. Oktober aktualisiert hat
Die Deinstallation der Extension entfernt nichts davon. Pfade und Namen von Cursor, Phorion und OpenSourceMalware:
~/.ssh/authorized_keys line ending in svc-telemetry
(Windows admins: also C:\ProgramData\ssh\administrators_authorized_keys)
~/.config/.smt, ~/.config/.smtk macOS, Linux
~/Library/LaunchAgents/com.apple.sysmond.plist macOS (not an Apple component)
crontab @reboot entry running ~/.config/.smt Linux
$TMPDIR/.stk_* (macOS), /tmp/.stk_* (Linux) tunnel key
%USERPROFILE%\.config\smt.cmd, smtk, %TEMP%\.stk_* Windows
scheduled task SysMon; Startup folder sysmon.cmd Windows
ssh/autossh with -R *:0:localhost:22 to 134.209.82.225Findest du etwas davon, halte dich an die Reihenfolge, die beide Advisories nahelegen: Rechner vom Netz nehmen, Beweise sichern, dann aufräumen. Cursor stellt Cleanup-Skripte für macOS und Windows bereit. Rotiere die Zugangsdaten und Sessions, die dieser Rechner erreichen konnte, von einem anderen Rechner aus, egal ob SSH je an war. Dann such im Log des SSH-Servers nach einem Login von 127.0.0.1 oder ::1 mit dem eingeschleusten Key, dessen Fingerprint Phorion angibt:
SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htkEin Treffer heißt, jemand hat die Tür benutzt. Ein fehlender Treffer entlastet den Rechner nicht, deshalb sprechen Cursor und OpenSourceMalware beide davon, ihn neu aufzusetzen.
Was der Vorfall im Cursor-Marketplace ändert
Ich habe argumentiert, dass das Tool, das du installierst, deine Reichweite hat und dass man diese Reichweite einmal freigibt und nie wieder prüft. Diese Woche zeigt, was „einmal“ abdeckt. Eine Extension, die sich selbst aktualisiert, behält die Freigabe, während sich der Code darunter ändert, nach einem Zeitplan, den der Marketplace bestimmt.
Wer in den Update-Kanal schreiben kann, erbt also die Reichweite, die du der Extension gegeben hast. Hier waren das zwei Parteien: Anthropic, dessen Namen du geprüft hast, und Cursors Marketplace, den dir bei der Installation überhaupt nichts als Partei ausweist. Publisher-Name und Version zeigten auf die erste. Der Code kam von der zweiten. Jede Prüfung, die du bei der Installation bekommst, bürgt für den Kanal; keine sagt, wer die Bytes gebaut hat. Und die Deinstallation entzieht die Freigabe nur für die Zukunft. Key und Launcher wurden mit deinen Rechten geschrieben, und diese Rechte behalten sie.
Einen Skill zu lesen beweist nicht, welche Datei läuft, und ein Marketplace-Eintrag beweist ungefähr genauso wenig. Wenn du Claude Code in Cursor nutzt, kommen die CLI, die du per npm oder mit dem nativen Installer installiert hast, und die Extension aus Cursors Marketplace über verschiedene Lieferketten, und nur die zweite war diese Woche kompromittiert.
01 / Diskussion
Hier gibt es keine Kommentarspalte. Diskussionen laufen auf X.
02 / Weitere Artikel
Googles SLEEP-Framework vs. Speicherdateien für Agenten: Gewichte streichen die Kontextsteuer und mit ihr die Adresse
Speicher in die Gewichte zu konsolidieren ist eine echte Antwort auf die Kosten, bei jedem Aufruf Notizen neu zu lesen. Es nimmt aber auch das weg, was jede Operator-Aktion am Speicher braucht: etwas, auf das man zeigen kann. In SLEEP ist nicht einmal die letzte Nacht ein Block, den man herausnehmen kann. Die Einheit für einen Rollback ist also ein Checkpoint, und die Kosten des Vergessens wachsen mit dem Alter dessen, was man vergisst. Gewichtsspeicher lässt sich nur als Cache sicher betreiben, der aus einem aufbewahrten Protokoll neu gebaut wird.
KI-Training per robots.txt ablehnen mit __usage_ai-training: Googles Zuordnung trifft künftig auch das Grounding in Gemini
Der gemeinsame Token ist als Trainingspräferenz definiert und als nichts anderes. Google will ein Opt-out als Disallow für Google-Extended lesen, und Google-Extended entscheidet auch über das Grounding in den Gemini Apps. Der einzige Anbieter, der bisher gesagt hat, wie er den Token liest, wird ihn also weiter als nur fürs Training lesen. Was jeder der drei Mechanismen steuert, wie sie zusammenwirken und eine Datei pro Absicht.
OpenAI API-Guthaben für ChatGPT Pro vs. Claude Max API-Guthaben: gleiche Beträge, anderer Zaun um den Coding-Agenten
Ein headless Claude-Skript darf Anthropics Guthaben verbrauchen, ein Codex-Lauf mit API-Key darf das von OpenAI nicht. Außerdem schreibt jedes Lab eine Abrechnungsregel auf, die beim anderen fehlt, und genau diese Regeln entscheiden, welches Guthaben zu welcher Aufgabe passt.