Security-Audit — Voll-Lauf 2026-05-15
Erster komplett-paralleler Lauf des security-audit-Skills ueber alle Production-Scopes. Modus tief (Confidence-Gate 2/10). Sieben Sub-Audits, ein konsolidierter Top-3-Block.
Scope-Index
| # | Scope | Report | Severity-Max | Ampel |
|---|---|---|---|---|
| 1 | Hosted MCPs (vf-hosted + whatsapp) | 01-hosted-mcps.md | 2 CRIT | 🛑 |
| 2 | agents-platform (CDK + Lambda) | 02-agents-platform.md | 1 HIGH | 🟢 |
| 3 | Eigenbau-MCPs lokal (11 Repos) | 03-eigenbau-mcps.md | 1 HIGH (whatsapp) | 🟢 |
| 4 | AV-Vault + Plugin | 04-vault-plugin.md | 1 CRIT | 🛑 |
| 5 | AWS Org cross-account | 05-aws-org.md | 2 CRIT | 🛑 |
| 6 | Icking-Rebuild (FastAPI + Bedrock) | 06-icking-rebuild.md | 2 HIGH | 🟡 |
| 7 | Hetzner + DNS + Cloudflare | 07-hetzner-dns.md | 2 HIGH (DNSSEC/Stirling) | 🟡 |
TOP-3 — sofort, heute noch
Diese drei zuerst. Nicht die Liste unten, nicht die einzelnen Reports — diese drei.
1. CRIT — mcp-whatsapp /mcp ohne Auth, /webhook ohne HMAC
Wo: mcp-whatsapp.agenticventures.de, live seit 2026-05-14.
Was: Der /mcp-Endpoint laeuft mit FastMCP("whatsapp") ohne auth=...-Parameter. Verifiziert per curl — Server antwortet ohne 401, nur FastMCP-Session-State steht davor (keine echte Auth). Wer den Endpoint findet, kann send_text, raw_post, list_recent_messages aufrufen. Zusaetzlich validiert /webhook keine HMAC-SHA256 von Meta — beliebige POSTs landen in der Inbox und triggern Bot-Reaktionen.
Exploit: Angreifer initialisiert MCP-Session, schickt send_text → Marvins Meta-Token verschickt Spam/Phishing an WhatsApp-Nutzer. Oder POST an /webhook mit gefakten Meta-Payloads → injizierte Kundengespraeche im Friseur-Bot.
Fix-Reihenfolge:
- Heute: Cloudflare-Access-Policy vor
/mcp(nur Marvins Identity),/webhookdarf public bleiben aber NUR mit HMAC. - Morgen:
APP_SECRETaus Meta Developer Console → Secrets Manager → CDK-Mapping → Request-Handler validiertX-Hub-Signature-256mithmac.compare_digest. - Hardcoded Fallback
agentic-friseur-verify-2026raus,RuntimeErrorwenn env fehlt.
Blocker fuer Friseur-Live: ja.
2. CRIT — AWS Mgmt-Account: Root-Keys + IAM-User ohne MFA
Wo: AWS Org Mgmt-Account.
Was: Root-Access-Keys existieren (laut iam get-account-summary). IAM-User mkuehlmann hat 2 Access-Keys, 8+ Monate alt, keine MFA. Drei weitere Accounts (av-production, av-becker, mk-privat) haben keine Root-MFA.
Exploit: Ein einziger Key-Leak (Laptop-Verlust, Phishing-Mail mit gut gefaeschtem Anhang, einer der Tokens in ~/.claude.json waere der Einstieg) → Mgmt-Account-Uebernahme → Sub-Account-Pivot → komplette Org. Kein Reset moeglich ohne Anthropic/AWS-Support-Tickets.
Fix:
- Heute:
aws iam delete-access-keyfuer alle Root-Keys im Mgmt-Account. - Heute: MFA fuer
mkuehlmann(Hardware-Key oder Authenticator). - Diese Woche: Root-MFA fuer av-production, av-becker, mk-privat (3× Console-Login, ~30 Min).
- Diese Woche: Access-Keys von
mkuehlmannrotieren oder loeschen — wenn moeglich, ueber Identity-Center-Roles statt User-Keys arbeiten.
3. CRIT — Live-Tokens in ~/.claude.json
Wo: Marvins Maschine, ~/.claude.json (Klartext).
Was: GitHub-PAT gho_... und ElevenLabs-Key sk_... liegen ungeschuetzt in der Config-Datei. Datei landet bei jedem cat/grep als sichtbare Ausgabe.
Exploit: Lokale Malware/kompromittierter VS-Code-Extension/neugieriger Skill mit Bash-Zugriff liest die Datei → GitHub-PAT erlaubt Repo-Zugriff auf alle privaten Repos (inkl. Vault mit Kundendaten), ElevenLabs-Key erlaubt Stimm-Klone auf Marvins Account.
Fix:
- Heute: GitHub-PAT widerrufen + neuen anlegen, ElevenLabs-Key rotieren.
- Heute: Migration auf
op-Wrapper analog Hetzner-MCP (HCLOUD_TOKENviaop run). Neue Tokens in 1Password Vault, MCP-Configs ueberop item getresolven. - Skill-Workflow: pre-commit-Hook der
~/.claude.jsonSchutz triggert? Nicht trivial, separater Faden.
HIGH — diese Woche
| Scope | Finding | Fix-Aufwand |
|---|---|---|
| agents-platform | fast-uri CVE 7.5 via aws-cdk-lib (build-time) | npm audit fix, 5 Min |
| Hetzner DNS | DNSSEC + CAA fehlen auf agenticventures.de + marvinkuehlmann.com | ~15 Min, kostenlos |
| Hetzner av-tools-stirling-01 | pdf.agenticventures.de mit Stirling-Default-Login ohne Access-App davor | 30 Min |
| Hetzner av-tools-stirling-01 | SSH offen von 0.0.0.0/0, Default-Pwd admin/stirling-pdf | 30 Min |
| Vault | .claude/settings.local.json Allowlist zu breit (Bash(aws *), Bash(op item *)) | 1h Audit + Cleanup |
| icking-rebuild | /chat ohne Rate-Limit (slowapi vorhanden, Middleware nie verdrahtet) | 1-2h, Cost-Attack-Vektor |
| icking-rebuild | cloudflared-Sidecar essential=false — Tunnel-Crash haelt App reachable | 1-Zeilen-Fix |
MED — naechste 2 Wochen
| Scope | Finding | Notiz |
|---|---|---|
| agents-platform | dashboard-presignup leakt Whitelist-Modell an Client | generische Message |
| eigenbau-mcps | mcp-papierkram: 57 Write-Tools hinter einem OAuth-Scope (Blast-Radius gross) | read-only Variante fuer Pilot-Kunden |
| eigenbau-mcps | mcp-gsuite veraltete oauth2client==4.1.3 | Migration google-auth |
| hosted-mcps | mcp-whatsapp Stack pinnt cloudflared:latest ohne Digest | Pattern bei vf-hosted bereits richtig |
| hosted-mcps | mcp-whatsapp ohne CI/Lint/gitleaks | Workflow analog vf-hosted |
| vault | 260 internal-Files committed (Repo private, aber pre-commit-Guard fehlt) | pre-commit-Hook fuer visibility-Check |
| aws-org | 25 Secrets in av-prod ohne Rotation | Rotation-Schedule pro Secret pruefen |
| aws-org | GuardDuty nur in becker, 3/4 Accounts blind | Org-wide Delegated Admin, ~10 USD/Monat |
| aws-org | Kein Access Analyzer in keinem Account | pro Account aktivieren |
| icking-rebuild | Prompt-Injection: User-Content ohne Filter, RAG-Hits im System-Prompt | Anti-Exfil-Klausel, max_tokens-Cap |
| icking-rebuild | Default-VPC fuer Prod-Workload (Mandanten-Trennung duenn) | Custom VPC bei naechstem Stack-Bump |
| hetzner | age-Key-Management fuer 7y-Audit-Buckets nicht spec’d | ADR vor erstem Industriekunden |
Doku-Drift (gefunden waehrend Audit, nicht security-relevant aber zum mitnehmen)
- 4 av-prod-Buckets fehlen in
intern/capabilities/aws/buckets.md(av-dashboard-data-*,av-dashboard-frontend-*,av-production-terraform-state,openwebui-vf-uploads-*) - 2 Fargate-Apps fehlen in
intern/capabilities/apps/(inference-service-prod,presenton-vf) - mcp-vf-hosted DNS-Cutover (laut MCPs-Index als “DNS-Cutover offen”) — Status pruefen
Was clean war (positive Highlights)
- agents-platform: keine IAM-Wildcards, alle S3
BLOCK_ALL, Secrets ausschliesslich Secrets Manager, Cognito mit MFA-optional + Pre-Sign-Up-Whitelist, CloudFront mit OAC. - vf-hosted: PII-Scrubbing, Rate-Limit, HSTS, Digest-Pinning, Dockerfile non-root, Secrets-Manager-Integration.
- 11 Eigenbau-MCPs: keine
.envgetrackt, keine Hardcoded-Keys, keine TLS-Disable, keine shell=True/eval/exec, Pydantic-typed Tool-Inputs. - icking-rebuild: Two-Key-Rotation mit
hmac.compare_digest, SQL-Identifier-Strict, Bedrock-Region-Deny gegen non-EU, structlog-JSON-Escape, non-root Container, RDS-SG nur Task-SG. - AWS CloudTrail Org-Trail multi-region mit LogFileValidation = aktiv.
- AWS: keine offenen Security Groups, keine IAM-Wildcards.
- Hetzner: NDA-Compliance grun (kein Kundenname in public DNS), Inventar sauber.
Naechster Audit
Cron-Job (alle 14 Tage, Mo 06:00, Modus schnell) — siehe intern/capabilities/skills/security-audit/SKILL.md Sektion „Recurrence”. Baseline.json siehe baseline.json im selben Ordner — neuer Lauf vergleicht gegen diese Datei und reportet nur Diffs.
Verwandt
- ”SKILL” — Methodik
- ”security” — Vault-Threat-Model
- ”active-work” — Was sich aus den Findings als Tasks ableitet