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

#ScopeReportSeverity-MaxAmpel
1Hosted MCPs (vf-hosted + whatsapp)01-hosted-mcps.md2 CRIT🛑
2agents-platform (CDK + Lambda)02-agents-platform.md1 HIGH🟢
3Eigenbau-MCPs lokal (11 Repos)03-eigenbau-mcps.md1 HIGH (whatsapp)🟢
4AV-Vault + Plugin04-vault-plugin.md1 CRIT🛑
5AWS Org cross-account05-aws-org.md2 CRIT🛑
6Icking-Rebuild (FastAPI + Bedrock)06-icking-rebuild.md2 HIGH🟡
7Hetzner + DNS + Cloudflare07-hetzner-dns.md2 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:

  1. Heute: Cloudflare-Access-Policy vor /mcp (nur Marvins Identity), /webhook darf public bleiben aber NUR mit HMAC.
  2. Morgen: APP_SECRET aus Meta Developer Console → Secrets Manager → CDK-Mapping → Request-Handler validiert X-Hub-Signature-256 mit hmac.compare_digest.
  3. Hardcoded Fallback agentic-friseur-verify-2026 raus, RuntimeError wenn 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:

  1. Heute: aws iam delete-access-key fuer alle Root-Keys im Mgmt-Account.
  2. Heute: MFA fuer mkuehlmann (Hardware-Key oder Authenticator).
  3. Diese Woche: Root-MFA fuer av-production, av-becker, mk-privat (3× Console-Login, ~30 Min).
  4. Diese Woche: Access-Keys von mkuehlmann rotieren 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:

  1. Heute: GitHub-PAT widerrufen + neuen anlegen, ElevenLabs-Key rotieren.
  2. Heute: Migration auf op-Wrapper analog Hetzner-MCP (HCLOUD_TOKEN via op run). Neue Tokens in 1Password Vault, MCP-Configs ueber op item get resolven.
  3. Skill-Workflow: pre-commit-Hook der ~/.claude.json Schutz triggert? Nicht trivial, separater Faden.

HIGH — diese Woche

ScopeFindingFix-Aufwand
agents-platformfast-uri CVE 7.5 via aws-cdk-lib (build-time)npm audit fix, 5 Min
Hetzner DNSDNSSEC + CAA fehlen auf agenticventures.de + marvinkuehlmann.com~15 Min, kostenlos
Hetzner av-tools-stirling-01pdf.agenticventures.de mit Stirling-Default-Login ohne Access-App davor30 Min
Hetzner av-tools-stirling-01SSH offen von 0.0.0.0/0, Default-Pwd admin/stirling-pdf30 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-rebuildcloudflared-Sidecar essential=false — Tunnel-Crash haelt App reachable1-Zeilen-Fix

MED — naechste 2 Wochen

ScopeFindingNotiz
agents-platformdashboard-presignup leakt Whitelist-Modell an Clientgenerische Message
eigenbau-mcpsmcp-papierkram: 57 Write-Tools hinter einem OAuth-Scope (Blast-Radius gross)read-only Variante fuer Pilot-Kunden
eigenbau-mcpsmcp-gsuite veraltete oauth2client==4.1.3Migration google-auth
hosted-mcpsmcp-whatsapp Stack pinnt cloudflared:latest ohne DigestPattern bei vf-hosted bereits richtig
hosted-mcpsmcp-whatsapp ohne CI/Lint/gitleaksWorkflow analog vf-hosted
vault260 internal-Files committed (Repo private, aber pre-commit-Guard fehlt)pre-commit-Hook fuer visibility-Check
aws-org25 Secrets in av-prod ohne RotationRotation-Schedule pro Secret pruefen
aws-orgGuardDuty nur in becker, 3/4 Accounts blindOrg-wide Delegated Admin, ~10 USD/Monat
aws-orgKein Access Analyzer in keinem Accountpro Account aktivieren
icking-rebuildPrompt-Injection: User-Content ohne Filter, RAG-Hits im System-PromptAnti-Exfil-Klausel, max_tokens-Cap
icking-rebuildDefault-VPC fuer Prod-Workload (Mandanten-Trennung duenn)Custom VPC bei naechstem Stack-Bump
hetznerage-Key-Management fuer 7y-Audit-Buckets nicht spec’dADR 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 .env getrackt, 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