[Majeur] Inscriptions concurrentes : invitation à usage unique consommée plusieurs fois et usernames en doublon #103

Closed
opened 2026-10-28 10:32:01 +00:00 by asventi · 0 comments
Owner

Gravité : Majeur
Rapports QA d'origine : AUTH-02, AUTH-03

Pas de transaction ni de contrainte d'unicité : 6 comptes créés avec un code à usage unique ; les doublons de username ne peuvent plus se connecter.

Détails des rapports

[AUTH-02] Doublons de username possibles via inscriptions concurrentes -> les comptes concernés ne peuvent plus se connecter (500) — Gravité : Majeur
  • Où : POST /api/auth/register
  • Étapes : 1. Invitation illimitée. 2. 5 requêtes register simultanées avec le même userName et des emails différents. 3. Login avec ce username.
  • Attendu : 1 seul 201, les autres 409.
  • Obtenu : [201,201,201,201,201] ; GET /users liste 5 fois qa_auth_samename4v91 ; le login de ce username renvoie 500 "Sequence contains more than one element" (les 5 comptes sont inutilisables par username).
  • Cause probable : check-then-insert non atomique RegisterUserCommand.cs:28-36 et pas d'index unique sur Users.UserName/Email en base.
[AUTH-03] Une invitation à usage unique peut être consommée plusieurs fois en parallèle — Gravité : Majeur
  • Où : POST /api/auth/register
  • Étapes : 1. Créer une invitation usages: 1. 2. Envoyer 6 inscriptions simultanées (usernames/emails différents) avec ce code.
  • Attendu : 1 seul compte créé.
  • Obtenu : [201,201,201,201,201,201] -> 6 comptes créés, l'invitation finit à usages: 0.
  • Cause probable : lecture puis décrément non atomique RegisterUserCommand.cs:17-22,67-70 (pas de concurrency token / ExecuteUpdate conditionnel).

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.

**Gravité :** Majeur **Rapports QA d'origine :** AUTH-02, AUTH-03 Pas de transaction ni de contrainte d'unicité : 6 comptes créés avec un code à usage unique ; les doublons de username ne peuvent plus se connecter. ## Détails des rapports <details><summary>[AUTH-02] Doublons de username possibles via inscriptions concurrentes -> les comptes concernés ne peuvent plus se connecter (500) — Gravité : Majeur</summary> - Où : `POST /api/auth/register` - Étapes : 1. Invitation illimitée. 2. 5 requêtes register simultanées avec le même `userName` et des emails différents. 3. Login avec ce username. - Attendu : 1 seul 201, les autres 409. - Obtenu : `[201,201,201,201,201]` ; `GET /users` liste 5 fois `qa_auth_samename4v91` ; le login de ce username renvoie 500 "Sequence contains more than one element" (les 5 comptes sont inutilisables par username). - Cause probable : check-then-insert non atomique `RegisterUserCommand.cs:28-36` et pas d'index unique sur `Users.UserName`/`Email` en base. </details> <details><summary>[AUTH-03] Une invitation à usage unique peut être consommée plusieurs fois en parallèle — Gravité : Majeur</summary> - Où : `POST /api/auth/register` - Étapes : 1. Créer une invitation `usages: 1`. 2. Envoyer 6 inscriptions simultanées (usernames/emails différents) avec ce code. - Attendu : 1 seul compte créé. - Obtenu : `[201,201,201,201,201,201]` -> 6 comptes créés, l'invitation finit à `usages: 0`. - Cause probable : lecture puis décrément non atomique `RegisterUserCommand.cs:17-22,67-70` (pas de concurrency token / `ExecuteUpdate` conditionnel). </details> --- _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._
tjooris self-assigned this 2026-10-28 13:16:53 +00:00
tjooris added reference fix/auth-register-identity 2026-10-29 13:32:39 +00:00
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
Transcendence/backend#103
No description provided.