Pentest R111: contract-categories – Permission-String angeglichen
Pentester meldete 403 auf POST/PUT/DELETE /api/contract-categories/* für Admin trotz vorhandener contract-categories:*-Perms. Vermutete Regression aus R110, war aber schon seit dem allerersten Commit so: Route verlangte developer:access, während der Permission-Seed den Admins contract-categories:* gibt. Fix: Route auf contract-categories:create/update/delete umgestellt, konsistent mit den sechs Peer-Katalog-Endpunkten (platforms/ tariffs/cancellation-periods/… nutzen alle ressourcen-spezifische Perms). Kommentar aktualisiert. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -8,9 +8,16 @@ const router = Router();
|
||||
router.get('/', authenticate, contractCategoryController.getContractCategories);
|
||||
router.get('/:id', authenticate, contractCategoryController.getContractCategory);
|
||||
|
||||
// Ändern/Löschen nur mit Entwickler-Berechtigung (Vertragstypen erfordern Formular-Anpassungen)
|
||||
router.post('/', authenticate, requirePermission('developer:access'), contractCategoryController.createContractCategory);
|
||||
router.put('/:id', authenticate, requirePermission('developer:access'), contractCategoryController.updateContractCategory);
|
||||
router.delete('/:id', authenticate, requirePermission('developer:access'), contractCategoryController.deleteContractCategory);
|
||||
// Ändern/Löschen: `contract-categories:*` – wird per seed.ts an Admin-
|
||||
// Rollen vergeben. Vorher stand hier `developer:access` mit dem
|
||||
// Kommentar „Vertragstypen erfordern Formular-Anpassungen". Historische
|
||||
// Design-Restriktion, die aber im Widerspruch zum Permission-Seed stand
|
||||
// (Admin hatte `contract-categories:*` ohne Nutzen). Pentester R111 hat
|
||||
// die Diskrepanz aufgedeckt; angeglichen an die sechs Peer-Endpunkte
|
||||
// (platforms/tariffs/cancellation-periods/… nutzen alle ressourcen-
|
||||
// spezifische Perms statt developer:access).
|
||||
router.post('/', authenticate, requirePermission('contract-categories:create'), contractCategoryController.createContractCategory);
|
||||
router.put('/:id', authenticate, requirePermission('contract-categories:update'), contractCategoryController.updateContractCategory);
|
||||
router.delete('/:id', authenticate, requirePermission('contract-categories:delete'), contractCategoryController.deleteContractCategory);
|
||||
|
||||
export default router;
|
||||
|
||||
@@ -97,6 +97,17 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔧 Pentest R111 – contract-categories: falscher Permission-String**
|
||||
- Der Pentester meldete 403 auf `POST/PUT/DELETE /api/contract-categories/*`
|
||||
für Admin trotz vorhandener `contract-categories:*`-Permissions.
|
||||
Vermutete Regression aus R110, war aber schon seit dem ersten
|
||||
Commit so – die Route verlangte `developer:access`, während der
|
||||
Permission-Seed den Admins `contract-categories:*` gibt.
|
||||
- Fix: Route auf `contract-categories:create/update/delete`
|
||||
umgestellt, konsistent mit den sechs Peer-Katalog-Endpunkten
|
||||
(platforms/tariffs/cancellation-periods/…). Kommentar aktualisiert,
|
||||
damit die historische Design-Restriktion nicht wieder eingebaut wird.
|
||||
|
||||
- [x] **🔒 Pentest R110 – Mass-Assignment-Whitelist auf 7 Update-Endpunkten**
|
||||
- MEDIUM-Finding: `PUT /api/stressfrei-emails/:id` und 6 weitere Update-
|
||||
Endpunkte (`platform`, `tariff`, `contractCategory`,
|
||||
|
||||
Reference in New Issue
Block a user