[Critique] Un username égal à l'email d'un autre utilisateur bloque son login par email (500) #92
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#92
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-01, PROFILE-03
Le login cherche
UserName == login || Email == emailavecSingleOrDefault: deux résultats provoquent « Sequence contains more than one element ». Possible à l'inscription comme en renommant son compte.Détails des rapports
[AUTH-01] Un user peut verrouiller le login par email de n'importe quel autre user (username = email de la victime -> 500) — Gravité : Critique
POST /api/auth/login+POST /api/auth/registerqa_auth_log_hys19(emailqa_auth_log_hys19@qa.test). 2. Avec une invitation valide, s'inscrire avecuserName=qa_auth_log_hys19@qa.test(accepté : 201, aucune règle sur le format du username) et un autre email. 3. Victime :POST /auth/login {"login":"qa_auth_log_hys19@qa.test", ...}.500 System.InvalidOperationException: Sequence contains more than one element.pour la victime (par email) ET pour l'attaquant (par son username). Login par username de la victime reste OK. Un attaquant peut donc empêcher n'importe quel user (y compris un admin, dont l'email est visible) de se connecter par email.scripts/auth/d_edge.py,e_dup.py).backend/API/Auth/Login/LoginUserCommand.cs:16(SingleOrDefaultAsync(u => u.UserName == req.Login || u.Email == email)) + absence de contrainte sur le username (RegisterEndpoint.cs:9).[PROFILE-03] Renommer son compte avec l'email d'un autre user bloque la connexion par email de la victime (HTTP 500) — Gravité : Majeur
PATCH /api/mepuisPOST /api/auth/loginqa_profile_eh92v@qa.test. 2. User A renomme son userName en exactement cet email :PATCH /api/me {"userName":"qa_profile_eh92v@qa.test"}-> 200. 3.POST /api/auth/login {"login":"qa_profile_eh92v@qa.test","password":<mdp de B>}.System.InvalidOperationException: Sequence contains more than one element(même avec le bon mot de passe de B ; B ne peut plus se connecter que par son username). N'importe quel user peut ainsi empêcher n'importe quel autre de se connecter par email, sans connaître son mot de passe. Le 500 expose aussi le détail de l'exception (champexception) dans la réponse.backend/API/Auth/Login/LoginUserCommand.cs:16SingleOrDefaultAsync(u => u.UserName == req.Login || u.Email == email)+ aucune vérification queUserNamene ressemble pas à un email d'autrui dansUpdateMeCommand.cs/RegisterUserCommand.cs.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.