
Host-unabhängiger Pre-Write-Sicherheits-Hook für Coding-Agenten: erkennt Benutzereingabemuster via Semgrep und gibt deterministische, LLM-freie Sicherheitsanweisungen aus.
Ein Sicherheits-Checkpoint für KI-Coding-Tools. Es prüft jede Datei, die ein KI-Assistent schreibt, und stoppt die gefährlichen, bevor sie die Festplatte erreichen.
KI-Coding-Assistenten (Claude Code, Codex, …) schreiben schnell Code – auch Code, der Dinge wie Passwörter, E-Mails, API-Schlüssel oder rohe Benutzereingaben verarbeitet. Es passiert leicht, dass ein Assistent diese Daten direkt in eine Datenbankabfrage, einen Shell-Befehl oder eine HTTP-Antwort einbaut, ohne an Sicherheit zu denken.
VibeGate sitzt zwischen dem Assistenten und Ihrem Dateisystem. Jedes Mal, wenn der Assistent versucht, eine Datei zu schreiben oder zu bearbeiten, scannt VibeGate den neuen Code zuerst:
An der Analyse selbst ist kein LLM beteiligt – es ist eine schnelle, deterministische statische Analyse, die nie etwas erfindet und nie Tokens kostet.
Hier ist alles, was VibeGate derzeit überprüft:
| Prüfung | Was sie erfasst | Ergebnis |
|---|---|---|
| Befehlseinschleusung | Unbereinigte Eingabe erreicht einen Shell-Befehl | Blockiert |
| SQL-Injection | Unbereinigte Eingabe erreicht eine Datenbankabfrage | Blockiert |
| NoSQL-Injection | Der Anforderungstext wird direkt als Datenbankfilter verwendet | Blockiert |
| Template-Injection (SSTI) | Die Template-Quelle selbst, nicht nur ihre Daten, stammt von Benutzereingaben | Blockiert |
| Unsichere Deserialisierung | Unvertraute Daten erreichen einen unsicheren Deserialisierer (pickle, unsicheres YAML, ...) | Blockiert |
| Path Traversal | Unbereinigte Eingabe erreicht einen Datei-Lese-, -Schreib- oder -Löschvorgang | Blockiert |
| XXE | Unvertrautes XML wird mit aktivierten externen Entitäten geparst | Blockiert |
| XSS | Unbereinigte Eingabe wird als rohes HTML ausgegeben | Blockiert |
| Uneingeschränkter Datei-Upload | Der eigene Name der hochgeladenen Datei wird zum Erstellen des Speicherpfads verwendet | Blockiert |
| SSRF | Der Server ruft eine URL ab, die nicht fest codiert ist | Warnt |
| Offene Weiterleitung | Ein Weiterleitungsziel, das nicht fest codiert ist | Warnt |
| Massenzuweisung | Der gesamte Anforderungstext wird an einen Modellkonstruktor oder eine Update-Funktion übergeben | Warnt |
| Sensible Daten im Anforderungstext | E-Mails, Passwörter, Token usw., die aus dem Anforderungstext gelesen werden | Warnt |
| Sensible Daten in einer URL/Abfrage | E-Mails, Passwörter, Token usw., die aus der Abfragezeichenfolge gelesen werden | Warnt |
| Sensible Daten in Headern | E-Mails, Passwörter, Token usw., die aus Anforderungs-Headern gelesen werden | Warnt |
| Dateipfad aus Benutzereingabe | Eine Variable, kein fest codierter String, wird als Dateipfad verwendet | Warnt |
| CLI-Argumente | Daten stammen aus Befehlszeilenargumenten | Warnt |
| Standard-Eingabe | Daten stammen von stdin | Warnt |
| Umgebungsvariablen | Daten stammen aus einer Umgebungsvariable | Warnt |
| Nicht fixierte GitHub-Aktion | Ein Workflow verwendet einen veränderlichen Tag (@v4) anstelle eines Commit-SHA | Warnt |
Unsicheres pull_request_target | Ein Workflow verwendet den pull_request_target-Trigger | Warnt |
| Protokollierung von Anmeldeinformationen | Ein Passwort, API-Schlüssel oder Token wird an print/console.log/einen Logger übergeben | Warnt |
| Hartcodiertes Geheimnis | Eine Variable, die wie ein Geheimnis benannt ist, erhält einen echt aussehenden Literalwert | Warnt |
Die vollständige, aktuelle Liste befindet sich in guidance.TECHNICAL_RISKS und
formatter.BLOCKING_CATEGORIES, falls diese Tabelle jemals abweicht.
┌───────────────────────────────┐
│ You ask Claude Code to │
│ write or edit a file │
└───────────────┬───────────────┘
│
▼
┌───────────────────────────────┐
│ Claude Code tries to save │
│ the file (Write/Edit tool) │
└───────────────┬───────────────┘
│
▼
┌───────────────────────────────┐
│ VibeGate hook │
│ (runs automatically, │
│ before the file is saved) │
└───────────────┬───────────────┘
│
scans the new code with Semgrep
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌────────────────────┐ ┌────────────────────┐ ┌──────────────────────┐
│ No risky input │ │ Risky input, │ │ Risky input reaches │
│ found │ │ but lower risk │ │ a critical sink │
│ │ │ (e.g. shown in │ │ (SQL/command/RCE, │
│ │ │ an HTTP reply) │ │ template injection) │
└─────────┬──────────┘ └─────────┬──────────┘ └───────────┬──────────┘
│ │ │
▼ ▼ ▼
File is saved, File is saved, File is NOT saved.
nothing shown. plus a warning in Claude Code sees
the terminal with the block reason
risk + how to fix it. and is told what
to fix.
Kurz gesagt: Sicherer Code passiert unberührt, riskanter aber überlebensfähiger Code wird mit einer Warnung gespeichert, und Code, der nur einen Schritt von SQL-Injection, Befehlseinschleusung oder Remote-Code-Ausführung entfernt ist, wird gestoppt, bevor er die Festplatte erreicht.
Wenn VibeGate selbst auf einen unerwarteten Fehler stößt, lässt es den Schreibvorgang immer durch – ein Fehler im Hook sollte niemals der Grund dafür sein, dass Ihre Arbeit blockiert wird.
Jede Warnung und jeder Block enthält auch eine explizite Anweisung an Claude Code, den Fund in seiner Antwort zu erwähnen, nicht nur stillschweigend zu beheben. Dadurch wird die Aktivität von VibeGate im Gespräch sichtbar, nicht nur in einem Terminalprotokoll, das Sie erst suchen müssten.