Rapport de test d’intrusion
Exemple de vulnérabilité
Tout utilisateur connecté peut lire les factures de n’importe quel client
Gravité : Élevée
Un client change un identifiant de facture et lit celle d’un autre client.
Lire la vulnérabilité complèteMasquer la vulnérabilité complète
- Faiblesse
- CWE-639
- CVSS 4.0
- AV:N/
AC:L/ AT:N/ PR:L/ UI:N/ VC:H/ VI:N/ VA:N/ SC:N/ SI:N/ SA:N - Trouvée en
- Test avec des comptes (2.3)
- Statut
- Prouvée
Preuve
- 1Nous sommes connectés en tant qu’utilisateur 1042, un client ordinaire.
- 2Nous demandons la facture 88213 en changeant un seul nombre dans l’URL.
- 3Le serveur la renvoie. Elle appartient au client 2291, avec son nom et ses coordonnées bancaires.
GET /api/v2/invoices/88213 HTTP/2Host: app.example-saas.comCookie: session=7f3a…c91eAccept: application/jsonHTTP/2 200 OKContent-Type: application/json { "invoice_id": 88213, "customer_id": 2291, "customer_name": " ", "iban": "FR76 0189", "amount_due": 18400.00}Correction
- Appliquer le contrôle d’autorisation au niveau objet côté serveur. Charger la facture, puis comparer son identifiant de compte à celui de la session de l’appelant avant de renvoyer la moindre donnée.
- Renvoyer 404 Not Found quand le contrôle échoue, pour que la réponse ne confirme pas l’existence de la facture.
- Placer le contrôle dans une couche partagée (middleware ou accès aux données) et l’appliquer à chaque point d’accès qui reçoit un identifiant d’objet, pas route par route.
- Ajouter un test de non-régression qui demande la facture d’un autre compte et attend 404.
- Chercher dans les journaux d’accès les demandes de factures hors du compte de l’appelant, pour savoir si la faille a été utilisée avant la correction.
Des identifiants aléatoires comme les UUID rendent la faille plus difficile à trouver. Ils ne la corrigent pas.
Contre-test
Demander la facture 88213 en tant qu’utilisateur 1042. Résultat attendu : 404, aucune donnée de facture.
Références
OWASP Top 10:2025, A01 Broken Access Control. OWASP ASVS 5.0, exigence 8.2.2.