4.1Lecture des commandes de tout client sans autorisation
Critique- Gravité
Critique, La notation standard de la gravité technique d'une faille, de 0 à 10. Le vecteur à côté dit comment la note a été obtenue. : 6.5
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N- Composant
GET /v1/orders/{id}surapi.exemple.fr- Description
L'API vérifie que l'appelant est authentifié, mais pas que la commande demandée lui appartient. L'identifiant est un entier séquentiel transmis dans l'URL. Un client authentifié qui remplace son propre identifiant par celui d'un autre reçoit la commande complète : nom, adresse de livraison, téléphone, lignes de commande et montant. Le serveur répond 200 dans les deux cas.
- Preuve de reproduction
GET /v1/orders/4172 HTTP/1.1Host: api.exemple.frAuthorization: Bearer <jeton du compte de test> HTTP/1.1 200 OK{"id":4172,"customer":"compte de test","total":"149.90", ...} GET /v1/orders/4173 HTTP/1.1Host: api.exemple.frAuthorization: Bearer <le même jeton> HTTP/1.1 200 OK{"id":4173,"customer":"un autre client","total":"318.00", ...}- Impact
Impact démontré en lecture. Les identifiants étant séquentiels, l'énumération est triviale et automatisable : l'intégralité de l'historique de commandes est récupérable avec un seul compte client légitime. Les données concernées sont des données personnelles au sens du RGPD (article 4). Une exploitation avérée constituerait une violation à notifier à la CNIL sous 72 heures (article 33). Aucune écriture n'a été tentée.
- Prérequis
Un compte client standard, créé librement depuis le site. Aucune élévation de privilège préalable, aucune interaction d'une victime.
- Remédiation
- Vérifier côté serveur, sur cette route et sur toutes les routes qui prennent un identifiant d'objet, que l'objet demandé appartient bien à l'utilisateur de la session.
- Traiter le contrôle d'accès dans une couche commune plutôt que dans chaque route, pour que l'oubli ne soit plus possible.
- Remplacer les identifiants séquentiels par des identifiants non devinables (Un identifiant tiré au hasard, 122 bits d'aléa : impossible à deviner à partir de son voisin.). Mesure de défense en profondeur, pas un correctif à elle seule.
- Auditer les journaux d'accès à la recherche d'énumérations passées sur cette route.
- Statut
Corrigé par le client, puis vérifié au retest. Le retest est inclus dans la mission : aucune vulnérabilité n'est marquée « corrigée » sans avoir été vérifiée.