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.
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.
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.