xpeditis2.0/audit_security/manager-modifie-administrateur/manager-modifie-administrateur.md

64 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SEC-13 — Un manager peut rétrograder un administrateur de son organisation
**Gravité historique : Faible.** Classification : CWE-863.
**État au 14 septembre 2026 :** Corrigé dans le code suivi. Le contrôleur refuse toute modification d'une cible actuellement ADMIN par un acteur non ADMIN avant mutation de ses champs.
## Executive Summary
Un MANAGER partage l'organisation d'un ADMIN et connaît son UUID. L'accès au contrôleur utilisateurs est lui-même conditionné par la fonctionnalité `user_management`. Le manager ne doit pas pouvoir neutraliser le compte de niveau supérieur.
Cette fiche repose sur la relecture du code historique accessible et du correctif courant, ainsi que des preuves documentées lors des passes précédentes. Elle ne constate aucun incident réel. La plus ancienne version ici vérifiée est le snapshot `8446f87` ; les corrections historiques figurent dans `c09b8be`. Aucun tag local ni version déployée n'a permis d'établir une première release vulnérable ou corrigée. Voir [METHODOLOGIE.md](../METHODOLOGIE.md).
## Background
La hiérarchie doit vérifier le rôle de la cible avant modification, en plus du nouveau rôle demandé. Interdire l’attribution d’ADMIN ne suffit pas à protéger un compte déjà ADMIN.
## Vulnerability Details
`PATCH /api/v1/users/:id` interdisait déjà à un non-ADMIN d'attribuer le rôle ADMIN et à un manager d'agir hors de son organisation. Il ne vérifiait pas le rôle actuel de la cible. Changer le rôle d'un ADMIN vers USER, ou passer `isActive` à false, franchissait donc les tests puis était persisté. Masquer les administrateurs dans la liste d'utilisateurs ne protège pas la route directe lorsqu'un UUID est connu.
Extrait historique vérifié, `apps/backend/src/application/controllers/users.controller.ts`, lignes 256–264 du snapshot préaudit :
```typescript
// Authorization: Only ADMIN can assign ADMIN role
if (dto.role === 'ADMIN' && currentUser.role !== 'ADMIN') {
throw new ForbiddenException('Only platform administrators can assign ADMIN role');
}
// Authorization: Managers can only update users in their own organization
if (currentUser.role === 'MANAGER' && user.organizationId !== currentUser.organizationId) {
throw new ForbiddenException('You can only update users in your own organization');
}
```
Les numéros ci-dessus décrivent le snapshot ancien ; les liens suivants ouvrent les fichiers courants, où les lignes peuvent avoir changé.
Sources à examiner ensemble :
- [apps/backend/src/application/controllers/users.controller.ts](../../apps/backend/src/application/controllers/users.controller.ts)
## Exploitability Analysis
Rétrogradation ou désactivation d'un administrateur du même tenant. Aucun mécanisme d'auto-promotion vers ADMIN n'est démontré : l'impact est la perte d'autorité/disponibilité du compte cible. La gravité historique faible du rapport initial reflète ces prérequis restreints ; l'importance opérationnelle peut augmenter si l'organisation héberge un administrateur indispensable.
Le code applicatif établit le chemin décrit, mais ne renseigne pas les protections effectives d'un déploiement donné, sa version en ligne ou les accès déjà exercés par un attaquant. La gravité ci-dessus est celle du mécanisme vulnérable avant correction ; elle n'est pas un score de risque résiduel calculé pour la production.
## Proof of Concept
Tests de non-régression existants, inspectables dans le dépôt :
- [apps/backend/src/application/controllers/users.security.spec.ts](../../apps/backend/src/application/controllers/users.security.spec.ts)
Ils testent les refus et les usages autorisés avec des données locales. Ils ne prouvent pas qu'une ancienne exploitation a eu lieu en production. Les commandes et résultats consolidés sont dans [VALIDATION.md](../VALIDATION.md) ; aucun nouvel exploit n'a été exécuté pendant la rédaction.
## Remediation
Corrigé dans le code suivi. Le contrôleur refuse toute modification d'une cible actuellement ADMIN par un acteur non ADMIN avant mutation de ses champs.
Pour solder le constat en exploitation, vérifier le comportement sur la version effectivement déployée et conserver les contrôles légitimes décrits. La présente passe ajoute uniquement de la documentation ; les correctifs mentionnés existaient avant sa rédaction.
## Summary
Un manager peut rétrograder un administrateur de son organisation est un constat historique de l'audit, à lire avec son état courant ci-dessus. La preuve porte sur le mécanisme et les contrôles cités ; elle ne constitue ni une attestation d'exploitation réelle ni une certification exhaustive du projet.