[Majeur] GET /users et GET /events/{id} accessibles sans authentification #93
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#93
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é : Majeur
Rapports QA d'origine : AUTH-11, EVENTS-01, ADMIN-02, PROFILE-01, SECURITY_UX-02
Pas de
[Authorize]: un anonyme obtient la liste des users (rôles, permissions) et le détail d'un event (organisateur, inscrits, channel).Détails des rapports
[AUTH-11] `GET /api/users` et `GET /api/events/{id}` sont accessibles sans authentification — Gravité : Critique
GET /api/users,GET /api/events/{id}(sans aucun cookie)GET /users-> 200 avec les 89 users (id, userName, avatar, rôle + bitmask de permissions) ;GET /events/{id}-> 200 avec description, organisateur (et son rôle/permissions), inscriptions, fichiers, canal.GET /events(liste) est bien en 401 : incohérent.backend/API/Users/List/ListUsersEndpoint.cs:16etbackend/API/Events/Get/GetEventEndpoint.cs:41sans[Authorize](le second lit en plustk.Userqui est null).[EVENTS-01] GET /api/events/{id} accessible sans authentification — Gravité : Critique (fuite de données, lecture seule)
GET /api/events/{id}(endpoint public)curl http://localhost:5173/api/events/<id>sans cookie.GET /events,GET /events/{id}/registrationqui renvoient 401).backend/API/Events/Get/GetEventEndpoint.cs:41— pas d'attribut[Authorize](alors queListEventsEndpoint.cs:10l'a). Le code gèreuser is not null(GetEventQuery.cs:24), donc l'anonymat est prévu par erreur.GET /eventssans cookie = 401).[ADMIN-02] GET /users accessible sans authentification (fuite de la liste des utilisateurs, rôles et permissions) — Gravité : Majeur (fuite d'information)
GET /api/userscurl http://localhost:5173/api/users[Authorize], ex.GET /api/roles,GET /api/me-> 401).curlreproduit 2 fois.backend/API/Users/List/ListUsersEndpoint.cs:16:users.MapGet("/", async (ListUsersQuery query) => ...)sans[Authorize].Permet à un anonyme d'énumérer les ids/logins (utile pour du brute-force de login ou pour cibler un compte privilégié).
[PROFILE-01] GET /api/users accessible sans authentification — Gravité : Majeur (fuite d'infos / sécurité)
GET /api/users(backend/users)curl -s http://localhost:5173/api/userssans aucun cookie.GET /api/users/{id}etGET /api/me).curl -i http://localhost:5173/api/users->HTTP/1.1 200 OK;curl -i http://localhost:5173/api/users/<id>->401 Unauthorized.backend/API/Users/List/ListUsersEndpoint.cs:16:users.MapGet("/", async (ListUsersQuery query) => …)n'a pas[Authorize](contrairement àGetUserEndpoint.cs:17).[SECURITY_UX-02] `GET /api/users` et `GET /api/events/{id}` accessibles sans authentification — Gravité : Mineur
GET /api/users,GET /api/events/{id}curl http://localhost:5173/api/users(sans cookie) 2. idem/api/events/<id>/users/{id},/events,/roles… renvoient 401 sans cookie)/usersexpose id, userName, avatar, rôle (id, nom, bitmask de permissions) de tous les users ;/events/{id}expose organisateur, inscrits (userName, rôle), fichiers.backend/API/Users/List/ListUsersEndpoint.cs:16etbackend/API/Events/Get/GetEventEndpoint.cs:41(pas de[Authorize])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.