DEV Community

AgentGuard
AgentGuard

Posted on

Ich habe mein eigenes Repo angegriffen — mein PR-Bot hat den Angriff selbst blockiert

Coding-Agents sind die neue Benchmark für Dev-Teams: Claude Code, Cursor, Codex & Co. lesen dein Repo — und vertrauen ihm. Ich habe mich gefragt: Was passiert, wenn jemand eine Anweisung ins Repo schmuggelt, die der Agent bereitwillig ausführt?

Also habe ich AgentGuard gebaut — ein CI-Gate für Agent-Konfigurationen (AGENTS.md, Skills, MCP-Server, Hooks). Und ich habe mein eigenes Repo mit 12 gezielten Angriffen bestückt. Das ehrliche Protokoll:

1. Die Angriffe waren leicht zu verstecken

12 Payloads: eine versteckte Instruction-Override-Anweisung in der AGENTS.md, unsichtbare Zero-Width-Zeichen in einer Skill-Datei, ein typ-squatted MCP-Server-Host, ein Hook, der Netzwerk-Inhalt in eine Shell piped, ein committeter API-Key, ein Agent mit wildem Bash-Zugriff … Jeder davon wirkt in einem PR-Review völlig normal.

AgentGuard erkennt alle 12 — deterministisch, ohne LLM im Scan-Pfad — mit 47 Unit-Tests, die das für immer beweisen (12/12 erkannt, 0 False Positives im sauberen Kontroll-Repo).

2. Der Realitätscheck: 30 Repos, 5 mit kritischen Befunden

Ich habe 30 öffentliche Repos über die GitHub-Code-Suche nach AGENTS.md gescannt — darunter Google, Microsoft und Nextcloud. 5 mit kritischen Befunden. Der spannendste: ein unsichtbares Zeichen direkt vor einem Bash-Block in einer Agenten-Spec. Zufall oder Absicht? Genau dafür ist das Tool da. Jeder Befund wurde manuell byte-genau geprüft und ist öffentlich: Echtwelt-Befunde.

3. Doppeltes Dogfooding

Zwei Dinge passierten, die ich nicht besser hätte inszenieren können:

(a) GitHubs eigene Push-Protection blockierte einen meiner Pushes — ein Fake-Token in meiner eigenen Testdatei löste GH013: Push cannot contain secrets aus. Der größte Code-Host der Welt hat an meinem Repo demonstriert, was AgentGuard bei deinem fängt.

(b) Wochen später, nach dem v0.2.1-Bypass-Schutz, blockierte unser eigenes Gate unseren eigenen Pull-Request beim Selbsttest — die neue Regel ignoriert jede .agentguard-ignore, die in einem PR mitgeliefert wird, und unser Selbsttest-Workflow hatte sich auf das alte Verhalten verlassen. Roter Check. Merge verweigert. Funktioniert wie designed. Die ganze Geschichte steht im Changelog.

Gestern hat mein eigenes Sicherheits-Tool meinen eigenen Pull-Request geblockt. Das ist die beste Demo, die ein Sicherheitsprodukt haben kann.

4. Was in v0.2.1 kam

  • Fail-closed Gates: Ein Tippfehler in exit-on deaktiviert das Gate nicht mehr still — es bricht laut ab.
  • PR-Bypass-Schutz: Eine im PR mitgelieferte .agentguard-ignore wird ignoriert; Ausnahmen kommen nur aus dem vertrauenswürdigen Workflow.
  • Gehärteter Pro-Server: HMAC-Längenprüfung, 1-MB-Webhook-Body-Limit, Installation pro Repo, sicheres Tarball-Entpacken (Größenlimit, Symlink-/Traversal-Abweisung).
  • Neue Secret-Muster: Private Keys, GitHub-PATs, npm, Stripe, Slack-Webhooks. Details in SECURITY.md.

5. Der Bot blockierte einen Angriff live

Die GitHub-App kommentiert jeden PR mit Note und Befunden und setzt ein Check-Run-Gate. Der Beweis ist ein echter Pull-Request: Ein gepflanzter Angriff bekam Note E, einen roten Check und keinen Mergelive ansehen.

6. Die Landingpage zeigt jetzt den Moment

Die Landingpage hat ein Live-Scan-Terminal im Hero: Es tippt sich durch Dateien, findet die gepflanzte Anweisung und endet im grünen MERGE-GEBLOCKT-Moment — genau das Gefühl, das dieses Produkt verkauft: Dein Agent liest dein Repo. Dein Gate liest mit. Gemessene Qualität statt Deko: Lighthouse 100/100/100/100 auf Desktop und Mobile, LCP 179 ms, CLS ~0, kein Horizontal-Scroll bis 320 px.

Probier es aus

MIT-lizenziert, kostenlos für öffentliche Repos auf dem GitHub Marketplace. Schick dein Repo und bekomm einen kostenlosen Erst-Scan — oder stell die Anfrage direkt: Audit/Trial/RedTeam-Formular.

🔗 Code: https://github.com/agentguard-dev/agentguard
🛒 Marketplace: https://github.com/marketplace/actions/agentguard-security
📊 Verifizierte Befunde: https://github.com/agentguard-dev/agentguard/blob/main/docs/REAL-WORLD-FINDINGS.md
🔴 Live-Demo (Angriff geblockt): https://github.com/agentguard-dev/agentguard-demo/pull/2
🌐 Landingpage: https://agentguard-dev.github.io/agentguard/

Top comments (1)

Collapse
 
alexshev profile image
Alex Shev

The self-blocked PR is a strong demonstration because it proves the gate has authority over its own maintenance path. One extra safeguard worth documenting is a separate, reviewable break-glass workflow with a time-bound exception and an immutable receipt. Otherwise the bypass path can quietly become the real policy surface.