65 lines
4.8 KiB
Markdown
65 lines
4.8 KiB
Markdown
# SEC-12 — Les dossiers des collègues sont accessibles sans rôle de gestion
|
||
|
||
**Gravité historique : Faible.** Classification : CWE-862.
|
||
|
||
**État au 14 septembre 2026 :** Corrigé dans le code suivi. La liste et les statistiques globales CSV sont réservées à ADMIN/MANAGER. Les listes personnelles restent disponibles selon les droits existants.
|
||
|
||
## Executive Summary
|
||
|
||
Un USER ou VIEWER connecté appartient à une organisation possédant des réservations CSV créées par d'autres utilisateurs. Il appelle la liste globale de l'organisation alors que celle-ci est décrite comme réservée aux managers et administrateurs.
|
||
|
||
Cette fiche repose sur la relecture du code historique accessible et du correctif courant, ainsi que des preuves documentées lors des passes précédentes. Elle ne constate aucun incident réel. La plus ancienne version ici vérifiée est le snapshot `8446f87` ; les corrections historiques figurent dans `c09b8be`. Aucun tag local ni version déployée n'a permis d'établir une première release vulnérable ou corrigée. Voir [METHODOLOGIE.md](../METHODOLOGIE.md).
|
||
|
||
## Background
|
||
|
||
La liste d’organisation est une opération plus large qu’une lecture personnelle. L’identité du tenant est correctement dérivée de la session, mais il manque historiquement le droit de consulter les dossiers des collègues.
|
||
|
||
## Vulnerability Details
|
||
|
||
`GET /api/v1/csv-bookings/organization/all` ne portait que JwtAuthGuard. Le contrôleur prend correctement `organizationId` dans la session puis appelle `getOrganizationBookings`, qui retourne les réservations de ce tenant. À l'inverse, la lecture individuelle vérifie le propriétaire ou le transporteur assigné. Cette divergence permet de contourner la restriction de lecture individuelle par un endpoint de collection. C'est une autorisation manquante sur une opération de groupe, pas une manipulation de l'organisation de session.
|
||
|
||
Extrait historique vérifié, `apps/backend/src/application/controllers/csv-bookings.controller.ts`, lignes 313–321 du snapshot préaudit :
|
||
|
||
```typescript
|
||
@Get('organization/all')
|
||
@UseGuards(JwtAuthGuard)
|
||
@ApiBearerAuth()
|
||
@ApiOperation({
|
||
summary: 'Get organization bookings',
|
||
description:
|
||
"Retrieve all bookings for the user's organization with pagination. For managers/admins.",
|
||
})
|
||
@ApiQuery({ name: 'page', required: false, type: Number, example: 1 })
|
||
```
|
||
|
||
Les numéros ci-dessus décrivent le snapshot ancien ; les liens suivants ouvrent les fichiers courants, où les lignes peuvent avoir changé.
|
||
|
||
Sources à examiner ensemble :
|
||
|
||
- [apps/backend/src/application/controllers/csv-bookings.controller.ts](../../apps/backend/src/application/controllers/csv-bookings.controller.ts)
|
||
- [apps/backend/src/application/services/csv-booking.service.ts](../../apps/backend/src/application/services/csv-booking.service.ts)
|
||
|
||
## Exploitability Analysis
|
||
|
||
Consultation des prix, notes, données transporteur et métadonnées documentaires des collègues. Aucun franchissement entre organisations n'est démontré ; les réservations non CSV ont une politique distincte et ne sont pas automatiquement concernées. Les tokens anciennement exposés par cette liste relèvent de SEC-05 et ne sont pas comptés comme une seconde fuite indépendante ici.
|
||
|
||
Le code applicatif établit le chemin décrit, mais ne renseigne pas les protections effectives d'un déploiement donné, sa version en ligne ou les accès déjà exercés par un attaquant. La gravité ci-dessus est celle du mécanisme vulnérable avant correction ; elle n'est pas un score de risque résiduel calculé pour la production.
|
||
|
||
## Proof of Concept
|
||
|
||
Tests de non-régression existants, inspectables dans le dépôt :
|
||
|
||
- [apps/backend/src/application/controllers/csv-bookings.security.spec.ts](../../apps/backend/src/application/controllers/csv-bookings.security.spec.ts)
|
||
|
||
Ils testent les refus et les usages autorisés avec des données locales. Ils ne prouvent pas qu'une ancienne exploitation a eu lieu en production. Les commandes et résultats consolidés sont dans [VALIDATION.md](../VALIDATION.md) ; aucun nouvel exploit n'a été exécuté pendant la rédaction.
|
||
|
||
## Remediation
|
||
|
||
Corrigé dans le code suivi. La liste et les statistiques globales CSV sont réservées à ADMIN/MANAGER. Les listes personnelles restent disponibles selon les droits existants.
|
||
|
||
Pour solder le constat en exploitation, vérifier le comportement sur la version effectivement déployée et conserver les contrôles légitimes décrits. La présente passe ajoute uniquement de la documentation ; les correctifs mentionnés existaient avant sa rédaction.
|
||
|
||
## Summary
|
||
|
||
Les dossiers des collègues sont accessibles sans rôle de gestion est un constat historique de l'audit, à lire avec son état courant ci-dessus. La preuve porte sur le mécanisme et les contrôles cités ; elle ne constitue ni une attestation d'exploitation réelle ni une certification exhaustive du projet.
|