Forschung · AI Safety · Agent Control

Verifiable Agent Control

Effektverträge für Tools, die niemand geprüft hat.

Autonome Agenten handeln über Tools, deren Beschreibungen verschweigen können, was sie mit Dateien, Prozessen, dem Netzwerk und ihrem eigenen Zustand tun. VAC baut überprüfbare Effektverträge, die drei Dinge verbinden: was ein Tool deklariert, was isolierte Ausführung zeigt und was ein Controller vor dem Aufruf freigeben darf. Und VAC misst, was diese Entscheidungen kosten — in zurückgehaltenen legitimen Aufrufen.

Cengizhan Akbudak · mit Hamna QaseemWien, ÖsterreichForschungspaket 2026Apache-2.0 · CC BY 4.0

Agent · MCP-Client
tools/call
VAC-Guard · MCP-Proxy
  1. 1Revision attestieren: Installation, Vertrag, tools/list
  2. 2Prädikat S auf dem Zustand vor dem Aufruf
  3. 3Entscheidung ins hash-verkettete Ledger
freigegeben
MCP-Serverunverändert · Sandbox · netns
zurückgehalten
Reviewerreicht den Server nicht
Abb. 1Entscheidung vor dem Aufruf
13reale MCP-Server, instrumentiert in einem privaten Netzwerk-Namespace
1.683bewertete Aufrufe über drei Seeds; 12 von 13 Servern reproduzieren Aufruf für Aufruf auf einer zweiten Maschine
17 / 17Index-Rewrites durch Read-only-Tools vor der Ausführung erkannt, ohne einen Fehlalarm
0Index-Rewrites durch Read-only-Aufrufe hinter dem erzwingenden MCP-Proxy, über 480 Aufrufe

01 Die Frage

Kontrolle ist nur so gut wie das Wissen über die Werkzeuge.

Agenten handeln über Tools, und Tools kommen schneller hinzu, als jemand ihren Code liest. Das Model Context Protocol verlangt nicht, dass die Beschreibung eines Tools seiner Implementierung entspricht, und erklärt seine eigenen Effekt-Annotationen (readOnlyHint, destructiveHint) für nicht vertrauenswürdig.

Berechtigungssysteme, Informationsfluss-Grenzen und AI-Control-Protokolle leiten trotzdem aus genau diesen Deklarationen ab, was ein Agent tun kann: Ein als read-only annotiertes Tool wird automatisch freigegeben, ein Tool ohne deklariertes Netzwerk gilt nicht als Senke. Ein Tool, das zusätzlich außerhalb des überwachten Bereichs schreibt, einen Prozess startet oder einen unbekannten Host kontaktiert, öffnet einen Aktionskanal, den der Controller nicht modelliert.

VAC macht diese Lücke messbar und entscheidet sie vor dem Aufruf.

Was muss ein Controller über die Effekte eines Tools wissen, um einen Aufruf zu entscheiden — wie viel davon kann er aus Dokumentation und isolierter Ausführung gewinnen, für ein Tool, das er nicht geschrieben hat, zu welchen Kosten in abgelehnten legitimen Aufrufen, und wo endet dieses Wissen?Die Forschungsfrage von VAC

02 Methode

Deklariert, beobachtet, entschieden.

Ein durchgehender Evidenzpfad von der Dokumentation eines Tools bis zur Entscheidung, die ein Controller vor dem Aufruf trifft.

01 · Deklariert

Effektvertrag

Ein Vertrag pro Server, geschrieben aus Tool-Beschreibungen, MCP-Annotationen und README — vor dem ersten Probe-Aufruf, mit Vorhersagen, die vor dem Lauf feststehen.

  • tools/list
  • Annotationen
  • README
02 · Beobachtet

Isolierte Ausführung

Der unveränderte Server läuft in einer frischen Sandbox in einem privaten Netzwerk-Namespace, dessen einziger Ausgang die Harness ist. Aufgezeichnet werden Dateisystem-Snapshots, jeder fork und exec über den Process Connector des Kernels, Sockets und jeder Netzwerkversuch beim Namen.

  • Sandbox
  • netns
  • Kernel-Prozessereignisse
03 · Entschieden

Controller & Proxy

Ein Grader klassifiziert jede beobachtete Änderung gegen den Vertrag. Controller entscheiden vor dem Aufruf; der Guard setzt die Entscheidung als MCP-Proxy vor dem unveränderten Server durch und schreibt sie in ein hash-verkettetes Ledger.

  • Grader
  • Controller
  • MCP-Proxy
  • Ledger

Grader-Klassen

  • fs_outside_scope
  • fs_change_by_readonly_tool
  • fs_undeclared
  • undeclared_subprocess
  • undeclared_network
  • declared_effect_absent

03 Befunde

Wo Deklaration und Verhalten auseinandergehen.

13 Server, ausgewählt nach einer Regel, die vor dem ersten Probe-Aufruf feststand: alle offiziellen Referenzserver, die lokal über stdio laufen, vier Varianten des MSB-Benchmark-Servers und zwei weit verbreitete Drittanbieter-Server mit reichem lokalem Zustand.

Desktop Commander

Drittanbieter · weit verbreitet

Ein nicht deklarierter Subprozess bei jedem der 267 Aufrufe (python3 --version). DNS-Anfragen an einen Telemetrie-Fallback-Host, den die README nicht abdeckt, bei 81 Aufrufen.

267 / 267 Aufrufe

git

Offizieller Referenzserver

Als readOnlyHint annotierte Tools schreiben .git/index neu: Nach einem git_reset hinterlässt git read-tree Einträge ohne Stat-Daten, und der nächste git_status oder git_diff_unstaged frischt sie auf.

readOnlyHint: true

obsidian-mcp

Drittanbieter

Journal-, Lock- und Papierkorbdateien bei jeder Mutation, die nur die README deklariert; move_note schreibt die Notizen um, die auf die verschobene Notiz verlinken.

36 Mutationen

MSB-Angriffsvarianten

Benchmark · ICLR 2026

Zwei Varianten weichen bei jedem Aufruf ab und werden beim ersten Probe-Aufruf erkannt; die dritte steckt ausschließlich in der ausgelieferten Tool-Definition, als zusätzlicher Parameter.

ab Probe 1

filesystem, sqlite, memory, everything, fetch, time und MSB normal verhalten sich genau wie deklariert.

04 Entscheidung vor der Ausführung

Ein zustandsbewusster Controller, eingefroren und auf neuem Verkehr gemessen.

Die Index-Rewrites von git hängen vom Zustand ab, nicht von den Argumenten. Das Zustandsprädikat S liest .git/index vor dem Aufruf und markiert Einträge ohne Stat-Daten. Es wurde vorregistriert, im Controller-Lauf geprüft — 12 von 12 Rewrites über 85 Aufrufe — und dann eingefroren auf zehn Seeds angewendet, die kein früherer Lauf verwendet hat.

Zehn neue Seeds · 220 Read-only-Aufrufe · 17 Index-RewritesAlle vier Controller vor dem ersten Aufruf festgelegt; jedes Urteil vor der Ausführung aufgezeichnet, jeder Aufruf ausgeführt.
ControllerRewrites erkanntZusätzliche Reviews
S — Indexzustand vor dem Aufrufliest .git/index, markiert Einträge ohne Stat-Daten
17/17
0
P2 — Historie seit dem letzten git_resetvorregistriertes Historien-Prädikat
17/17
0
Entscheidungsbaum, Tiefe 2ausgewählt auf den Controller-Seeds 7–8
17/17
3
Per-Tool-Baselineangepasst auf denselben Seeds
12/17
68

Quelle: real-mcp/analysis/GUARDED_RUN.md · aus den Receipts regeneriert

→ Durchsetzung

Der Guard als MCP-Proxy vor dem unveränderten Server.

runtime/mcp_proxy.py attestiert Installation, Vertrag und ausgelieferte tools/list gegen gepinnte Digests, wertet S vor jedem Aufruf auf dem Index aus, schreibt die Entscheidung per fsync in ein hash-verkettetes Ledger und leitet nur freigegebene Aufrufe weiter. Die Prozessereignisse des Kernels und die Sandbox-Snapshots zeigen für keinen zurückgehaltenen Aufruf Aktivität.

Ein zurückgehaltener git_status lässt den Index für den nächsten Leser veraltet; wie ein Review aufgelöst wird — einmal freigeben, auffrischen, ablehnen — ist der operative Parameter, den WP2 misst.

480Aufrufe durch den Proxy
415weitergeleitet unter attestierter Revision
65zur Prüfung zurückgehalten
0zurückgehaltene Aufrufe erreichten den Server
0Index-Rewrites durch Read-only-Aufrufe

05 Weitere Ergebnisse

Dieselbe Evidenzkette, vier weitere Messungen.

Netzwerk

Deklarationen pro Aufruf

Auf die aufgezeichneten Receipts angewendet, markieren aufrufbezogene Netzwerk-Deklarationen 81 von 81 Aufrufen, die den undokumentierten Telemetrie-Host erreichten — darunter 8, die die toolweite Deklaration entschuldigt hatte.

Vertragsautorschaft

Wer schreibt den Vertrag?

Verträge von sieben Sprachmodellen aus derselben Dokumentation stimmen bei 92–98 % der Tools in der Read-only-Absicht mit den menschlichen überein und weichen bei 13–46 % der Aufrufbewertungen ab. Dokumentation sagt, wofür ein Tool da ist; die Ausführung zeigt, was es berührt.

Statisch und dynamisch

Zwei Methoden, die sich ergänzen

Von 17 Verhaltensweisen fand der beste statische Scan 15; die Harness beobachtete alle 12, die Ausführung sehen kann — darunter den Index-Rewrite im git-Binary, den kein Scan sah.

Kontrollierte Studie

AgentDojo & CaMeL

Mit dem unveränderten CaMeL-Interpreter führten zwei gehostete Modelle einen verborgenen zustandsabhängigen Effekt in allen 53 schädlichen Episoden ohne Veto aus und in keiner mit Veto.

06 Forschungsprogramm

Vom Proof of Concept zur Conformance-Map.

Die Conformance-Map ist für Maintainer, die MCP-Registry und Client-Hersteller gemacht, die Annotationen in ihren Freigaberegeln verwenden — und für alle, die Controller auf CaMeL, FIDES oder AI-Control-Protokollen bauen.

WP1

Conformance-Map

Mindestens 60 lokal lauffähige MCP-Server, Dokumentation gegen beobachtete Effekte, bestehende statische und dynamische Werkzeuge als Vergleich neben der Harness.

WP2

Zustandsbewusste Qualifikation

Vor-Aufruf-Prädikate über Zustand und Historie für den zustandsabhängigen Teil der Map, ausgewählt vor dem Verkehr, auf dem sie bewertet werden, gegen budgetgleiche Baselines — mit der Review-Auflösung des Proxys als gemessenem Parameter.

WP3

Unabhängige Bestätigung

Der eingefrorene Controller auf versiegelten Hidden-Effect-Tools, die eine zweite Person baut, mit Live-Agentenausführungen und einem unabhängigen Outcome-Grader.

Kerninvariante

VAC verengt eine bestehende Sicherheitsgrenze und erweitert sie nie. Unbekannte Effekte und geänderte Revisionen werden zur Prüfung zurückgehalten.

07 Reproduzierbar

Jede Zahl aus ihren Receipts.

Das Paket ist eine einzige Evidenzkette: Harness, Receipts, Controller- und Guarded-Runs, Guard und Proxy, Vertrags- und Static-Studien, die AgentDojo/CaMeL-Studie, Verifikation, Forschungsprotokoll und die Benachrichtigungen an die Maintainer.

Offline-Verifikation
$ git clone https://github.com/cakbudak/vac
$ cd vac
$ bash VERIFY.sh
# regeneriert jedes Label, jede Zusammenfassung und jeden Bericht
  • VERIFY.sh — regeneriert jedes Label, jede Zusammenfassung und jeden Bericht aus den Receipts
  • 21 Tests — für Proxy, Zustands-Policy, Ledger und aufrufbezogene Netzwerk-Deklarationen
  • Hash-Manifest — über jede Datei des Pakets
  • Lizenzen — Apache-2.0 für Code, CC BY 4.0 für Texte und Daten

Kontakt

Über VAC sprechen.

Für Zusammenarbeit, Fragen zu den Messungen oder den Einsatz der Conformance-Map in Client, Registry oder Controller.

Cengizhan AkbudakSoftware Developer & AI Engineer · Wien
Hamna QaseemMitarbeit am Forschungspaket