Public Security Audit Report — mcp-papierkram (DRAFT)
Status: INTERNAL DRAFT — nicht public-tauglich.
Erster Pilot-Audit unter intern/projekte/public-mcp-audits/. Geschrieben in dem Format, das spaeter (nach Pattern-Phase) als Public-Report publik gemacht wird. Vollform inkl. Code-Snippets + Repro-Schritte folgt in der Public-Version.
Summary
mcp-papierkram ist ein Python/FastMCP-basierter MCP-Server fuer die Papierkram.de-Buchhaltungs-API. Audit-Lauf am 2026-05-18 im Daily-Modus (Konfidenz-Gate 8/10) hat keine kritischen oder High-Severity-Findings ergeben. Drei Medium-Findings betreffen Supply-Chain-Hygiene und Default-Konfiguration. Alle drei sind in 1-2 Stunden behebbar.
| Severity | Count |
|---|---|
| Critical | 0 |
| High | 0 |
| Medium | 3 |
| Low | 0 |
Scope
- Target:
agentic-ventures/mcps(Mono-Repo), Pathmcp-papierkram/ - Commit:
0ce2d60auf branchfeat/360dialog-provider - Stack: Python 3.11, FastMCP, httpx 0.28.1, pydantic 2.13.4
- Surface: 96 MCP-Tools (62 Write, 34 Read), kein eigener HTTP-Server-Code (FastMCP-default), kein Custom-Frontend, keine eigene Persistenz
- Modus: Daily 8/10 (
schnell) — vor jedem Public-Audit folgt ein Voll-Audit imtief-Modus
Methodik
13-Phasen-Audit nach internem security-audit-Skill (adaptiert von gstack/cso). Code-Trace bei jedem Finding, keine Live-Calls gegen Papierkram-API.
Findings
MED-1: uv.lock fehlt + Dependencies range-pinned
Supply-Chain-Hygiene-Gap. pyproject.toml definiert nur untere Schranken (mcp>=1.2.0, httpx>=0.27.0, pydantic>=2.0), und kein uv.lock ist im Repo getrackt. Bei jedem fresh-install kann sich die transitive Versions-Topologie aendern, ein kompromittiertes Mid-Stream-Release einer Dependency wuerde transparent eingezogen.
Auswirkung: Supply-Chain-Vulnerability ohne Audit-Trail. Real-World-Pendant: torchtriton-Vorfall 2022.
Fix: uv lock, git add uv.lock, im hosted Docker-Build uv sync --frozen.
MED-2: Raw-Escape-Hatch-Tools default aktiviert
Vier generische Raw-Tools (raw_get, raw_post, raw_put, raw_delete) werden default registriert (PAPIERKRAM_EXPOSE_RAW=true). Sie geben Schreib-Zugriff auf jeden Papierkram-API-Pfad, ohne dass das Tool-Schema einschraenkt.
mcp-vf-hosted (der hosted Wrapper) setzt den Flag explizit auf false — Defense-in-Depth ist da. Aber wer den MCP eigenstaendig ohne den Wrapper deployed, hat die Raw-Tools live. Default-sicher waere false.
Auswirkung: Tool-Surface ist breiter als noetig im Standalone-Deploy. Bei Prompt-Injection erleichtert Raw-Surface Eskalation gegenueber dedizierten Tools (z.B. fingierter API-Pfad).
Fix: Default-Wert flippen. Local-Debug-User setzen den Flag explizit.
MED-3: HTTP-Bind ohne Auth-Sanity-Check
MCP_HTTP_HOST kann von Env auf 0.0.0.0 gesetzt werden, ohne dass FastMCP eine eigene Auth-Schicht erzwingt. Wer den Port versehentlich public exposed (ECS-Service ohne Sidecar, VM ohne UFW), gibt 96 Tools einschliesslich ~62 Write-Tools auf den eigenen Papierkram-Account frei.
Auswirkung: Misconfiguration-Risiko bei Self-Hosting. Kein Bug am MCP selbst, aber kein Safety-Net.
Fix: Warn-Log + (optional) Hard-Refusal bei Non-Localhost-Bind ohne konfigurierten Auth-Provider.
Was nicht gefunden wurde
- Keine Secrets in Source-Tree oder Git-History.
- Keine Command-Injection / SQL-Injection / Eval-Patterns.
- Keine TLS-Verify-Bypasses.
- Keine unsanitized LLM-Output-Routes (kein HTML-Sink im MCP).
- Keine Prompt-Injection-Vektoren in Tool-Beschreibungen (statische Docstrings).
- Keine schweren CVEs in den eingezogenen Direct-Deps (Stand 2026-05-18).
Was nicht in Scope war
- Live-API-Tests gegen Papierkram (Audit-Skill-Regel: NIE).
- Cloud-Hosting-Layer (mcp-vf-hosted CDK + Fargate Setup) — separates Audit.
- Multi-Tenant-Isolation (mcp-papierkram ist Single-Tenant per Design).
- Performance / Cost.
Empfehlungen
- F1-F3 im naechsten Wartungsfenster (~1.5h Aufwand) beheben.
- Vor einem Public-Audit-Release ein tief-Modus-Lauf, der auch die TENTATIVE-Findings (
data: dictohne strict Schema, PDF-Size-Cap) bewertet. - Audit quarterly wiederholen.
Anhaenge
- Raw-Report (intern): 2026-05-papierkram-audit-raw
- Baseline-JSON:
intern/runs/2026-05-18-security-audit-mcp-papierkram/baseline.json - Audit-Skill: SKILL
Internal note (loescht sich bevor public): Diese Datei ist Draft. Vor jeglichem public-Push:
- F1-F3 fixen oder Embargo-Hinweis ergaenzen (Phase 2 Pattern-File legt fest, wie).
- Repo-URL des Targets entscheiden (private mono-repo bleibt private — Public-Auditreport referenziert moeglicherweise nur Commit-SHA + tool-Liste, nicht Source-Path).
- Report-Template-Format finalisieren (Trail-of-Bits-Style? Cure53? Eigenes?).