[Critique] Fuite de données personnelles : email, langue et accusés de lecture de l'expéditeur renvoyés dans chaque message #90
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#90
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 : PROFILE-17, FRIENDS-02, SECURITY_UX-09
Message.cssérialise l'expéditeur avecGetMeResponse: tout lecteur d'un channel (REST et SignalR) obtient l'email des autres users.Détails des rapports
[PROFILE-17] Fuite de données personnelles : l'email, la langue et les accusés de lecture de l'expéditeur sont renvoyés à tous les lecteurs d'un channel — Gravité : Critique (fuite de données / sécurité)
GET /api/channels/{id}/messages(etGET /channels/{id}/messages/{msgId}, champmessageRef.sender, et probablement les événements SignalR de messages)GET /api/channels/<id>/messages.sender= profil public (id, userName, avatar, role), commeGET /api/users.sendercontient{"id","userName","email":"qa_profile_pb_oa29s@qa.test","avatar","role","language":1,"channelsAckMsg":{…}}: l'adresse email de chaque auteur, sa langue et ses derniers accusés de lecture par channel sont exposés à n'importe quel membre. (GET /api/users,/users/{id}et l'UI ProfileUser n'exposent PAS l'email : OK.)sender keys: ['id','userName','email','avatar','role','language','channelsAckMsg']).backend/API/Channels/Messages/Message.cs:35-38(MessageReference.Sender) et:47,60(MessageResponse.Sender) utilisentGetMeResponse(réponse privée de/me,Users/Me/Get/GetMeEndpoint.cs:9) au lieu deUserSummary/ListUsersResponse.[FRIENDS-02] Les adresses e-mail de tous les expéditeurs sont exposées dans chaque message — Gravité : Majeur (fuite de données personnelles)
messages(liste, création, SignalRNewMessage) :sender.email"sender":{"id":...,"userName":"qa_friends_a_bffhy","email":"qa_friends_a_bffhy@qa.test",...}visible par tout lecteur du canal (donc, combiné à FRIENDS-01, par tout le monde).MessageResponse.Senderest unGetMeResponse(backend/API/Channels/Messages/Message.cs) au lieu d'unUserSummary. (Zone chat, signalé ici car vu dans les DM.)[SECURITY_UX-09] L'email (et la langue) de l'expéditeur est exposé dans chaque message — Gravité : Majeur
GET /api/channels/{id}/messages,GET .../messages/{msgId}, évènements SignalRNewMessage/UpdateMessagesendercontientemail,language,channelsAckMsg.GET /users)."sender":{"id":...,"userName":"qa_security_ux_a_...","email":"qa_security_ux_a_...@qa.test","avatar":null,"role":{...},"language":1,"channelsAckMsg":{}}-> les adresses email de tous les users qui ont écrit sont lisibles par tout Member.backend/API/Channels/Messages/Message.cs:47:MessageResponse.Senderest unGetMeResponse(DTO deGET /me, avec Email/Language/ChannelsAckMsg) au lieu d'un résumé public.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.