Fiatteur-actions omzeilden MFA + resendApproverMail had geen rol-check #99

Closed
opened 2026-05-26 18:23:33 +00:00 by jesse-a · 1 comment
Owner

Severity: HIGH

src/app/actions/expense-approval.ts gebruikte requireSession() voor approveExpense, rejectExpense en resendApproverMail — dat checkt geen MFA. Approve/reject controleerden wel user.isApprover, maar resendApproverMail checkte zelfs geen rol/fiatteur-status. Een willekeurige ingelogde VIEWER zonder MFA kon dus fiatteurs-mail-keten van een willekeurige inkoop triggeren (mail-spam-vector + informatie-onthulling over inkoop-IDs).

Fix:

  1. approveExpense + rejectExpense gebruiken nu assertCanWrite() (= MANAGER + MFA).
  2. resendApproverMail gebruikt nu assertCanWrite() ÉN checkt dat de aanroeper fiatteur of admin is, anders throw.

Files: src/app/actions/expense-approval.ts

**Severity: HIGH** `src/app/actions/expense-approval.ts` gebruikte `requireSession()` voor `approveExpense`, `rejectExpense` en `resendApproverMail` — dat checkt geen MFA. Approve/reject controleerden wel `user.isApprover`, maar `resendApproverMail` checkte zelfs geen rol/fiatteur-status. Een willekeurige ingelogde VIEWER zonder MFA kon dus fiatteurs-mail-keten van een willekeurige inkoop triggeren (mail-spam-vector + informatie-onthulling over inkoop-IDs). **Fix**: 1. `approveExpense` + `rejectExpense` gebruiken nu `assertCanWrite()` (= MANAGER + MFA). 2. `resendApproverMail` gebruikt nu `assertCanWrite()` ÉN checkt dat de aanroeper fiatteur of admin is, anders throw. **Files**: src/app/actions/expense-approval.ts
Author
Owner

Opgelost in commit 8e18add.

Opgelost in commit 8e18add.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
jesse-a/OpenCRM#99
No description provided.