AI Code Security — vier Agenten, die erkennen, was SAST in KI-generiertem Code übersieht. Basiert auf der GitLab Duo Agent Platform.
40-62 % des KI-generierten Codes enthalten Sicherheitslücken. Herkömmliche SAST erkennt CVEs. Wir erkennen was SAST übersieht — Prompt Injection, LLM-Output-Ausführung, unsicheres ML-Deserialisieren.
KI beschleunigt die Codegenerierung, schafft aber neue Sicherheitsengpässe:
| Problem | Auswirkung |
|---|---|
| Sicherheitsprüfungen blockieren MRs stunden- oder tagelang | 7 Std./Woche Verlust pro Teammitglied |
| KI erschwert Compliance-Management | 70 % der Teams berichten dies |
| Compliance-Probleme erst nach Deployment entdeckt | 76 % der Organisationen |
| Herkömmliche SAST-Tools übersehen KI-spezifische Risiken | Prompt Injection, LLM-Output-zu-Ausführung, unsicheres ML-Deserialisieren |
| 40-62 % des KI-generierten Codes haben Sicherheitslücken | Kein bestehendes Tool erkennt KI-spezifische Bedrohungsmuster |
Quelle: GitLab 2025 Global DevSecOps Report
AgentFlow Auditor — Vier KI-Agenten, die Sicherheitsrisiken erkennen, die herkömmliche SAST bei KI-generiertem Code übersieht. 41 Erkennungsregeln, darunter LLM Prompt Injection, Output-zu-Ausführung, unsicheres Deserialisieren, SQL Injection, SSRF sowie Pfadüberquerung. Veröffentlicht scannbare Berichte, generiert Fix-Patches, verfolgt Risikodrift. Ein @mention löst alles aus.
Developer opens MR │ ▼ @duo-agentflow-auditor review this MR │ ▼ ┌───────────────────────────────────────────────────────┐ │ │ │ ┌─────────────┐ ┌──────────────────┐ │ │ │ Scanner │──────▶│ Reporter │ │ │ │ Agent │ │ Agent │ │ │ │ │ │ │ │ │ │ Read diffs │ │ Grade risk │ │ │ │ Match 34 │ │ Risk heatmap │ │ │ │ rules │ │ Post MR comment │ │ │ │ Score risk │ │ Create issue │ │ │ └─────────────┘ └────────┬─────────┘ │ │ │ │ │ ┌───────┴────────┐ │ │ │ SAFE? │ │ │ │ ├─ Yes ──────────────┐ │ │ │ └─ No ───┐ │ │ │ │ └───────────┘ │ │ │ │ │ │ │ │ │ ┌─────────────┐ ┌────────▼───────┘┐ │ │ │ │ Metrics │◀──────│ Fixer │ │ │ │ │ Agent │ │ Agent │ │ │ │ │ │◀──────────────────────────────┘ │ │ │ Baseline │ │ Confidence-scored│ │ │ │ Cross-MR │ │ patches │ │ │ │ Green │ │ Fix branch + MR │ │ │ │ Posture │ │ │ │ │ └─────────────┘ └─────────────────┘ │ │ │ │ GitLab Duo Agent Platform (ambient) │ │ │ │ ┌───────────────────────────────────────────┐ │ │ │ External SAST Agent (CI/CD container) │ │ │ │ bandit + semgrep + custom rules merge │ │ │ └───────────────────────────────────────────┘ │ └───────────────────────────────────────────────────────┘
### Agentenliste
| Agent | Rolle | Werkzeuge | Schlüsselfähigkeit |
|:------|:------|:----------|:-------------------|
| **Scanner** | Analysiere MR-Diffs | 10 Werkzeuge | 41 Regeln (26 Regex + 15 Semgrep), KI-spezifische Bedrohungserkennung, Schwachstellenintegration |
| **Reporter** | Auditberichte veröffentlichen | 7 Werkzeuge | Scannbar in 10s (Note + Heatmap + Top 5), Schwachstellenverknüpfung, automatisches Issue bei DANGER |
| **Fixer** | Code-Korrekturen generieren | 8 Werkzeuge | Konfidenz-bewertete Patches (HIGH/MEDIUM/LOW), automatische MR-Erstellung zur Korrektur |
| **Metrics** | Risikobasislinie verfolgen | 6 Werkzeuge | MR-übergreifendes Lernen, Team‑Posture, Basislinien‑Drift, Energie‑/Kohlenstoffverfolgung |
| **SAST Scanner** | Externes SAST | CI/CD | Führt bandit + semgrep aus, führt Zusammenführung mit benutzerdefinierten Regeln via Python‑Skript durch |
---
## Funktionen
<table>
<tr>
<td width="50%">
### Sicherheitsscan
- **41 Erkennungsregeln** — 26 Regex + 15 benutzerdefinierte Semgrep‑Regeln
- **8 Risikokategorien** — Von zerstörerischen Befehlen bis Prompt Injection
- **KI-spezifische Erkennung** — LLM Prompt Injection, Output‑to‑Exec, unsichere Deserialisierung
- **Risikobewertung** — 0‑100 pro Fund (Schweregrad x Kontext x Kategorie)
- **Notensystem** — SAFE / WARNING / DANGER
</td>
<td width="50%">
### Automatisierung
- **Ein‑Klick‑Aktivierung** — `@mention` oder Reviewer zuweisen
- **Bedingte Weiterleitung** — SAFE‑Scans überspringen Fixer, spart Tokens
- **Strukturierte MR‑Kommentare** — Risikotabellen, Korrekturvorschläge, aufklappbare Details
- **Automatische Korrekturerzeugung** — Code‑Patches auf einem neuen Branch
- **Issue‑Erstellung** — Automatisch bei DANGER‑Note
</td>
</tr>
<tr>
<td width="50%">
### Basislinienverfolgung
- **Risiko‑Drift‑Erkennung** — Scans im Zeitverlauf vergleichen
- **Trendanalyse** — Verbesserung / Verschlechterung / Stabil
- **Korrektur‑Übernahmerate** — Verfolgen, wie viele Vorschläge angewendet wurden
- **Verlaufsprotokoll** — JSONL‑Anhang pro Scan
</td>
<td width="50%">
### Grüne Metriken
- **Token‑Verfolgung** — Nutzung pro Scan
- **Energieschätzung** — kWh pro Scan
- **CO2‑Fußabdruck** — kg CO2 mit realen Analogien
- **Optimierungsvorschläge** — Scan‑Umfang reduzieren, Basislinien cachen
</td>
</tr>
</table>
---
## Erkennungskategorien
### Benutzerdefinierte Semgrep‑Regeln
15 produktionsreife Semgrep‑Regeln in 6 Kategorien:
| Regel | Kategorie | Schweregrad | Erkennung |
|:------|:----------|:------------|:----------|
| `llm-prompt-injection` | KI‑Sicherheit | WARNING | Benutzereingabe fließt in LLM‑API‑Aufrufe |
| `llm-output-code-exec` | KI‑Sicherheit | ERROR | LLM‑Ausgabe an exec/eval übergeben |
| `unsafe-deserialization-ml` | KI‑Sicherheit | WARNING | pickle.load, torch.load auf nicht vertrauenswürdigen Modellen |
| `sql-injection` | Websicherheit | ERROR | Zeichenfolgenformatierte SQL‑Abfragen (f‑string, .format, concat) |
| `path-traversal` | Websicherheit | ERROR | Benutzereingabe in Dateipfad‑Operationen (../ Traversal) |
| `ssrf-request-forgery` | Websicherheit | ERROR | Benutzergesteuerte URLs in HTTP‑Anfragen |
| `open-redirect` | Websicherheit | WARNING | Benutzereingabe in Weiterleitungsfunktionen |
| `missing-input-validation` | Websicherheit | WARNING | Anforderungsdaten ohne Schema‑Validierung verwendet |
| `dangerous-eval-exec` | Python | WARNING | eval/exec mit dynamischem Inhalt |
| `subprocess-shell-true` | Python | WARNING | subprocess mit shell=True |
| `dangerous-os-system` | Python | WARNING | os.system/popen (veraltet) |
| `insecure-random-python` | Kryptographie | WARNING | random‑Modul für Sicherheitstoken |
| `insecure-random-javascript` | Kryptographie | WARNING | Math.random() für Sicherheitstoken |
| `hardcoded-credentials` | Geheimnisse | WARNING | Hartcodierte Passwörter, API‑Schlüssel, Token |
| `insecure-http` | Netzwerk | INFO | HTTP‑URLs (mit Autofix zu HTTPS) |
### Regex‑Erkennungskategorien
| Kategorie | Schweregrad | Beispielmuster |
|:----------|:------------|:---------------|
| Zerstörerische Befehle | 🚨 Danger | `rm -rf /`, `mkfs`, `dd to disk` |
| Credential‑Exfiltration | 🚨 Danger | `curl` sendet Geheimnisse an externe URLs |
| Prompt Injection (schwerwiegend) | 🚨 Danger | „Vorherige Anweisungen ignorieren“, Rollenüberschreibungen |
| Verschleierte Ausführung | 🚨 Danger | `base64 -d \| bash`, entfernte Pipe zur Shell |
| Shell‑Ausführung | ⚠️ Warning | `shell=True`, `eval()`, `exec()`, `os.system()` |
| Netzwerkaufrufe | ⚠️ Warning | `curl`/`wget`/`fetch` an externe URLs |
| Unsicherer Transport | ⚠️ Warning | `http://` wo `https://` verwendet werden sollte |
| Hartcodierte Anmeldeinformationen | ⚠️ Warning | Passwörter, API‑Schlüssel, Token im Quellcode |
### Risikoscore‑Formel```
score = severity_weight + category_weight + executable_context + actionable + risk_modifier
= clamp(0, 100)
severity_weight: danger=50, warning=25
category_weight: destructive-command=15, credential-exfil=15, prompt-injection=10, ...
executable_context: +20 if file is .sh/.py/.js/.ts
actionable: +15 if executable AND not in trusted domain allowlist
risk_modifier: per-rule adjustment (0-15)
| Note | Bedingung | Aktion |
|---|---|---|
| 🚨 GEFAHR | max_risk >= 90 OR high_risk_findings >= 3 | Merge blockieren + Issue erstellen |
| ⚠️ WARNUNG | max_risk >= 70 OR high_risk_findings >= 1 | Vor dem Merge überprüfen |
| ✅ SICHER | Kein bedeutendes Risikosignal | Merge sicher |
git clone https://gitlab.com/centisgood/duo-agentflow-auditor.git cd duo-agentflow-auditor
> 📖 Vollständiger Mirroring-Leitfaden (3 Methoden, CI-Setup, Synchronisierungsstrategien): [`docs/GITLAB_MIRROR_GUIDE.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/docs/GITLAB_MIRROR_GUIDE.md)
### 2. Agents & Flow automatisch veröffentlichen
Die Hackathon-Gruppe erzwingt eine [zentrale CI-Pipeline](https://gitlab.com/gitlab-ai-hackathon/ci) über eine [Sicherheitsrichtlinie](https://gitlab.com/gitlab-ai-hackathon/security-policies). Wenn Sie in GitLab pushen, veröffentlicht der `catalog-sync`-Job **automatisch** alle `agents/*.yml` und `flows/*.yml` im AI-Katalog – kein manuelles Setup oder Git-Tags erforderlich.
> Ihre projektbezogene `.gitlab-ci.yml` wird durch die zentrale Pipeline der Hackathon-Gruppe überschrieben. Die enthaltene `.gitlab-ci.yml` dient nur als Referenz.
| # | Agent | Katalogdatei | Prompt-Dokumente | Werkzeuge |
|---|-------|-------------|-------------|-------|
| 1 | Scanner | [`agents/scanner.yml`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/agents/scanner.yml) | [`agents/scanner.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/agents/scanner.md) | 8 Werkzeuge |
| 2 | Reporter | [`agents/reporter.yml`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/agents/reporter.yml) | [`agents/reporter.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/agents/reporter.md) | 6 Werkzeuge |
| 3 | Fixer | [`agents/fixer.yml`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/agents/fixer.yml) | [`agents/fixer.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/agents/fixer.md) | 8 Werkzeuge |
| 4 | Metrics | [`agents/metrics.yml`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/agents/metrics.yml) | [`agents/metrics.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/agents/metrics.md) | 5 Werkzeuge |
Flow: [`flows/security-audit.yml`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/flows/security-audit.yml) – 4-Agent-Pipeline mit Scanner → Reporter → Fixer → Metrics-Routing.
<details>
<summary>Alternative: Manuelles Setup über GitLab-Benutzeroberfläche</summary>
**Agents**: Automate → Agents → New agent → System-Prompt aus `.md`-Dateien einfügen
**Flow**: Automate → Flows → New flow → Definition aus [`flows/security-audit.yml`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/flows/security-audit.yml) einfügen
</details>
### 3. Trigger aktivieren
| Auslöser | Vorgehen |
|---------|-----|
| Erwähnung | Kommentieren Sie `@duo-agentflow-auditor` in einem beliebigen MR |
| Reviewer zuweisen | Weisen Sie das Dienstkonto als MR-Reviewer zu |
### 4. Ausprobieren```bash
# Create test branch with vulnerable code
git checkout -b test/security-audit
cp examples/vulnerable-mr/* .
git add . && git commit -m "test: add vulnerable code for audit"
git push origin test/security-audit
# Open MR → Comment: @duo-agentflow-auditor please review this MR
Ausführliche Anleitung: Siehe
docs/SETUP_GUIDE.md
Grade: 🚨 DANGER Recommendation: FAIL — do not merge without fixes
| Risk | File | Findings | Max Score |
|---|---|---|---|
| 🟥🟥🟥🟥🟥 | unsafe_script.py | 5 | 95 |
| 🟥🟥🟥🟧⬜ | risky_config.yaml | 3 | 78 |
| 🟧🟧⬜⬜⬜ | insecure_fetch.js | 2 | 62 |
🚨 unsafe_script.py:55 — rm -rf (95/100) 🚨 unsafe_script.py:13 — shell=True (88/100) 🚨 unsafe_script.py:27 — eval() (85/100) ⚠️ insecure_fetch.js:41 — HTTP (62/100)
### Grüne Metriken```markdown
### 🌱 Sustainability Report
| Metric | Value |
|---------------------|---------------------|
| Tokens Used | 12,450 |
| Energy | 0.0037 kWh |
| CO₂ Footprint | 0.0014 kg |
| Efficiency | 2.4 findings/1K tok |
💡 LED bulb for 13 seconds | 🚗 Car driving 5.6 meters
duo-agentflow-auditor/ │ ├── agents/ │ ├── scanner.yml # Catalog agent — security scanner │ ├── reporter.yml # Catalog agent — report generator │ ├── fixer.yml # Catalog agent — auto-fix patches │ ├── metrics.yml # Catalog agent — green metrics │ ├── scanner.md # Detailed prompt documentation │ ├── reporter.md # Detailed prompt documentation │ ├── fixer.md # Detailed prompt documentation │ └── metrics.md # Detailed prompt documentation │ ├── flows/ │ └── security-audit.yml # Catalog flow — conditional routing pipeline │ ├── scripts/ │ ├── merge_sast_results.py # SAST result merger (bandit + semgrep + custom rules) │ └── demo.sh # E2E demo automation (glab CLI) │ ├── tests/ │ └── test_merge_sast_results.py # 76 pytest tests — scoring, grading, parsing │ ├── .gitlab/ │ └── duo/ │ └── flows/ │ └── sast-scanner.yaml # External SAST agent (CI/CD container) │ ├── rules/ │ ├── danger_rules.json # 11 high-severity detection patterns │ ├── warning_rules.json # 15 medium-severity detection patterns │ └── semgrep/ # 15 Semgrep custom rules │ ├── ai-security/ # LLM prompt injection, output exec, unsafe deser │ ├── web-security/ # SQL injection, path traversal, SSRF, open redirect, input validation │ ├── python-security/ # eval/exec, subprocess, os.system │ ├── crypto/ # Insecure random (Python + JavaScript) │ ├── secrets/ # Hardcoded credentials │ └── network/ # Insecure HTTP (with autofix) │ ├── Dockerfile # Production SAST container (python:3.11-slim) ├── requirements.txt # bandit + semgrep dependencies │ ├── examples/ │ ├── vulnerable-mr/ # Intentionally risky code (demo) │ │ ├── unsafe_script.py # shell=True, eval(), rm -rf, cred leak │ │ ├── risky_config.yaml # Prompt injection, hardcoded secrets │ │ └── insecure_fetch.js # HTTP, exec(), token exposure │ └── safe-mr/ # Secure code for contrast (demo) │ ├── safe_script.py │ ├── safe_config.yaml │ └── safe_script.js # HTTPS, execFile, env vars │ ├── docs/ │ ├── SETUP_GUIDE.md # Step-by-step setup │ ├── EXECUTION_PLAN.md # Implementation plan │ ├── WOW_MOMENTS.md # Visual impact & demo choreography │ ├── DEVPOST_SUBMISSION.md # Devpost submission draft │ └── GITLAB_MIRROR_GUIDE.md # GitHub → GitLab mirroring │ ├── .gitlab-ci.yml # CI — catalog-sync + validation ├── AGENTS.md # Project-level agent customization ├── IMPLEMENTATION.md # Architecture & design document ├── CONTRIBUTING.md # Contribution guidelines ├── LICENSE # MIT License └── README.md # This file
---
## Technologie
| Komponente | Technologie |
|:----------|:-----------|
| **Plattform** | GitLab Duo Agent Platform (GA in GitLab 18.8) |
| **KI-Modell** | Anthropic Claude Sonnet |
| **Flow-Schema** | Flow Registry v1 (`ambient`-Umgebung) |
| **Auslöser** | Mention, Assign, Assign Reviewer |
| **Agentenwerkzeuge** | 30+ GitLab integrierte Werkzeuge über 4 Agenten (inkl. Schwachstellenverknüpfung) |
| **Erkennung** | 41 Regeln: 26 Regex + 15 Semgrep (KI-Sicherheit, Websicherheit, Krypto, Geheimnisse, Netzwerk) |
| **Externes SAST** | Dockerisierte Bandit- + Semgrep-Pipeline mit Ergebniszusammenführung |
| **Testen** | 76 pytest-Tests, die Bewertung, Benotung und Parsing abdecken |
| **Ausgabe** | Markdown-MR-Kommentare, GitLab Issues, Fix-MRs |
---
## Dokumentation
| Dokument | Beschreibung |
|:---------|:-----------|
| [`IMPLEMENTATION.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/IMPLEMENTATION.md) | Architektur, Bewertungsformel, Demo-Skript, Ausrichtung der Bewertung |
| [`docs/SETUP_GUIDE.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/docs/SETUP_GUIDE.md) | 7-Schritte-Anleitung mit Fehlerbehebung |
| [`docs/EXECUTION_PLAN.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/docs/EXECUTION_PLAN.md) | 6-Phasen-Plan mit ~35 granularen Aufgaben |
| [`docs/WOW_MOMENTS.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/docs/WOW_MOMENTS.md) | Design der visuellen Wirkung & Demo-Choreografie |
| [`docs/DEVPOST_SUBMISSION.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/docs/DEVPOST_SUBMISSION.md) | Text zum Kopieren und Einfügen in das Einreichungsformular |
| [`AGENTS.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/AGENTS.md) | Anpassung der Projekt-Scanning-Optionen |
| [`docs/GITLAB_MIRROR_GUIDE.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/docs/GITLAB_MIRROR_GUIDE.md) | GitHub → GitLab Spiegelung (3 Methoden) |
| [`CONTRIBUTING.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/CONTRIBUTING.md) | Wie man beiträgt |
---
## Testen
---```bash
# Run the full test suite (76 tests)
python -m pytest tests/ -v
# Run with coverage
python -m pytest tests/ --cov=scripts --cov-report=term-missing
Tests umfassen: JSON-Laden, Regelparsing, Normalisierung von Schweregrad/Kategorie, Risikobewertungsformel, Noteneinstufung, Parsen der Bandit/Semgrep-Ausgabe, Deduplizierung von Funden und den CLI-Einstiegspunkt.
scripts/demo.sh
scripts/demo.sh --gitlab-remote origin
scripts/demo.sh --cleanup
Das Demoscript erstellt einen Test-MR mit verwundbarem Code, löst den Auditor über `@mention` aus und fragt nach Ergebnissen.
---
## Mitwirken
Siehe [`CONTRIBUTING.md`](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/CONTRIBUTING.md) für Richtlinien.
**Kurzzusammenfassung:**
1. Repository forken
2. Einen Feature-Branch erstellen (`git checkout -b feature/amazing`)
3. Änderungen committen (`git commit -m 'feat: add amazing feature'`)
4. In den Branch pushen (`git push origin feature/amazing`)
5. Einen Merge Request öffnen
---
## Das KI-Paradoxon – Warum dies wichtig ist
<div align="center">
| Ohne AgentFlow Auditor | Mit AgentFlow Auditor |
|:--------------------------|:----------------------|
| MR wartet 2+ Tage auf Review | **45 Sekunden** bis zum vollständigen Audit |
| SAST übersieht KI-spezifische Risiken | **41 Regeln** inkl. 3 KI-spezifische + 7 Websicherheitsbedrohungen |
| Keine Korrekturvorschläge | **Konfidenz-bewertete Patches** (HOCH/MITTEL/NIEDRIG) |
| SAFE-Scans verschwenden Fixer-Token | **Bedingtes Routing** überspringt Fixer |
| Keine Nachverfolgung über Zeit | **Lernfähigkeit über MRs hinweg** + Team-Posture |
| Kein Energiebewusstsein | **Grüne Metriken** pro Scan |
</div>
---
## Lizenz
Dieses Projekt ist unter der [MIT-Lizenz](https://gitlab.com/centisgood/duo-agentflow-auditor/-/blob/main/LICENSE) lizenziert.
---
<div align="center">
**Ein Trigger. Vier Agenten. Null KI-Blindstellen.**
Erstellt mit der [GitLab Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/) und [Anthropic Claude](https://www.anthropic.com/)
</div>