
Open-Source-Sandbox-Laufzeitumgebung für KI-Agenten — gVisor/Docker-Isolation, Credential-Vault, unveränderliches Audit-Log. Entwickelt nach CVE-2026-25253.
Die Open-Source-Sandbox-Laufzeitumgebung für KI-Agenten
Führen Sie KI-Agenten mit Zuversicht aus. Jeder Agent erhält seinen eigenen Berechtigungsumfang, einen Anmeldedaten-Tresor, ein Prüfprotokoll und einen Notausschalter.
Am 27. Januar 2026 wurde CVE-2026-25253 zur ersten CVE, die jemals einem agentischen KI-System zugewiesen wurde. Eine kritische WebSocket-Hijacking-Schwachstelle in OpenClaw ermöglichte Remote-Codeausführung mit einem Klick gegen jede exponierte Instanz – einschließlich solcher, die nur an localhost gebunden waren.
In derselben Woche infiltrierte die ClawHavoc-Kampagne 341+ bösartige Skills in OpenClaws Marktplatz. Jeder Skill, der von ClawHub installiert wurde, lief mit denselben Berechtigungen wie OpenClaw selbst – voller Festplattenzugriff, OAuth-Tokens, API-Schlüssel. Keine Sandbox. Kein Prüfprotokoll. Kein Notausschalter.
„Das Installieren eines Skills von ClawHub gewährt ihm Zugriff auf dieselben Ressourcen wie OpenClaw selbst. Standardmäßig gibt es keine Sandbox-Isolation zwischen Skills." — DEV Community Sicherheitsanalyse, April 2026
Die Zahlen:
AgentBox ist die strukturelle Lösung. Kein Patch – eine Laufzeitumgebung.
Jeder Agent, den Sie ausführen, erhält:
| Schutz | Wie |
|---|---|
| Zero-Trust-Berechtigungen | Agenten deklarieren genau, was sie benötigen. Nichts anderes ist zugänglich. |
| Isolation auf Kernel-Ebene | gVisor fängt jeden Syscall ab. Prompt-Injection kann diese Grenze nicht überschreiten. |
| Anmeldedaten-Tresor | AES-256-GCM-Verschlüsselung. Agenten sehen niemals rohe Geheimnisse – nur begrenzte Tokens. |
| Unveränderliches Prüfprotokoll | SHA-256-Hash-Kette. Jede Aktion wird protokolliert. Manipulationssicher. |
| Notausschalter | Beenden Sie jeden Agenten in unter 100 ms. Automatischer Abbruch bei Limitüberschreitung. |
| Ressourcenlimits | Zeit, Speicher, Anfragenanzahl – zur Laufzeit durchgesetzt, nicht bei der Konfiguration. |
Vor AgentBox Nach AgentBox
───────────────── ──────────────
Agent → voller Festplattenzugriff ❌ Agent → nur erlaubte Pfade ✅
Agent → gesamtes Netzwerk ❌ Agent → nur erlaubte Hosts ✅
Agent → rohe Geheimnisse ❌ Agent → begrenzte Tokens ✅
Kein Prüfprotokoll ❌ Jede Aktion protokolliert ✅
Kein Notausschalter ❌ Abbruch in <100 ms ✅
Skills laufen als root ❌ Kernel-isolierte Sandbox ✅
# Installieren
go install github.com/siyad01/agentbox/cmd/agentbox@latest
# Ein Manifest vor der Ausführung validieren
agentbox validate manifests/email-sorter.yaml
# Einen Agenten in einer Sandbox ausführen
agentbox run --manifest manifests/email-sorter.yaml python agent.py
# Anzeigen, was der Agent getan hat
agentbox audit --log logs/email-sorter-audit.log
# Überprüfen, ob das Protokoll manipuliert wurde
agentbox verify logs/email-sorter-audit.log
# Geheimnisse verwalten
agentbox vault add ANTHROPIC_API_KEY
agentbox vault list
Jeder Agent deklariert genau, was er benötigt. Nichts, was nicht aufgeführt ist, ist zugänglich.
name: "email-sorter"
version: "1.0.0"
description: "Liest Posteingang, kategorisiert E-Mails, schreibt in sortierten Ordner"
runtime: docker # oder: gvisor (Kernel-Ebene), firecracker (MicroVM)
permissions:
filesystem:
read:
- "~/Documents/inbox"
write:
- "~/Documents/sorted"
deny: # IMMER blockiert – selbst wenn in der Leseliste
- "~/.ssh"
- "~/.aws"
- "~/.config"
- "/etc"
network:
allow:
- "api.anthropic.com"
- "gmail.googleapis.com"
deny:
- "*" # alles andere blockieren
tools:
allow:
- "read_file"
- "write_file"
- "list_*"
deny:
- "execute_shell" # kein Shell-Zugriff, niemals
- "*_delete" # keine Löschwerkzeuge
credentials:
- ANTHROPIC_API_KEY # zur Laufzeit aus dem Tresor injiziert
- GMAIL_TOKEN # Agent sieht niemals den rohen Wert
limits:
max_tokens: 50000 # LLM-Token-Budget
max_duration: "30m" # nach 30 Minuten beendet
max_memory_mb: 256 # RAM-Obergrenze
max_requests: 500 # maximale Tool-Aufrufe
audit:
log_level: full
alert_on:
- filesystem_deny
- network_deny
- token_budget_80pct
log_path: "logs/email-sorter-audit.log"
agentbox run --manifest agent.yaml python agent.py
│
▼
┌─────────────────────────────────────────────────────┐
│ Policy-Engine │
│ Analysiert Manifest → erstellt Erlauben/Verweigern-Listen │
│ Validiert Signaturen → lehnt unsignierte Skills ab │
│ Injiziert Anmeldedaten aus dem Tresor │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Isolationsschicht │
│ │
│ Docker → Container + seccomp + cap-drop │
│ gVisor → User-Space-Kernel, Syscall-Interception │
│ Firecracker → dedizierter MicroVM-Kernel pro Agent │
│ │
│ Dateisystem: nur deklarierte Pfade eingebunden │
│ Netzwerk: nur deklarierte Hosts erreichbar │
│ Capabilities: ALLE entfernt, keine hinzugefügt │
└──────────────────────┬──────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
Audit-Logger Anmeldedaten- Ressourcen-
(Hash-Kette) Tresor Monitor
jede Aktion AES-256-GCM Auto-Abbruch
protokolliert begrenzte Tokens bei Limit
Jede andere Sandbox stoppt an der Container-Grenze. Ein Agent, der eine Kernel-Schwachstelle ausnutzt, kann entkommen.
gVisor fängt jeden Syscall ab, bevor er den Host-Kernel erreicht:
Agent versucht: write("/home/user/.ssh/id_rsa")
│
▼
gVisor User-Space-Kernel
│
Pfad in Verweigerungsliste? → JA
│
▼
EPERM wird sofort zurückgegeben
Host-Kernel sieht diesen Syscall nie
Prompt-Injection kann diese Schicht nicht überqueren
agentbox <command> [options]
Befehle:
run Einen Agenten in einer Sandbox ausführen
validate Eine Manifestdatei validieren
kill Einen laufenden Agenten beenden
audit Agent-Prüfprotokolle anzeigen
verify Integrität des Prüfprotokolls überprüfen
vault Verschlüsselte Anmeldedaten verwalten
serve Den REST-API-Server starten
version Version anzeigen
Beispiele:
agentbox validate manifests/email-sorter.yaml
agentbox run --manifest manifests/email-sorter.yaml python agent.py
agentbox kill agent-abc123
agentbox audit --log logs/email-sorter.log --deny
agentbox audit --log logs/email-sorter.log --last 1h
agentbox verify logs/email-sorter.log
agentbox vault add ANTHROPIC_API_KEY
agentbox vault list
agentbox vault delete OLD_KEY
agentbox serve :8081
Starten Sie mit agentbox serve (Standard: :8081).
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /health | Gesundheitscheck |
| GET | /dashboard | Web-Dashboard |
| GET | /api/agents | Alle Agenten auflisten |
| POST | /api/agents | Einen neuen Agenten starten |
| DELETE | /api/agents/:id | Einen Agenten beenden |
| GET | /api/audit | Prüfprotokoll abfragen |
# Laufende Agenten auflisten
curl http://localhost:8081/api/agents
# Einen Agenten starten
curl -X POST http://localhost:8081/api/agents \
-H "Content-Type: application/json" \
-d '{"manifest":"manifests/email-sorter.yaml","command":["python","agent.py"]}'
# Einen Agenten beenden
curl -X DELETE http://localhost:8081/api/agents/abc123
# Prüfprotokoll abfragen
curl "http://localhost:8081/api/audit?deny=true&agent=email-sorter"
Jede Agent-Aktion wird in einer append-only, hash-verketteten JSON-Lines-Datei protokolliert:
{"id":1,"hash":"a3f2...","prev_hash":"genesis","timestamp":"2026-05-05T09:00:00Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"agent_start","allowed":true,"resource":"manifests/email-sorter.yaml"}
{"id":2,"hash":"b7c1...","prev_hash":"a3f2...","timestamp":"2026-05-05T09:00:01Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"filesystem_allow","allowed":true,"resource":"read:/home/user/Documents/inbox/mail.txt","rule":"filesystem.read: ~/Documents/inbox"}
{"id":3,"hash":"d9e4...","prev_hash":"b7c1...","timestamp":"2026-05-05T09:00:01Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"filesystem_deny","allowed":false,"resource":"read:/home/user/.ssh/id_rsa","rule":"filesystem.deny: ~/.ssh","reason":"path is explicitly denied"}
Manipulationserkennung:
agentbox verify logs/email-sorter-audit.log
✅ Prüfprotokoll ist intakt
Einträge: 47 (IDs 1–47)
Hash-Kette: ununterbrochen
Ändern Sie ein beliebiges Zeichen in einem Eintrag und die Überprüfung schlägt sofort fehl – die Kette ist gebrochen.
# Ein Geheimnis speichern (nie protokolliert, nie im Klartext in der Umgebung)
agentbox vault add ANTHROPIC_API_KEY
# Namen gespeicherter Anmeldedaten auflisten (Werte werden nie angezeigt)
agentbox vault list
# Überprüfen, ob eine Anmeldedaten entschlüsselt werden können
agentbox vault test ANTHROPIC_API_KEY
# Eine Anmeldedaten rotieren
agentbox vault add ANTHROPIC_API_KEY # add aktualisiert vorhandene
Anmeldedaten werden mit AES-256-GCM verschlüsselt. Der Hauptschlüssel wird aus Ihrem Tresor-Passwort abgeleitet – nie auf der Festplatte gespeichert. Beim Agent-Start injiziert AgentBox Anmeldedaten als begrenzte Umgebungsvariablen. Der Agent ruft normal os.getenv("ANTHROPIC_API_KEY") auf – er berührt den Tresor nie.
AgentBox beendet Agenten, die ihre deklarierten Limits überschreiten:
# Dieser Agent ist mit max_duration: 5s konfiguriert
agentbox run --manifest manifests/timeout-test.yaml python long_running_agent.py
Agent gestartet
tick 1
tick 2
tick 3
tick 4
tick 5
🛑 Beende Agent timeout-test: Dauerlimit überschritten: 5s
⚠️ Agent timeout-test mit Code 137 in 5.2s beendet
Exit-Code 137 = SIGKILL. Sauberes Herunterfahren, letzter Prüfprotokoll-Eintrag geschrieben.
# Klonen
git clone https://github.com/siyad01/agentbox
cd agentbox
# Bauen
go build -o agentbox ./cmd/agentbox/
# Tests ausführen (27 Tests, alle bestanden)
go test ./...
# Global installieren
go install ./cmd/agentbox/
Anforderungen:
agentbox/
├── cmd/agentbox/main.go ← CLI-Einstiegspunkt
├── internal/
│ ├── policy/
│ │ ├── manifest.go ← YAML-Manifest-Schema
│ │ ├── parser.go ← Validierung + Standardwerte
│ │ └── engine.go ← Deny-first-Entscheidungsengine (20 Tests)
│ ├── audit/
│ │ ├── logger.go ← append-only SHA-256-hash-verkettetes Protokoll
│ │ ├── verifier.go ← Manipulationserkennung
│ │ └── reader.go ← Abfrage + Filter
│ ├── vault/
│ │ ├── store.go ← AES-256-GCM-verschlüsselter Anmeldedaten-Speicher
│ │ └── injector.go ← Laufzeit-Injektion (7 Tests)
│ ├── sandbox/
│ │ ├── sandbox.go ← Sandbox-Schnittstelle
│ │ ├── docker.go ← Docker-Backend
│ │ ├── gvisor.go ← gVisor-Backend (Kernel-Ebene)
│ │ ├── manager.go ← Agent-Lebenszyklusverwaltung
│ │ └── util.go ← WSL2-Erkennung, Pfad-Hilfsfunktionen
│ ├── monitor/
│ │ └── enforcer.go ← Ressourcenlimits + Auto-Abbruch
│ └── api/
│ └── server.go ← REST-API auf :8081
└── manifests/
├── email-sorter.yaml ← Produktionsbeispiel
└── timeout-test.yaml ← Beispiel für Limit-Durchsetzung
Deny-first standardmäßig. Agenten starten mit null Berechtigungen. Jede Fähigkeit muss explizit deklariert werden.
Die Verweigerungsliste gewinnt immer. Selbst wenn ein Pfad sowohl in der Lese- als auch in der Verweigerungsliste erscheint, hat die Verweigerungsliste Vorrang. Keine Ausnahmen.
Durchsetzung auf Kernel-Ebene mit gVisor. Seccomp-Filter und Capability-Entfernung operieren an der Syscall-Grenze. Modellausgabe – die angreiferkontrollierbar ist – läuft im User-Space und kann die Kernel-Ebene-Policy nicht ändern.
Anmeldedaten-Isolation. Der Tresor-Hauptschlüssel wird nie auf der Festplatte gespeichert. Anmeldedaten werden als kurzlebige begrenzte Tokens beim Sandbox-Start injiziert und beim Beenden verworfen. Eine Kompromittierung eines Agent-Prozesses gefährdet nicht den Anmeldedaten-Tresor.
Unveränderliches Prüfprotokoll. Die SHA-256-Hash-Kette bedeutet, dass eine nachträgliche Protokolländerung erkennbar ist. Jede Änderung an einem Eintrag bricht die Kette ab diesem Punkt.
Siehe SECURITY.md für die Meldung von Schwachstellen.
| Funktion | AgentBox | OpenClaw-Sandbox | Nur Docker | AccuKnox |
|---|---|---|---|---|
| Open Source (Apache 2.0) | ✅ | ✅ | ✅ | ❌ |
| Selbst hostbar | ✅ | ✅ | ✅ | Nur K8s |
| gVisor / Kernel-Isolation | ✅ | ❌ | ❌ | ✅ |
| Anmeldedaten-Tresor | ✅ | ❌ | ❌ | ✅ |
| Unveränderliches Prüfprotokoll | ✅ | ❌ | ❌ | ✅ |
| Auto-Abbruch bei Limitüberschreitung | ✅ | ❌ | ❌ | ✅ |
| Framework-agnostisch | ✅ | ❌ (nur OpenClaw) | ✅ | ✅ |
| Einzelne Binärdatei-Bereitstellung | ✅ | ❌ | ✅ | ❌ |
Siehe CONTRIBUTING.md.
Apache 2.0 – frei zu verwenden, zu modifizieren und zu verbreiten. Siehe LICENSE.
Mit Go gebaut · Null externe Abhängigkeiten für Kern-Sicherheitsfunktionen · Mit einem Befehl selbst hostbar
Wenn CVE-2026-25253 Sie beunruhigt hat, ist dies die Lösung. Geben Sie ihm ein ⭐