← Zurück zu allen Beiträgen
Veröffentlicht am · von Renaud Deraison

Das Update brachte einen Schlüssel mit

Elf Stunden lang lieferte Cursors Extension-Marketplace am 29. Oktober eine trojanisierte Claude-Code-Extension unter Anthropics eigenem Publisher-Namen aus. Beim Laden fügte sie den SSH-Schlüssel eines Angreifers hinzu, installierte einen LaunchAgent und versuchte, einen Reverse-Tunnel zu öffnen, auf den Rechnern von bis zu 5.000 Entwicklern. In Bromure Agentic Coding kommt der Agent nicht aus einem Editor-Marketplace, und eine solche Payload läuft in einer VM, die niemand erreichen kann: Die Egress-Firewall verweigert ihren Tunnel, und das Zurückspulen des Home-Verzeichnisses entfernt ihre Persistenz.

Niemand musste einen Chat öffnen oder einen Tool-Aufruf genehmigen. Der Editor lud die Extension, und 66 Zeilen JavaScript liefen als der Entwickler, noch bevor der Code von Claude Code selbst lief.

Am 29. Oktober lieferte Cursors Extension-Marketplace zwischen etwa 2:27 und 13:35 Uhr pazifischer Zeit eine trojanisierte Version von Anthropics Claude-Code-Extension aus. Cursors Sicherheitshinweis nennt die Versionen 2.1.312 und 2.1.313 von anthropic.claude-code, veröffentlicht unter Anthropics Publisher-Identität, und hält fest, dass Anthropic sie nicht gebaut hat. BleepingComputer berichtet, dass bis zu 5.000 Entwickler betroffen waren, und The Hacker News weist darauf hin, dass jeder mit aktiviertem Auto-Update sie bekommen konnte, ohne etwas zu tun.

Forscher von Phorion und OpenSourceMalware veröffentlichten am 30. Oktober ihre Analysen. Cursor zog die Extension zurück, nahm seinen Marketplace für ein Audit und den Austausch der Schlüssel vom Netz und ließ den Server des Angreifers abschalten. Wie das Build unter Anthropics Namen veröffentlicht werden konnte, hat bisher niemand gesagt.

Was die 66 Zeilen taten

Der Angreifer ließ den Code von Claude Code unangetastet und setzte einen 66-zeiligen Loader davor, an den Anfang von extension.js. OpenSourceMalware beschreibt das Muster: „place a compact backdoor before a large legitimate bundle, suppress errors, and let the expected application continue.“ Der Loader lief, sobald der Editor die Extension lud und ihre Webview öffnete. Der Entwickler musste kein Gespräch beginnen. Danach lud die echte Extension und funktionierte.

In der Zwischenzeit tat der Loader Folgendes:

  1. Er machte Inventur. Hostname, Benutzername, Betriebssystem, Home- und Arbeitsverzeichnis, die globale Git-E-Mail, die öffentliche IP und die Namen von bis zu 40 Umgebungsvariablen, die KEY, TOKEN, SECRET, PASS, AWS oder GCP enthielten. All das schickte er als JSON über unverschlüsseltes HTTP an 134.209.82.225:8099/beacon.
  2. Er baute eine Tür ein. Er hängte einen Ed25519-Schlüssel mit dem Kommentar svc-telemetry an ~/.ssh/authorized_keys an.
  3. Er versuchte, sie zu öffnen. Unter macOS führte er sudo -n systemsetup -setremotelogin on aus, unter Linux versuchte er sshd zu starten, und unter Windows installierte er OpenSSH Server.
  4. Er rief nach Hause. Er schrieb einen privaten Schlüssel in eine temporäre Datei und verband sich mit [email protected] per -N -R '*:0:localhost:22', einem Reverse-Tunnel, der einen Port auf dem Server des Angreifers zurück auf den SSH-Port des Entwicklers weiterleitet. Alle 60 Sekunden baute er die Verbindung neu auf.
  5. Er richtete sich dauerhaft ein. Ein Benutzer-LaunchAgent namens com.apple.sysmond unter macOS, ein Crontab-Eintrag @reboot unter Linux und eine geplante Aufgabe namens SysMon unter Windows.

Laut BleepingComputer verhinderten Programmierfehler bei vielen Opfern, dass SSH eingeschaltet wurde. Schlüssel, Persistenz und Beacon landeten trotzdem auch auf diesen Rechnern. Cursor rät, nach dem Schlüssel svc-telemetry zu suchen, die Persistenz zu entfernen, eine Neuinstallation des Rechners zu erwägen, weil das Deinstallieren der Extension womöglich nicht reicht, und alle Zugangsdaten, die der Rechner erreichen konnte, auszutauschen, „using a trusted system.“

Vom Extension-Update zum Schlüssel eines Angreifers auf dem RechnerEditor lädt sie2.1.312 / 2.1.313,Name Anthropic,Auto-Update1 · InventurHost, User, Git-Mail,öffentl. IP, Namender KEY/TOKEN-Vars2 · Schlüsselsvc-telemetry anauthorized_keys,SSH eingeschaltet3 · Persistenzcom.apple.sysmond,crontab @reboot,Aufgabe SysMon4 · Nach HauseReverse-Tunnelauf :22, Beaconauf :8099Ein fremder Schlüssel und ein Weg zurück hinein, im Konto des Entwicklersneben ~/.ssh, ~/.aws, dem gh-Login und jedem Repository; Cursor rät: Rechner neu aufsetzen
Was die trojanisierte Claude-Code-Extension beim Laden tat, laut Cursors Hinweis und der Analyse von OpenSourceMalware. Ein 66-zeiliger Loader vor der echten Extension machte Inventur, fügte den SSH-Schlüssel eines Angreifers hinzu, installierte Persistenz und öffnete einen Reverse-Tunnel und einen HTTP-Beacon zu 134.209.82.225.

Der vertrauenswürdigste Code auf dem Rechner

Eine Editor-Extension läuft mit dem vollen Konto des Entwicklers. Sie kann jede Datei im Home-Verzeichnis lesen, Prozesse starten und einen LaunchAgent schreiben, der den Editor überlebt. Marketplaces spielen Updates ein, ohne zu fragen, und der Publisher-Name auf diesem war der von Anthropic. Ein vorsichtiger Entwickler, der vor der Installation den Publisher geprüft hatte, bekam die Hintertür trotzdem: Sie kam als Update einer Extension, die er Wochen zuvor installiert hatte.

Coding-Agenten erhöhen den Einsatz. Die Extension, die den Agenten beherbergt, ist die, der Entwickler am meisten erlauben: Sie liest das ganze Repository, führt Befehle aus und steckt in einem Prozess mit den API-Schlüsseln und Cloud-Tokens der Umgebung. Dieser Loader nahm die Namen dieser Variablen mit. Ihre Werte zu lesen, kostet dieselben paar Zeilen.

Derselbe Morgen in Bromure Agentic Coding

Bromure Agentic Coding führt Claude Code, Codex, Grok, Kimi und omp in Ubuntu-VMs auf Ihrem Mac aus. Jede Maschine ist eine eigene VM, und der Agent, seine Repositories, seine Paketinstallationen und seine Befehle leben alle darin. Den Chat und die Terminals, in die Sie tippen, zeichnet die App auf Ihrem Mac. Die echten Zugangsdaten, der Proxy, durch den der Verkehr der VM läuft, und das Protokoll dessen, was passiert ist, bleiben ebenfalls auf dem Mac.

Der Agent kommt nicht aus einem Editor-Marketplace

Im Pfad liegt kein Extension-Marketplace: Bromure zeichnet sein eigenes Chatfenster auf dem Mac. Claude Code wird in Ihre Kopie von Bromures Basis-Image durch einen Setup-Schritt installiert, der in einem Katalog steht, der mit demselben Schlüssel signiert ist wie Bromures App-Updates. Dieser Schritt installiert @anthropic-ai/claude-code von npm, umhüllt vom Supply-Chain-Scanner von Socket.dev. OpenSourceMalware führt das npm-Paket unter den Distributionen, die nicht betroffen waren.

Alles, was der Agent danach installiert, geht durch den Proxy auf dem Mac, und der Proxy wendet die Supply-Chain-Richtlinie der Maschine an. Das Mindestalter ist ab Werk eingeschaltet, mit zwei Tagen: Versionen auf npm, PyPI, Cargo, RubyGems und Packagist, die jünger sind, werden aus der Auflistung der Registry entfernt, sodass latest auf das neueste Release auflöst, das seit zwei Tagen öffentlich ist. Cursors bösartiges Build war elf Stunden online. Ein gekapertes Release auf npm mit derselben Lebensdauer taucht in einer Bromure-Maschine nie auf. Diesen Fall haben wir anhand von LiteLLMs vergiftetem PyPI-Release in Das Release war zwei Stunden alt durchgespielt.

Der Schlüssel öffnet eine Tür, die niemand erreicht

Angenommen, eine Payload wie diese gelangt trotzdem in eine Maschine, über ein Repository, das der Agent klont, oder ein Tool, das er ausführt. Sie läuft in Ubuntu, als Benutzer der Maschine. Sie bekommt weder Ihr macOS-Konto noch Ihren Schlüsselbund noch das ~/.ssh Ihres Macs.

Ihr Schlüssel svc-telemetry landet in der eigenen authorized_keys der VM. Die Maschinen hängen an einem privaten Netz innerhalb der App: Ihr Mac erreicht sie, Ihr physisches LAN nicht, und von außen kann sich nichts verbinden, solange Sie nicht selbst einen Dienst veröffentlichen. Der einzige Weg hinein war der Reverse-Tunnel.

Der Tunnel geht nie auf

Der Tunnel braucht eine ausgehende SSH-Verbindung zu 134.209.82.225, der Beacon unverschlüsseltes HTTP zu Port 8099 an derselben Adresse. Jede Verbindung der VM läuft über den Mac, wo die Firewall Outbound connections der Maschine greift. Ihre Regeln passen auf Host, IP-Bereich, Protokoll und Port, und mit Unmatched traffic auf Deny kommen nur die Hosts durch, die Sie aufgeführt haben. Eine DigitalOcean-IP auf Port 22 steht auf niemandes Liste. Die Firewall verweigert den Tunnel, jeden Neuversuch im 60-Sekunden-Takt und den Beacon.

Jede Ablehnung landet in der Security Timeline auf Ihrem Mac, mit Host, Port, Protokoll und Urteil. Ein Deny zur selben IP jede Minute ist kaum zu übersehen, und Sie sehen es, während der Angreifer noch auf eine Verbindung wartet.

Die Inventur ist nichts wert

Die Liste der Variablennamen hätte in einer Bromure-Maschine einiges gefunden: ANTHROPIC_API_KEY, ein GitHub-Token, AWS-Einstellungen. Jeder Wert ist ein Platzhalter. Die echten Zugangsdaten liegen verschlüsselt auf dem Mac, und der Proxy tauscht einen Platzhalter nur bei Anfragen an den Host, zu dem er gehört, gegen seinen echten Wert aus. Private SSH-Schlüssel sind überhaupt nicht in der VM. SSH_AUTH_SOCK ist eine Brücke zum Mac, die Signaturen zurückgibt, und der ssh-agent Ihres Macs wird nie freigegeben. Ein Loader, der auch die Werte gelesen hätte, hätte Zeichenketten bekommen, die kein Server akzeptiert. Hätte er einen davon an seinen eigenen Server geschickt, hätte der Proxy die Anfrage blockiert, die VM pausiert und This environment may have been compromised angezeigt, mit dem Namen der Zugangsdaten und dem Ziel.

Das Aufräumen dauert eine Minute

Cursor sagt betroffenen Entwicklern, den Schlüssel und die Persistenz zu entfernen, eine Neuinstallation des Rechners zu erwägen und die Zugangsdaten von einem vertrauenswürdigen System aus auszutauschen. In Bromure besteht die Neuinstallation aus zwei Menüpunkten. Bromure legt bei jedem Start einen Copy-on-Write-Checkpoint des Home-Verzeichnisses jeder Maschine an. Rewind home… setzt /home/ubuntu auf einen Start vor dem Lauf der Payload zurück und nimmt den zusätzlichen Schlüssel und den Launcher ~/.config/.smt mit. Reset disk klont die Systemplatte neu aus dem Basis-Image und nimmt die Crontab mit. Einstellungen, Zugangsdaten und SSH-Schlüssel der Maschine überstehen beides.

Das vertrauenswürdige System, das Cursor verlangt, ist der Mac, der die Payload nie ausgeführt hat. Auszutauschen gibt es nichts, weil die VM nie echte Zugangsdaten hatte.

Editor auf dem Laptop: Der Loader läuft als SieDie Extension aktualisiert sich und lädtin Ihrem macOS-Konto, neben Ihren echten SchlüsselnSchlüssel und Persistenz auf dem Macsvc-telemetry in ~/.ssh/authorized_keys,LaunchAgent com.apple.sysmondDirekt zu 134.209.82.225Reverse-Tunnel auf :22 alle 60 s, Beacon auf :8099;Abhilfe: neu aufsetzen, alles austauschenBromure: Die Payload läuft in einer VMMaschinen-VM (Ubuntu)Schlüssel in VM-eigener authorized_keys; nur Platzhalterjede Verbindung über den MacEgress-Firewall auf Ihrem Mac134.209.82.225:22 Tunnel: deny134.209.82.225:8099 Beacon: denyjeder Versuch in der Security Timelinedanach, Maschine ausRewind home… und Reset diskSchlüssel, Launcher, Crontab weg; Einstellungen bleiben
Dieselbe Payload in einer Bromure-Maschine. Sie läuft in der Ubuntu-VM der Maschine, fügt ihren Schlüssel der eigenen authorized_keys der VM hinzu, in einem Netz, das von außen niemand erreicht, und findet nur Platzhalter-Zugangsdaten. Ihr Tunnel und ihr Beacon laufen über den Mac, wo die Egress-Firewall sie verweigert und die Security Timeline jeden Versuch festhält. Rewind home und Reset disk entfernen die Persistenz; der Mac und seine echten Zugangsdaten bleiben unberührt.

Geben Sie der riskanten Arbeit eine eigene Maschine

Zugangsdaten und Firewall-Regeln werden pro Maschine festgelegt, und Maschinen sind schnell angelegt. Eine Maschine, die neue Tools, Plugins und Starter-Kits ausprobiert, kann ohne Produktionszugangsdaten auskommen und eine Firewall haben, die alles außer ihren Paket-Registries verweigert. Die Maschine, die deployt, behält ihre Zugangsdaten, mit einer Freigabe vor jeder Verwendung. Für ein einmaliges Experiment legt bromure-cli vm run --rm eine Maschine an, die beim Stoppen gelöscht wird.

Kein Marketplace im Pfad

Der Chat ist Teil der App. Claude Code kommt aus Anthropics npm-Paket, über einen signierten Setup-Schritt, gescannt von Socket.dev.

Zwei Tage vor allem Neuen

Das Mindestalter blendet Paket-Releases aus, die jünger als zwei Tage sind. Eine gekaperte Version, die elf Stunden lebt, wird nie aufgelöst.

Eine Tür, die niemand erreicht

Ein eingeschleuster Schlüssel landet in der eigenen authorized_keys der VM, in einem privaten Netz, in das weder Ihr LAN noch das Internet hineinkommt.

Unbekannte Hosts verweigern

Mit Unmatched traffic auf Deny werden Reverse-Tunnel und Beacon abgewiesen, und jeder Versuch wird auf dem Mac festgehalten.

Platzhalter in der VM

Jeder API-Schlüssel und jedes Token in der VM ist ein Platzhalter, und private SSH-Schlüssel kommen nie hinein. Die Inventur ist nichts wert.

Zurückspulen statt neu aufsetzen

Rewind home und Reset disk entfernen die Dateien und die Persistenz der Payload. Einstellungen, Zugangsdaten und Schlüssel bleiben.

Das Werkzeug, das den Agenten ausführt, gehört zur Angriffsfläche

Cursor und Anthropic haben nicht gesagt, wie das Build unter Anthropics Namen hinausging. Für Ihren eigenen Rechner klärt der Vorfall einen Punkt. Die Software, die Ihren Coding-Agenten beherbergt, läuft mit Ihrem Konto und aktualisiert sich selbst, und ein vertrauenswürdiger Publisher-Name auf dem Update beweist nichts über seinen Inhalt.

In Bromure Agentic Coding laufen Ihr Agent und alles, was er anfasst, in einer VM auf Ihrem Mac. Diese VM hält Platzhalter, erreicht nur die Hosts, die Sie erlauben, und lässt sich auf einen Start zurücksetzen, bevor etwas schiefging. Die echten Schlüssel verlassen den Mac nie.

Zu Infostealern, die inzwischen Tokens und Verläufe von Coding-Agenten einsammeln, lesen Sie Sie haben Ihren Agenten auf die Liste gesetzt. Zu einer Kompromittierung, die auf dem Laptop eines Entwicklers begann und bei 6,3 Milliarden Dollar endete, lesen Sie Der Laptop war das Einfallstor.