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

Der Agent hat die Sandbox nie verlassen

Am 20. Juli 2026 veröffentlichte Pillar Security sieben Sandbox-Ausbrüche in Cursor, OpenAIs Codex CLI, Googles Gemini CLI und Antigravity. Keiner davon durchbrach die Sandbox. Der Agent blieb drinnen, befolgte jede Regel und schrieb eine gewöhnliche Datei — eine Hook-Konfiguration, ein virtuelles Environment, eine git-Einstellung —, die ein vertrauenswürdiges Werkzeug auf dem Host las und von selbst ausführte. Die Sandbox hielt; der Ausbruch geschah trotzdem. Bromure Agentic Coding zieht die Linie dort, wo dieser Zug nirgends landen kann.

Jede frühere Ausbruchsgeschichte handelte davon, dass die Mauer versagt. Diese handelt davon, dass die Mauer hält und der Ausbruch trotzdem geschieht. Der Agent gehorchte der Sandbox, schrieb eine Datei, die er schreiben durfte, und ein vertrauenswürdiges Programm auf der anderen Seite der Mauer griff diese Datei auf und führte sie aus.

Ein Coding-Agent läuft in einer Sandbox, damit, wenn er etwas Leichtsinniges tut — und das wird er, denn er liest den ganzen Tag nicht vertrauenswürdigen Text und glaubt den meisten davon —, der Schaden an der Sandbox-Mauer endet. Das ist das Versprechen. Am 20. Juli 2026 veröffentlichte Pillar Security sieben Wege, auf denen das Versprechen bricht, in vier der meistgenutzten Agenten: Cursor, OpenAIs Codex CLI, Googles Gemini CLI und Antigravity. BleepingComputer berichtete in derselben Woche.

Sieben ist nicht die überraschende Zahl. Was die sieben gemeinsam haben, ist dies: in den Worten der Forscher selbst, „in fast jedem Fall musste der Agent die Sandbox nicht direkt durchbrechen. Er musste nur etwas schreiben, das eine vertrauenswürdige Komponente außerhalb der Sandbox später ausführen, laden, scannen oder als sicher behandeln würde."

Der Zug: drinnen bleiben, eine Datei schreiben, den Host sie ausführen lassen

Denken Sie daran, was die Sandbox eines Coding-Agenten tatsächlich enthält. Sie enthält den Prozess des Agenten — das, was die Entscheidungen des Modells ausführt. Sie enthält nicht die Dateien des Agenten, denn die ganze Aufgabe besteht darin, Dateien zu schreiben: Quellcode, Konfigurationen, Build-Skripte. Diese Dateien landen auf derselben Festplatte, die Ihre anderen Werkzeuge lesen. Und Ihre anderen Werkzeuge sind nicht in einer Sandbox. Die Python-Erweiterung Ihres Editors ist nicht in einer Sandbox. Ihr git ist nicht in einer Sandbox. Der Docker-Daemon ist nicht in einer Sandbox. Sie vertrauen dem, was auf der Festplatte liegt, denn bis vor Kurzem war das Einzige, was auf diese Festplatte schrieb, Sie selbst.

Also berührt der Agent die Mauer nie. Er schreibt eine Datei genau dorthin, wo er soll, und wartet darauf, dass etwas auf der anderen Seite sie liest. Pillars sieben Ausbrüche sind sieben Versionen dieses einen Zugs:

Eine Hook-Konfiguration, die läuft

In Cursor schreibt der Agent eine .claude-Hook-Konfiguration des Arbeitsbereichs. Hooks sollen Befehle bei Editor-Ereignissen ausführen — also läuft der Befehl in dieser Datei, außerhalb der Sandbox. Als CVE-2026-48124 vergeben, behoben in Cursor 3.0.0.

Ein Python-Interpreter, ausgetauscht

Der Agent bearbeitet den Interpreter im virtuellen Environment eines Projekts. Die Python-Erweiterung des Editors — außerhalb der Sandbox — ruft ihn später auf, und die ausgetauschte Binärdatei läuft. Erfasst als GHSA-p9g2-cr55-cw9c.

Ein git-Befehl, dem der Name vertraut wird

Die „Safe-Command"-Freigabeliste des Codex CLI winkte einen git-Aufruf durch, weil der Name harmlos aussah, ohne die Argumente zu lesen, die ihn gefährlich machten. Behoben in Codex CLI 0.95.0.

Ein Daemon, der eine zweite Maschine ist

Auf mehreren Agenten war das Docker-Socket von innerhalb der Sandbox erreichbar. Ein privilegierter lokaler Daemon ist ein ganzer zweiter Ort, um Code auszuführen, gleich außerhalb der Grenze. Erfasst als GHSA-v4xv-rqh3-w9mc.

Antigravity fügte zwei weitere derselben Form hinzu — eine macOS-Seatbelt-Sperrliste, die einen Fall übersah, und eine VS-Code-Task-Konfiguration, die der Agent schrieb und die die IDE später von selbst ausführte. Beide galten als schwerer durchzuführen, reimen sich aber auf den Rest.

Die Sandbox — hältAgenten-Prozessbefolgt jede Regel,berührt nie die MauerEr darf nureine Datei schreiben…Geteilte PlatteHook-Config ·virtualenv · gitSetting · Taskgewöhnlich, erlaubtDer Host — ohne SandboxWerkzeug liest die Datei:Python-Erweiterung · git ·Docker-Daemon · Task-Runner…und führt sie aus, extern.Code läuft als Sie.Sieben Ausbrüche, vier Agenten — die Sandbox wird nie durchbrochen; die geteilte Platte schon.
Der Ausbruch, der keiner ist. Der Agent bleibt innerhalb der Sandbox und befolgt jede Regel (links). Er schreibt eine gewöhnliche, erlaubte Datei — eine Hook-Konfiguration, einen Interpreter im virtuellen Environment, eine git-Einstellung, eine Task-Definition — auf die geteilte Festplatte. Ein vertrauenswürdiges Werkzeug auf dem Host, das nicht in einer Sandbox ist — die Editor-Erweiterung, git, der Docker-Daemon, der Task-Runner der IDE — liest diese Datei als Teil seiner normalen Arbeit und führt aus, was sie benennt (rechts). Der Befehl läuft außerhalb der Sandbox, ohne dass die Sandbox je berührt wird.

Warum das Patchen jedes Einzelnen die Form nicht schließt

Jeder davon bekam einen Fix, und es sind gute Fixes. Cursor lieferte 3.0.0 aus, das Codex CLI lieferte 0.95.0 aus, das Docker-Socket wurde abgeriegelt. Wenn Sie diese Werkzeuge nutzen, aktualisieren Sie sie. Aber sehen Sie, was ein Fix hier leisten muss. Er muss jede Datei finden, die der Agent schreiben kann und die ein anderes Programm als Anweisungen behandelt — Hook-Konfigurationen, Interpreter-Pfade, git-Metadaten, Task-Definitionen, Lint-Regeln, was auch immer nächstes Quartal erscheint — und jede als Sonderfall behandeln. Das ist eine Sperrliste, und Pillar nennt Sperrlisten als den ersten von vier wiederkehrenden Fehlermodi, weil „ein Sandbox-Profil, das von ‚standardmäßig erlauben' ausgeht, sich jede gefährliche Operation merken muss, die das OS bereitstellt". Das OS fügt ständig Operationen hinzu. Die Liste ist nie fertig.

Der tiefere Grund ist ein Satz im Bericht, der sich wie eine Definition liest: „Wenn ein Agent die künftigen Eingaben von Systemen schreiben darf, war er von vornherein nie in einer Sandbox." Eine Grenze, die um den Prozess des Agenten gezogen wird, auf einer Maschine, auf der der Agent eine Festplatte und eine Reihe vertrauenswürdiger Daemons mit allem anderen teilt, ist um das Falsche gezogen. Der Wirkungsradius, schreiben sie, „ist nicht der Prozess des Agenten; er umfasst alles, was der Agent schreiben kann und dem der Host später vertraut". Auf dem Laptop eines Entwicklers ist das nahezu alles.

Wo Bromure die Linie zieht

Bromure Agentic Coding versucht nicht, die gefährlichen Dateien aufzuzählen oder der Sandbox Hooks, virtuelle Environments und Task-Runner beizubringen. Es verschiebt die Grenze. Der Agent jedes Profils läuft in einer wegwerfbaren Linux-VM auf Apple Silicon, einen Hypervisor von macOS entfernt. In diesem Modell ist das „vertrauenswürdige Werkzeug außerhalb der Sandbox" — die Python-Erweiterung Ihres Editors, Ihr git, der Docker-Daemon, der Task-Runner der IDE — nicht auf der anderen Seite einer Berechtigungsmauer. Es ist auf der anderen Seite eines Hypervisors und liest die Festplatte der VM überhaupt nicht.

Das ist der ganze Unterschied. Pillars Zug braucht zwei Dinge am selben Ort: eine Festplatte, die der Agent beschreiben kann, und ein vertrauenswürdiges Programm, das diese Festplatte liest. Legen Sie die Festplatte des Agenten in die VM, und das zweite Ding ist weg. Der Agent kann eine Hook-Konfiguration schreiben, einen Interpreter im virtuellen Environment austauschen, eine Task-Definition platzieren — jede Datei aus allen sieben Ausbrüchen — und es gibt kein nicht sandboxiertes Host-Werkzeug, das dieses Dateisystem beobachtet, um sie aufzugreifen. Was auch läuft, läuft in der Box, als der wegwerfbare Benutzer ubuntu in einer Maschine, die nichts enthält.

Prozess-Sandbox — eine MaschineAgent (in Sandbox)schreibt eineerlaubte Config-DateiHost-Werkzeuge(ohne Sandbox)lesen, führen ausGeteilte Platte — beide Seiten lesenBefehl läuft als Sie —echte Keys, Code, Cloud in ReichweiteDie Grenze umschloss den Prozess.Die Platte war mit dem Host geteilt.Bromure Agentic Coding — Hypervisor-VMEinweg-VMAgentschreibt dieselbeConfig-DateiPlatte liegtin der Boxkein Host-Werkzeugliest sieLäuft als ubuntugegen brm_…-KöderAusgang gefiltertam Host-ProxyKein Host-Werkzeug beobachtet die Platte.Sitzung schließen, alles setzt zurück.
Dieselben sieben Dateien, zwei Grenzen. Bei einem normalen Setup (links) umschließt die Sandbox des Agenten nur den Prozess; die Datei, die er schreibt, landet auf einer Festplatte, die die nicht sandboxierten Host-Werkzeuge lesen, und der Befehl läuft als Sie, direkt neben Ihren Schlüsseln und Ihrem Code. Unter Bromure Agentic Coding (rechts) ist die Grenze ein Hypervisor um die gesamte VM: die Festplatte des Agenten liegt in der Box, kein Host-Werkzeug liest sie, und was auch läuft, läuft als Einweg-Benutzer gegen Köder-Anmeldedaten, wobei jede ausgehende Anfrage am Host-Proxy gefiltert wird. Schließen Sie die Sitzung, und die Box setzt sich zurück.

Es gibt eine zweite Hälfte der Ausbrüche, die zu benennen sich lohnt, weil Bromure auch sie beantwortet. Angenommen, eine vom Agenten geschriebene Datei wird tatsächlich von einem Werkzeug innerhalb der VM ausgeführt — der Sinn, Code auszuführen, ist meist, etwas zu stehlen oder irgendwohin zu gelangen. Beides sind hier Sackgassen. Der Code geht auf die Anmeldedaten los, die die Reise lohnenswert machen, den Anthropic-Schlüssel, die AWS-Schlüssel, das GitHub-Token, und findet Köder: ein Credential-Broker auf dem Host injiziert Platzhalter wie brm_…, eine synthetische kubeconfig und einen wegwerfbaren SSH-Schlüssel und tauscht den echten Wert erst an der Netzwerkgrenze ein, bei Anfragen an Ziele, die Sie bereits genehmigt haben. Und der ausgehende Schritt — die Beute exfiltrieren oder einen zweiten Host erreichen — überquert den Host-Proxy, wo das wahre Ziel auf dem Weg nach draußen gefiltert wird und wo eine zerstörerische Aktion gegen die Cloud- und git-APIs, die das Profil vorschaltet, ein Delete, ein Drop oder ein Terminate, auf einen Schutzmechanismus trifft, der sie ablehnen kann, egal wozu der Agent überredet wurde.

Vor all dem sitzt die Schicht, die diese Ausbrüche an der Wurzel fasst. Jeder beginnt mit einer Injection — einer bösartigen Anweisung in einer Datei oder einem Tool-Ergebnis, das der Agent liest, die ihm sagt, überhaupt erst die vergiftete Konfiguration zu schreiben. Bromure bewertet diesen nicht vertrauenswürdigen Inhalt mit einem Injection-Detektor auf dem Gerät, bevor das Modell darauf reagiert. Er fängt das meiste davon, und eine hinreichend neuartige Nutzlast kann einen Klassifikator noch immer passieren, was genau der Grund ist, warum er vor der wegwerfbaren Box sitzt und nicht an ihrer Stelle.

Die Grenze war um das Falsche gezogen

Die bleibende Lehre aus Pillars Woche ist keine Liste von sieben zu patchenden Bugs. Sie ist, dass das Sandboxen des Agenten-Prozesses, auf einer Maschine, auf der dieser Prozess eine Festplatte und eine Reihe vertrauenswürdiger Werkzeuge mit allem teilt, was Ihnen gehört, die Linie um das Falsche zieht. Der Agent muss nicht ausbrechen, wenn er die Eingaben zu etwas schreiben kann, das bereits draußen ist.

Die bekannten Dateien zu patchen ist richtig, und Sie sollten es tun. Aber es ist ein Rennen gegen jedes künftige Format, dem ein Host-Werkzeug zu vertrauen beschließt, und dieses Rennen endet nicht. Bromure Agentic Coding steigt aus. Es geht davon aus, dass der Agent dazu überredet wird, die vergiftete Datei zu schreiben, und sorgt dafür, dass, wenn ein Werkzeug sie liest, dieses Werkzeug in einer wegwerfbaren Box mit Ködern für die Geheimnisse und einem Filter auf der Leitung ist — nicht Ihr Laptop, der Ihre Schlüssel hält. Das ist der Unterschied zwischen einer Mauer, die Sie ständig patchen müssen, und einer Linie, die eine Ebene tiefer gezogen ist, wo das Schreiben keinen Leser hat. Installieren Sie es und geben Sie Ihrem Agenten eine Maschine, die nicht Ihre ist, um sie zu verlieren.