[Critique] Les messages de DM sont diffusés en temps réel (SignalR NewMessage) à tous les utilisateurs connectés #83
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#83
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 : FRIENDS-01b, SECURITY_UX-06
Le hub envoie
NewMessageà tous les users en ligne au lieu des seuls membres du channel : un tiers reçoit le contenu des DM en clair.Détails des rapports
[FRIENDS-01b] Les messages de DM sont diffusés en temps réel (SignalR) à TOUS les utilisateurs connectés — Gravité : Critique
/api/événementNewMessage(aussiUpdateMessage,RemoveMessage){"type":1,"target":"NewMessage","arguments":["<convId>",{... "content":"LEAKCHECK-live-message" ...,"sender":{...,"email":...}}]}.scripts/friends/leak.py("frames: 5 leaked: 1"), screenshotscreens/friends_01_C_home_messages.png.backend/API/Channels/Messages/Create/CreateMessageCommand.cs(et Update/Delete) :hub.Clients.Users(onlineUsers.Where(channel.IsWhitelisted))=> tous les users en ligne pour un DM. Devrait ciblerchannel.Members.[SECURITY_UX-06] Fuite temps réel SignalR : le contenu des DM est diffusé à tous les utilisateurs en ligne — Gravité : Critique
/api/negotiate+ WebSocket/api/?id=...), évènementNewMessage(idemUpdateMessage,RemoveMessagepar lecture du code)POST /channels/{conv}/messages).{"type":1,"target":"NewMessage","arguments":["<id du DM A-B>",{"content":"qa_sec SIGNALR-LEAK-...","sender":{... "email":"qa_security_ux_a_...@qa.test" ...}}]}en clair.scripts/security_ux/signalr.py(sortie « C recoit: ... NewMessage ... »). Sans cookie,POST /api/negotiate-> 401 (OK).backend/API/Channels/Messages/Create/CreateMessageCommand.cs(destinataires = users en ligne filtrés parchannel.IsWhitelisted, vrai pour tous sur un DM, cf. SECURITY_UX-01). Les ids des DM fuitent ainsi vers tous les users, ce qui rend SECURITY_UX-01 directement exploitable.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.