[Critique] Escalade de privilèges : HandleUsers permet de réinitialiser le mot de passe ou de supprimer un utilisateur plus privilégié #88
Labels
No labels
bug
enhancement
feature
groupe/chat-data
groupe/friends-blocking
groupe/input-validation
groupe/realtime-presence
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Transcendence/backend#88
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Gravité : Critique
Rapports QA d'origine : AUTH-10, ADMIN-07
Un rôle avec seulement HandleUsers peut reset le mot de passe d'un admin, se connecter avec et prendre son compte. Seul dede est protégé.
Détails des rapports
[AUTH-10] Un rôle `HandleUsers` peut réinitialiser le mot de passe d'un user plus privilégié et prendre son compte (escalade de privilèges) — Gravité : Critique
PATCH /api/auth/{id}/password(UI : bouton reset password de /admin/users)qa_auth_adm_*a le rôle qaHandleUsers|InviteUser(permission 6). 2.qa_auth_sup_*a un rôle qa avec toutes les permissions (127). 3. L'admin 6 appellePATCH /auth/<id sup>/passwordavec"Takeover-1234"-> 200. 4. Login en tant queqa_auth_sup_*avec ce mot de passe -> 200,/me:permission: 127.DefaultAdminLogin(ResetPasswordQuery.cs:22). Les users tom/Gold (toutes permissions) sont concernés de la même façon (non testé sur eux, comptes réservés).backend/API/Auth/Reset/ResetPasswordQuery.cs:13-31(aucun contrôle de hiérarchie).[ADMIN-07] Escalade de privilèges : HandleUsers seul permet de réinitialiser le mot de passe de n'importe quel user (même plus privilégié) et de le supprimer — Gravité : Critique
PATCH /api/auth/{id}/password,DELETE /api/users/{id}PATCH /api/auth/<id d'un user qa ayant toutes les perms>/passwordavec "Hacked-pass-123" 3. Login avec ce nouveau mot de passeDELETE /api/users/<id privilégié>-> 200.Seul le compte
dedeest protégé (UserCannotBeDelete/PasswordCannotBeChanged), pas les autres admins (Gold/tom).scripts/admin/t4_priv.py:HandleUsers-only: reset pwd of privileged qa user -> 200;login ... OK -> ESCALATION PATH.backend/API/Auth/Reset/ResetPasswordQuery.cs,backend/API/Users/Delete/DeleteUserQuery.cs: pas de comparaison de niveau de privilège entre acteur et cible.Trouvé par une campagne de tests QA automatisés (agents Claude, Playwright) sur l'environnement de dev. Les captures citées sont locales et non jointes.