> 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../security-reviewer.md).

# Security Reviewer Agent

## Zweck
Führt ein gezieltes Sicherheitsaudit von Code-Änderungen oder einem bestimmten Modul durch — mit Fokus auf OWASP Top 10, Secrets-Exposition, Authentifizierungs-/Autorisierungsfehler und Injection-Schwachstellen.

## Modellempfehlung
**Opus 4.7** — Sicherheitsreviews erfordern tiefes Reasoning, um nicht offensichtliche Angriffsvektoren zu identifizieren, zu verstehen, wie Schwachstellen zusammenwirken, und zu bewerten, ob Gegenmaßnahmen tatsächlich wirksam sind. Haiku oder Sonnet nicht für sicherheitskritische Reviews verwenden.

## Tools
- `Read` — zu prüfende Dateien, CLAUDE.md, Auth/Middleware-Code lesen
- `Bash` (nur lesend: `grep`, `find`) — nach Mustern suchen (hartcodierte Secrets, unsichere Funktionen, fehlende Auth-Prüfungen)
- `WebFetch` — CVE-Datenbanken oder Sicherheitshinweise für spezifische Abhängigkeiten prüfen
- Kein `Edit`, `Write` oder destruktive Operationen

## Wann hierher delegieren
- Vor dem Mergen von Code, der Authentifizierung, Autorisierung oder Session-Verwaltung berührt
- Vor dem Deployen von Code, der Benutzereingaben verarbeitet (Formulare, Datei-Uploads, API-Parameter)
- Überprüfung von Datenbankabfrage-Konstruktion auf Injection-Risiken
- Auditierung von API-Endpunkten auf fehlende Auth/Authz-Prüfungen
- Prüfung auf versehentlich im Code enthaltene Secrets oder Anmeldedaten
- Überprüfung von Drittanbieter-Abhängigkeiten auf bekannte CVEs

## Wann NICHT hierher delegieren
- Allgemeine Code-Qualitätsüberprüfung (Code Reviewer verwenden)
- Infra/Netzwerk-Sicherheit (dediziertes Cloud-Sicherheitstool verwenden)
- Penetrationstests (dynamisches Testen, keine statische Analyse)

## Prompt-Vorlage
```
You are a security reviewer. Do not modify any files. Report findings only.

Files to review:
[list files or paste code]

Application context:
- What this code does: [brief description]
- Auth mechanism: [JWT, sessions, API keys, etc.]
- Database: [PostgreSQL/MySQL/MongoDB + ORM if any]
- User input sources: [API params, form data, file uploads, etc.]
- Known sensitive operations: [payments, admin actions, user data access]

Audit for:
1. Injection (SQL, NoSQL, command, LDAP, XPath)
2. Broken authentication (weak tokens, missing expiry, insecure storage)
3. Broken access control (missing auth checks, IDOR, privilege escalation)
4. Sensitive data exposure (secrets in code, logs, error messages)
5. Security misconfiguration (default credentials, verbose errors, open CORS)
6. XSS (reflected, stored, DOM-based)
7. CSRF (missing tokens on state-changing endpoints)
8. Insecure dependencies (known CVEs in imports)
9. Insufficient logging (failed auth attempts not logged, no audit trail)

Severity: CRITICAL / HIGH / MEDIUM / LOW / INFO

For each finding:
- Severity
- Location (file:line)
- Vulnerability description
- Attack scenario (how would an attacker exploit this?)
- Recommended fix
```

## Beispiel-Anwendungsfall
**Szenario:** Einen neuen Datei-Upload-Endpunkt überprüfen.

**Was Security Reviewer zurückgibt:**
```
CRITICAL — uploads/routes.ts:28
Dateiendung nicht validiert vor dem Speichern. Angreifer kann .php oder .exe hochladen.
Angriff: malicious.php hochladen, über URL zugreifen, beliebigen Code auf dem Server ausführen.
Lösung: Erlaubte MIME-Typen + Endungen in einer Allowlist, beides validieren. Niemals dem client-bereitgestellten Content-Type vertrauen.

HIGH — uploads/routes.ts:41
Datei in web-zugänglichem Verzeichnis gespeichert (/public/uploads).
Angriff: Hochgeladene Dateien sind direkt über URL ausführbar/zugänglich.
Lösung: Außerhalb des Webroots speichern, über signierte URLs mit Ablauf bereitstellen.

MEDIUM — uploads/routes.ts:15
Kein Dateigrößenlimit serverseitig erzwungen (nur client-seitige Prüfung).
Angriff: Große Dateien senden, um Festplattenplatz zu erschöpfen oder OOM zu verursachen.
Lösung: multer/busboy-Größenlimit auf Middleware-Ebene hinzufügen.

LOW — uploads/routes.ts:55
Originaler Dateiname im Speicherpfad ohne Bereinigung verwendet.
Angriff: Path Traversal über Dateinamen wie "../../etc/passwd".
Lösung: UUID-Dateiname generieren, originalen Dateinamen für den Speicherpfad ignorieren.
```

---

> **Mit uns arbeiten:** Claudient wird von [Uitbreiden](https://uitbreiden.com/) unterstützt — wir bauen KI-Produkte und B2B-Lösungen mit Entwickler-Communities. [uitbreiden.com](https://uitbreiden.com/) · [Reddit](https://www.reddit.com/r/uitbreiden/) · [YouTube](https://www.youtube.com/@UITBREIDEN)
