Contournement de l'authentification
| Identifiant de scan | generic.accept_unauthenticated_operation |
|---|---|
| Gravité | Élevée |
| CVSS 4.0 | 9.3 — CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N |
| Catégorie OWASP | OWASP API2:2023 Broken Authentication |
La vulnérabilité « Contournement de l’authentification » survient lorsqu’un endpoint censé nécessiter une authentification renvoie une réponse de succès (2xx) alors que la requête ne contient aucun identifiant. VulnAPI la détecte en envoyant une requête au endpoint sans en-tête Authorization, cookies, ou autres identifiants, et en vérifiant si la réponse indique un succès plutôt que de renvoyer 401 Unauthorized ou 403 Forbidden.
Exemple
Section titled “Exemple”Requête authentifiée normale (devrait réussir) :
GET /api/users/profile HTTP/1.1Authorization: Bearer eyJhbGciOiJSUzI1NiI...
HTTP/1.1 200 OKRequête non authentifiée (devrait être rejetée — mais est vulnérable si elle renvoie 200) :
GET /api/users/profile HTTP/1.1
HTTP/1.1 200 OK ← vulnérable !Comment tester ?
Section titled “Comment tester ?”vulnapi scan curl [url] -H "Authorization: Bearer eyJhbGciOiJSUzUxMiI..." --scans generic.accept_unauthenticated_operationecho "eyJhbGciOiJSUzUxMiI..." | vulnapi scan openapi [OpenAPI_Path_Or_URL] --scans generic.accept_unauthenticated_operationvulnapi scan graphql -H "Authorization: Bearer eyJhbGciOiJSUzUxMiI..." --scans generic.accept_unauthenticated_operation [url]VulnAPI prend aussi en charge le scan d’autres types de vulnérabilités.
Quel est l’impact ?
Section titled “Quel est l’impact ?”Si un attaquant peut accéder à un endpoint protégé sans aucun identifiant, il peut :
- Accéder à des données sensibles : lire des profils utilisateur, des dossiers financiers, des messages privés, ou toute autre donnée renvoyée par le endpoint
- Effectuer des opérations privilégiées : créer, modifier, ou supprimer des ressources sans être connecté
- Contourner entièrement la couche d’authentification : tous les contrôles de sécurité dépendant de l’authentification deviennent inefficaces
- Énumérer des utilisateurs ou des données : extraire toutes les données de l’API sans avoir besoin de compte
Le score CVSS 9.3 reflète le fait qu’il s’agit d’une faille exploitable réseau, sans authentification préalable requise, donnant un accès complet en lecture/écriture.
Comment corriger ?
Section titled “Comment corriger ?”-
Imposer l’authentification sur chaque endpoint protégé : chaque route servant ou modifiant des données utilisateur doit valider les identifiants avant de traiter la requête.
-
Renvoyer 401 pour les requêtes non authentifiées : renvoyez toujours
401 Unauthorized(et non200,404, ou500) lorsqu’aucun identifiant valide n’est fourni. Un403 Forbiddenest approprié lorsque l’utilisateur est authentifié mais ne dispose pas des permissions requises. -
Appliquer un middleware d’authentification global : utilisez un middleware au niveau de la passerelle ou du framework qui intercepte toutes les requêtes et impose l’authentification, plutôt que d’ajouter des contrôles d’auth endpoint par endpoint.
-
Tester l’accès non authentifié pour chaque nouveau endpoint : ajoutez un test automatisé vérifiant que chaque endpoint protégé renvoie 401 lorsqu’aucun identifiant n’est fourni.
# Exemple FastAPI — imposer l'authentification globalementfrom fastapi import Depends, HTTPException, Securityfrom fastapi.security import HTTPBearer
security = HTTPBearer()
@app.get("/api/users/profile")async def get_profile(credentials = Security(security)): # credentials.credentials est le Bearer token user = verify_token(credentials.credentials) return user