mitai-jinkendo/.claude/docs/audit/20260404_code_audit/gitea/TEMPLATE_P0-profile-scoping-x-profile-id.md
Lars 7940dc7560 docs: Struktur .claude/docs versionieren, working/, Gitea-Index, Regeln
- .gitignore: .claude/docs, rules, commands tracken; settings.local weiter ignorieren
- DOCUMENTATION.md: verbindliche Ablage functional/technical/working/issues
- .claude/README.md: Agent-Einstieg; GITEA_ISSUES_INDEX aus MCP (Stand 2026-04-08)
- Arbeitspapiere von docs/ nach .claude/docs/working/ verschoben
- docs/MEMBERSHIP_SYSTEM.md als Stub; kanonisch technical/MEMBERSHIP_SYSTEM.md
- CLAUDE.md Pflichtlektüre und Links angepasst; docs/README.md vereinfacht

Made-with: Cursor
2026-04-08 13:01:49 +02:00

1.9 KiB
Raw Blame History

title labels
[Security/P0] X-Profile-Id / get_pid ermöglicht IDOR über alle Datendomänen security, backend, priority-critical

Kontext

Code-Audit 2026-04-04 (/.claude/docs/audit/20260404_code_audit/CODE_AUDIT_REPORT_2026-04-04.md).

Problem

Die Funktion get_pid in backend/routers/profiles.py gibt bei gesetztem Header X-Profile-Id diesen Wert unverändert zurück, ohne Abgleich mit session['profile_id'] oder Admin-Rolle.

Damit kann jede authentifizierte Session mit gültigem Token Daten eines beliebigen Profils über alle Endpunkte ansprechen, die get_pid(x_profile_id) nutzen (u. a. Gewicht, Aktivität, Ernährung, Fotos-Upload/Liste, Vitals, Insights, Schlaf, Ruhetage, Export).

Reproduktion (konzeptionell)

  1. Als Nutzer A einloggen, Token erhalten.
  2. Profil-ID von Nutzer B ermitteln (z. B. über GET /api/profiles siehe separates Issue).
  3. Request gegen geschützten Endpoint mit Header X-Profile-Id: <uuid-von-B> und Token von A.

Erwartetes Verhalten

  • Standard: profile_id ausschließlich aus der Session.
  • Optional: X-Profile-Id nur für Admins und mit expliziter Prüfung require_admin + dokumentierter Use-Case (Multi-User-Admin-UI).

Akzeptanzkriterien

  • Alle betroffenen Router verwenden session-basierte Profil-IDs oder einen validierten Admin-Override.
  • Regressionstests oder manuelle Checkliste für mindestens einen Endpoint pro Router-Gruppe.
  • Kurze Doku in .claude/rules oder technischer Doc, ob X-Profile-Id noch existiert und wann.

Betroffene Dateien (Ausgangspunkt)

  • backend/routers/profiles.py (get_pid)
  • Alle Importe von get_pid (z. B. weight, activity, nutrition, photos, insights, vitals_baseline, blood_pressure, rest_days, sleep, …)