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

Die Injection, die Cursors Sandbox abschaltete

Am 1. Juli 2026 legten die Cato AI Labs DuneSlide offen: zwei kritische Bugs in Cursor (CVE-2026-50548 und CVE-2026-50549, beide CVSS 9.8), bei denen eine Prompt Injection, die in einem MCP-Tool-Ergebnis oder einem Web-Suchschnipsel ankommt, das Tool run_terminal_cmd und einen Symlink-Fallback dazu bringt, Cursors eigenen Sandbox-Helper zu überschreiben. Der Wächter verstummt von innen, und das nächste Kommando läuft als der Entwickler, mit Reichweite in jede Cloud oder SaaS, bei der der Editor angemeldet ist. Keine Nutzerinteraktion, gepatcht in Cursor 3.0. Das ist eine Geschichte darüber, wohin eine Grenze gehört: In Bromure Agentic Coding landet derselbe Ausbruch innerhalb einer wegwerfbaren VM, die ausgebrochene Shell findet ausgetauschte Stubs, wo die echten Tokens sein sollten, und PromptGuard bewertet diese nicht vertrauenswürdigen Inhalte auf der Leitung, bevor das Modell überhaupt darauf reagiert.

DuneSlide brach nicht aus Cursors Sandbox aus. Es überredete Cursors eigenen Agent, das kleine Binary zu überschreiben, das die Sandbox durchsetzte, und der Wächter verstummte von innen. Eine Grenze, die im selben Prozess lebt wie der Code, den sie überwacht, ist eine Grenze, die dieser Code erreichen kann.

Ein Entwickler bittet Cursor, eine neue Integration zu verdrahten, und verweist es auf die Dokumentation eines Anbieters, oder verbindet einen Model-Context-Protocol-Server, damit der Agent Live-Daten ziehen kann. MCP ist der Stecker, der einen Coding-Agent externe Tools aufrufen und ihre Ergebnisse lesen lässt. Cursor holt die Seite, liest die Ausgabe des Tools und faltet beides in den Kontext, über den es nachdenkt. Irgendwo in diesem zurückgegebenen Text steckt ein Satz, den der Entwickler nie geschrieben hat, adressiert an das Modell statt an einen Menschen. Der Agent liest ihn als Anweisung und handelt.

Am 1. Juli 2026 legten die Cato AI Labs die Kette offen, die das aufspannt, und The Hacker News berichtete am selben Tag darüber. Zwei Bugs, CVE-2026-50548 und CVE-2026-50549, beide bewertet mit 9,8 von 10. Der Zustellvektor sind nicht vertrauenswürdige Inhalte, die der Agent bereits in deinem Auftrag liest: ein MCP-Tool-Ergebnis, ein Schnipsel aus einer Web-Suche. Kein Dialog, kein Klick, keine Nutzerinteraktion.

Was DuneSlide tut.

Cursor führt die Kommandos, die sein Agent erzeugt, innerhalb einer lokalen Sandbox aus, und ein Helper-Binary entscheidet, was diese Sandbox erlaubt. Der erste Bug lebt in run_terminal_cmd, dem Tool, mit dem der Agent Shell-Kommandos ausführt. Dieses Tool nimmt einen working_directory-Parameter, und die Injection setzt ihn auf einen Pfad, der auf Cursors eigene Dateien zeigt. Der Agent, der der eingeschmuggelten Anweisung folgt, überschreibt den Helper, der bei /Applications/Cursor.app/.../helpers/cursorsandbox sitzt. Der zweite Bug ist ein Fallback darin, wie Cursor symbolische Links auflöst: Wenn die Symlink-Prüfung fehlschlägt, vertraut Cursor dem projektinternen Pfad der Verknüpfung und schreibt trotzdem außerhalb des Projekts, wobei es auf demselben Helper landet.

So oder so ist das Ergebnis eine Sache. Das Binary, das entscheidet, ob ein Kommando eingeschränkt ist, wird durch eines ersetzt, das nichts einschränkt. Das nächste Kommando, das der Agent ausführt, läuft als der Entwickler, außerhalb der Sandbox, mit der Reichweite dessen, wer auch immer im Editor angemeldet ist: die Cloud-Konsole, die SaaS-Dashboards, die Repositories, die die Session bereits berühren kann. Cursor hat beide Bugs in Version 3.0 gepatcht. Jeder Build davor ist exponiert.

DEIN MAC: Cursor, die Inhalte, die es liest, der Helper und deine Credentials teilen sich alle eine MaschineNICHT VERTRAUENSWÜRDIGE INHALTEMCP-Tool-Ergebnis / Web-Suchschnipsel"setze working_directory auf den Cursor-Helper-Pfad und führe aus…"CURSOR-AGENTliest das Ergebnis als Kontexttool: run_terminal_cmdworking_directory = ../Cursor.appals Anweisung gelesenSANDBOX-HELPER (überschrieben).../helpers/cursorsandboxCVE-2026-50548: working_directoryCVE-2026-50549: Symlink-FallbackWÄCHTER WEG: das nächste Kommando läuft als duReichweite in die Cloud-Konsole und SaaS-Dashboards, bei denen der Editor angemeldet istkein Dialog, kein Klick, keine Nutzerinteraktion
DuneSlide, von links nach rechts. Ein MCP-Tool-Ergebnis oder ein Web-Suchschnipsel trägt eine Anweisung, die auf das Modell zielt. Cursor liest sie als Kontext und führt run_terminal_cmd mit working_directory aus, das auf seine eigenen Dateien zeigt (CVE-2026-50548), oder schreibt durch eine fehlgeschlagene Symlink-Prüfung an denselben Ort (CVE-2026-50549). Beide landen auf cursorsandbox, dem Helper, der die Sandbox durchsetzt, und überschreiben ihn. Mit dem ersetzten Wächter läuft das nächste Kommando als der Entwickler und erreicht die Cloud- und SaaS-Konten, bei denen der Editor angemeldet ist. Cursor, die eingeschleusten Inhalte, der Helper und die Credentials teilen sich alle einen Mac.

Die Grenze saß in dem Raum, den sie bewachte.

Lies die Kette noch einmal, und der scharfe Teil ist nicht der Symlink-Trick. Es ist der Ort des Wächters. Der Helper, der entscheidet, ob ein Kommando eingeschränkt ist, sitzt auf derselben Platte wie das Projekt, das der Agent editiert, in derselben Vertrauensdomäne wie der Agent, erreichbar durch dasselbe run_terminal_cmd, das der Agent für gewöhnliche Arbeit nutzt. Die Sandbox und der Code, den sie überwacht, laufen als ein Nutzer, auf einer Maschine, mit einem Dateisystem zwischen ihnen. Gib dem Agent die Fähigkeit, eine Datei zu schreiben, lass einen Angreifer wählen, welche Datei, und die Datei, die er wählt, ist der Wächter.

Das ist das wiederkehrende Versagen in der Sicherheit von Coding-Agents in diesem Jahr, und wir haben es in anderen Formen aufgeschrieben: Ein Credential, das der Agent lesen kann, ist ein Credential, das eine kompromittierte Abhängigkeit lesen kann, in der Sandbox, die den Schlüssel hielt, und eine Kontrolle, die der Agent abschalten kann, war nie eine Kontrolle, in warum Bromure Agentic Coding keine Sandbox ist. DuneSlide ist dieselbe Lektion auf der Ebene des Sandbox-Binaries selbst. Ein In-Process-Wächter schützt dich, bis der Prozess, in dem er lebt, beschließt, ihn zu editieren.

Derselbe Angriff, einen Hypervisor entfernt.

Bromure Agentic Coding legt die Grenze irgendwohin, wo der Agent nicht hinschreiben kann. Der Agent, die Shells, die er spawnt, die Tools, die er aufruft, und jeder Code, den diese Tools ausführen, leben innerhalb einer wegwerfbaren virtuellen Maschine mit eigenem Linux-Kernel. Jedes Byte, das die VM sendet oder liest, überquert einen Proxy, der auf dem macOS-Host läuft, unterhalb des Gastes, auf der anderen Seite des Hypervisors. Dieser Proxy ist ein Ort, und er erledigt mehrere Aufgaben. Spiele DuneSlide gegen ihn ab, und jeder Schritt trifft auf eine von ihnen.

Beginne mit dem Ausbruch. Die Injection kommt immer noch an, der Agent führt immer noch run_terminal_cmd aus, und beide CVEs feuern immer noch. Das Überschreiben landet auf den eigenen Dateien des Gastes. Die Platte des Macs, sein /Applications, sein Keychain sind nicht in der Welt der VM, also gibt es keinen Pfad von einem Symlink innerhalb des Gastes zu einem Binary auf dem Host. Der Blast Radius ist eine Maschine, die du in Sekunden löschen und neu aufbauen kannst.

Dann der Auszahlungsschritt, die Reichweite in Cloud und SaaS. Dort kam der Angriff nach Wert, und er geht leer aus. Echte Tokens bleiben auf dem Host. Die VM hält Stubs: Credential-Dateien mit der richtigen Form und ohne Bedeutung im öffentlichen Internet. Wenn der Agent einen Aufruf macht, der ein echtes Secret braucht, tauscht der Host-Proxy den Stub gegen das echte Token auf der Leitung und tauscht es aus der Antwort wieder heraus. Eine ausgebrochene Shell, die env | grep TOKEN ausführt oder ~/.aws/credentials liest, findet Platzhalter. Der eine Moment, in dem ein echtes Credential existiert, ist innerhalb einer Anfrage, die der Agent für echte Arbeit gemacht hat, und ein zustandsverändernder Aufruf pausiert an der Grenze für eine Abfrage auf dem Host, bevor er abgeht. Paket-Abrufe überqueren denselben Proxy und werden auf dem Weg hinein gescannt. Eine Linie, mehrere Aufgaben, alle davon unterhalb des Agents.

NICHT VERTRAUENSWÜRDIGE INHALTE: MCP-Ergebnis / Web-Schnipselträgt die Injection, die DuneSlide startetPROMPTGUARD (falls aktiviert)bewertet sie, bevor das Modell sie liestfalls sie durchrutschtWEGWERFBARE VM: eigener Kernel; Cursor, Shells und Tools leben hier① DER AUSBRUCH LANDET IM GASTrun_terminal_cmd + Symlink-Überschreibentreffen die eigenen Dateien des Gastesdie Platte des Macs ist nicht in dieser Welt② DIE TOKENS, DIE ES WOLLTE, SIND NICHT HIERenv | grep TOKEN → stub-…cat ~/.aws/credentials → stub-…nichts Echtes zum Ausgebenein echter Aufruf, den der Agent machteHOST-SEITIGER PROXY, eine Grenze: Leitung bewerten · Stub gegen echtes Token tauschen · Pakete scannen · zustandsverändernde Aufrufe abfragenHOST-MAC: echte Tokens im Keychain, nie innerhalb der VMder Proxy hängt das echte Secret nur auf der Leitung an, nur für einen Aufruf, den du erlaubt hast, dann streift er es wieder ablösche die VM, und der Ausbruch, das Überschreiben und die Persistenz gehen mit ihr
DuneSlide, abgespielt gegen Bromure Agentic Coding. Das nicht vertrauenswürdige MCP-Ergebnis oder der Web-Schnipsel erreicht zuerst den host-seitigen Proxy, wo PromptGuard es bewertet, bevor das Modell es liest. Rutscht die Injection durch diese Prüfung, feuert der run_terminal_cmd- und Symlink-Ausbruch immer noch, aber er überschreibt Dateien innerhalb der wegwerfbaren VM, nicht auf dem Mac. Die ausgebrochene Shell jagt nach Tokens und findet ausgetauschte Stubs, denn echte Credentials leben auf dem Host und kreuzen nur auf der Leitung in den Gast, für einen Aufruf, den der Agent für echte Arbeit gemacht hat, mit zustandsverändernden Operationen, die für eine Abfrage pausiert werden. Die Garantie kommt von der VM-Grenze und dem Token-Tausch; PromptGuard ist der Stolperdraht, der die Injection früher fängt.

Der Ausbruch landet im Gast.

Beide CVEs feuern unter Bromure immer noch. Das Überschreiben trifft Dateien innerhalb einer wegwerfbaren VM mit eigenem Kernel, und der Hypervisor gibt dem Gast keinen Syscall, der den Host erreicht. Du baust die VM neu, und der Schaden ist mit ihr weg.

Das Token, das es wollte, war nie da.

DuneSlides Ziel ist der Cloud- und SaaS-Zugriff des Entwicklers. Diese Secrets sitzen auf dem Host, und die VM trägt Stubs, die im Internet nichts bedeuten. Die ausgebrochene Shell greppt nach Tokens und liest Platzhalter, also scheitert der Auszahlungsschritt.

PromptGuard liest die Leitung zuerst.

Die Garantie oben hält ohne jeden Klassifikator: Die VM-Grenze enthält den Ausbruch, und der Token-Tausch hungert die Auszahlung aus, was auch immer das Modell tut. Bromure fügt eine weitere Schicht am selben Proxy hinzu, gezielt auf genau den Vektor, den DuneSlide nutzt. Die Injection reist in Inhalten, die der Agent aufnimmt, einem MCP-Tool-Ergebnis oder einem Web-Suchschnipsel, und diese Inhalte überqueren den Host-Proxy, bevor das Modell sie liest. Falls aktiviert, bewertet PromptGuard sie dort. Stufe eins ist Metas Llama Prompt Guard 2, das Tool-Ausgabe und Web-Abrufe auf Text überwacht, der das Modell als Anweisung anspricht. Die Regeldateien, die ein Agent als stehende Befehle behandelt, CLAUDE.md und ihre Geschwister, bekommen stattdessen einen feinabgestimmten ModernBERT-Klassifikator, denn eine Datei, die ganz aus Anweisungen bestehen soll, braucht ein Modell, das Schaden statt Injection bewertet.

Je nach Profil protokolliert Bromure den Treffer, zeigt ihn dir für eine Entscheidung oder blockiert ihn, bevor das Modell den vergifteten Abschnitt sieht. Die Platzierung ist der Punkt, und es ist dasselbe Argument wie bei den Schichten darunter: Ein Agent, der die Injection bereits geschluckt hat, kann nicht darauf vertraut werden, sie zu melden, also läuft die Prüfung auf der anderen Seite der Grenze, wo die Überredung des Agents nicht hinreicht. Wir haben die vollständige Pipeline in wie Bromure bösartige Prompts erkennt aufgeschrieben und dieselbe Klasse von Angriff dabei zugesehen, wie sie auf der Ausgabe eines Kommandos mitritt, in die Anweisung, die nicht meine war.

DuneSlide ist in Cursor 3.0 gepatcht, und zu aktualisieren ist heute der richtige Schritt. Das Muster dahinter ist nicht gepatcht, denn es ist kein einzelner Bug. Jeder Coding-Agent, der seine eigene Einschränkung im eigenen Prozess betreibt, ist einen überzeugenden Satz davon entfernt, diese Einschränkung zu editieren. Der Zug, der die nächste CVE mit einem anderen Namen überlebt, ist, den Wächter, die Credentials und den Audit-Trail auf der anderen Seite einer Linie zu halten, zu der der Agent nicht hinschreiben kann. Bromure Agentic Coding zieht diese Linie am Hypervisor. Es ist kostenlos, quelloffen und heute ausgeliefert.