[Critique] La permission HandleKnowledge n'est jamais vérifiée : tout utilisateur peut uploader, renommer et supprimer les fichiers des autres #86
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#86
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 : FILES-01, ADMIN-05, SECURITY_UX-07
Aucun
[Roles(Perms.HandleKnowledge)]sur les endpoints/files: un Member (permission 0) modifie et supprime les fichiers de l'admin.Détails des rapports
[FILES-01] La permission HandleKnowledge n'est jamais appliquée : un Member (permission 0) peut uploader, renommer et supprimer n'importe quel fichier — Gravité : Critique
POST /api/files,PATCH /api/files/{key}/name,DELETE /api/files/{key}permission: 0). 2. Avec son cookie : POST /api/files (multipart name+file) ; PATCH le fichier d'un autre (créé par dede) ; DELETE le fichier d'un autre.HandleKnowledge(au moins pour renommer/supprimer ; idéalement upload aussi).scripts/files_ai/qa_files_12_shots.py(le script d'origine a été perdu ; les appels API sont triviaux à rejouer avecApi(member)) (sortie :4 member rename admin file: 200,4 member delete admin file: 204 -> admin meta 404) ; en UI (qa_files_08_member_ui.py, screenshotsscreens/qa_files_12_member_knowledge_actions.png,qa_files_12_member_menu_on_admin_file.png) : le Member voit « Upload », « New folder » et le menu d'actions (rename/move/delete) sur TOUS les fichiers, et a réussi à renommer puis supprimer un fichier appartenant à dede ; l'API confirme ensuite 404 sur ce fichier.backend/API/Storage/*/…Endpoint.cs: seulement[Authorize], aucune vérification dePerms.HandleKnowledge;grep HandleKnowledge backend/APIne trouve que sa déclaration dansRoles/Roles.cs:23. Côté front, aucune vérification non plus (frontend/src/files/components/FileList.tsx,ItemActions.tsxaffichent les actions à tous).[ADMIN-05] La permission HandleKnowledge n'est appliquée nulle part : tout utilisateur peut renommer / supprimer les fichiers des autres — Gravité : Critique
PATCH /api/files/{key}/name,DELETE /api/files/{key}(page /knowledge)PATCH /api/files/<key>/namepuisDELETE /api/files/<key>A l'inverse le rôle qui n'a QUE HandleKnowledge n'a aucun avantage.
PATCH other's file name/DELETE other's file= 200/204 dans toutes les colonnes.backend/API/Storage/Delete/DeleteFileEndpoint.cs:11,Storage/Update/UpdateFileNameEndpoint.cs:18,Storage/Upload/UploadFileEndpoint.cs:40:[Authorize]seul ;Perms.HandleKnowledgejamais référencé (grep). Côté front aucun test dePermEnum.HandleKnowledgenon plus (routes/knowledge.tsx).[SECURITY_UX-07] N'importe quel utilisateur peut renommer ou supprimer les fichiers des autres — Gravité : Critique
PATCH /api/files/{key}/name,DELETE /api/files/{key}POST /files, 201). 2. C (autre Member, sans aucune permission)PATCH /files/{key}/name {"name":"qa_sec_renamed_by_C.txt"}-> 200, puisDELETE /files/{key}-> 204. 3. A relitGET /files/meta/{key}-> 404 (fichier perdu, supprimé aussi du stockage S3).HandleKnowledge(jamais vérifiée côté backend). Cela concerne aussi les fichiers d'événements, les avatars et les documents de la base de connaissance.backend/API/Storage/Delete/DeleteFileEndpoint.cs:11,Storage/Update/UpdateFileNameEndpoint.cs:18(seulement[Authorize]),DeleteFileCommand/UpdateFileNameCommandne comparent pasCreatorau user courant. De mêmePOST /filesn'exige aucune permission.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.