SEC: Fehlende RBAC-Pruefung in ai-search-chat/workflow-tasks/connect-setup Backends #369

Open
opened 2026-10-19 13:52:26 +02:00 by patrick · 0 comments
Owner

Gefunden bei Fable-Review auf Code-Dopplung/interne Links (Session 2026-10-19), Nachtrag zu PR #368.

Problem: Drei Backend-APIs setzen keinerlei requirePermission-Pruefung durch:

  • ai/internal/semanticsearchapi (ai-search-chat) -- Permission ai.search.read existiert bereits in migrations/0018_module_policy_rules.up.sql, wird aber nirgends im Handler abgefragt.
  • workflow/internal/taskapi (workflow-tasks) -- keine passende Permission existiert ueberhaupt, muesste neu angelegt werden (z.B. workflow.task.read).
  • connect/internal/connectorsetupapi (connect-setup) -- keine passende Permission existiert, muesste neu angelegt werden.

Zum Vergleich: mail/internal/mailapi setzt mail.message.read korrekt durch (mailapi.go:120-121), deshalb konnte fuer mail-postfach in PR #368 ein echter Registry-Eintrag ergaenzt werden -- fuer diese drei Apps waere das aktuell eine vorgetaeuschte Absicherung.

Akzeptanzkriterien (Vorschlag):

  1. Jede der drei APIs prueft die jeweilige Permission serverseitig vor Verarbeitung der Anfrage (gleiches Muster wie s.requirePermission(...) in connect/internal/statusapi/statusapi.go:37).
  2. Fuer workflow-tasks und connect-setup: neue Permission-Keys per Migration anlegen, inkl. Rollenzuordnung (user/tenant_admin), analog migrations/0018_module_policy_rules.up.sql.
  3. Je Akzeptanzkriterium ein automatisierter Test (401/403 ohne/mit falscher Rolle).
  4. Danach: MODULE_REGISTRY in web/shl/components/ModuleNavShell.tsx um die drei Apps ergaenzen (analog mail_postfach in PR #368), Navigation einbinden.

Nicht Bestandteil: Entscheidung, ob ai-search-chat/workflow-tasks oder ihre Schwester-Apps (ai-summaries/workflow-approvals) langfristig die kanonische App je Bereich bleiben -- reine Produktentscheidung, hier nur die fehlende Absicherung.

Gefunden bei Fable-Review auf Code-Dopplung/interne Links (Session 2026-10-19), Nachtrag zu PR #368. **Problem:** Drei Backend-APIs setzen keinerlei `requirePermission`-Pruefung durch: - `ai/internal/semanticsearchapi` (ai-search-chat) -- Permission `ai.search.read` existiert bereits in `migrations/0018_module_policy_rules.up.sql`, wird aber nirgends im Handler abgefragt. - `workflow/internal/taskapi` (workflow-tasks) -- keine passende Permission existiert ueberhaupt, muesste neu angelegt werden (z.B. `workflow.task.read`). - `connect/internal/connectorsetupapi` (connect-setup) -- keine passende Permission existiert, muesste neu angelegt werden. Zum Vergleich: `mail/internal/mailapi` setzt `mail.message.read` korrekt durch (`mailapi.go:120-121`), deshalb konnte fuer mail-postfach in PR #368 ein echter Registry-Eintrag ergaenzt werden -- fuer diese drei Apps waere das aktuell eine vorgetaeuschte Absicherung. **Akzeptanzkriterien (Vorschlag):** 1. Jede der drei APIs prueft die jeweilige Permission serverseitig vor Verarbeitung der Anfrage (gleiches Muster wie `s.requirePermission(...)` in `connect/internal/statusapi/statusapi.go:37`). 2. Fuer workflow-tasks und connect-setup: neue Permission-Keys per Migration anlegen, inkl. Rollenzuordnung (user/tenant_admin), analog `migrations/0018_module_policy_rules.up.sql`. 3. Je Akzeptanzkriterium ein automatisierter Test (401/403 ohne/mit falscher Rolle). 4. Danach: MODULE_REGISTRY in `web/shl/components/ModuleNavShell.tsx` um die drei Apps ergaenzen (analog `mail_postfach` in PR #368), Navigation einbinden. **Nicht Bestandteil:** Entscheidung, ob ai-search-chat/workflow-tasks oder ihre Schwester-Apps (ai-summaries/workflow-approvals) langfristig die kanonische App je Bereich bleiben -- reine Produktentscheidung, hier nur die fehlende Absicherung.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: scripte/nexarch#369