Mauvaise configuration des cookies HTTP
| Identifiant de scan | misconfiguration.http_cookies |
|---|---|
| Gravité | Info |
| CVSS 4.0 | 0.0 |
| Catégorie OWASP | OWASP API8:2023 Security Misconfiguration |
Les indicateurs de sécurité des cookies protègent les tokens de session et cookies d’authentification du vol et des usages abusifs. Des indicateurs manquants ou mal configurés représentent individuellement des risques de faible gravité, mais combinés, ils augmentent significativement le risque de détournement de session, de vol de token via XSS, et d’attaques cross-site.
Contrôles effectués
Section titled “Contrôles effectués”Le scan misconfiguration.http_cookies de VulnAPI vérifie cinq problèmes sur chaque en-tête de réponse Set-Cookie :
Indicateur HttpOnly manquant (CWE-1004)
Section titled “Indicateur HttpOnly manquant (CWE-1004)”Sans HttpOnly, le JavaScript exécuté sur la page (y compris les scripts injectés via XSS) peut lire la valeur du cookie via document.cookie.
Set-Cookie: session=abc123 ← vulnérableSet-Cookie: session=abc123; HttpOnly ← correctIndicateur Secure manquant (CWE-614)
Section titled “Indicateur Secure manquant (CWE-614)”Sans Secure, le cookie est envoyé sur des connexions HTTP non chiffrées, l’exposant à l’interception réseau (attaques de type man-in-the-middle).
Set-Cookie: session=abc123 ← vulnérableSet-Cookie: session=abc123; Secure ← correctSameSite=None sans restrictions (CWE-1275)
Section titled “SameSite=None sans restrictions (CWE-1275)”SameSite=None permet l’envoi du cookie dans tous les contextes cross-site, ce qui peut permettre des attaques CSRF si Secure n’est pas également défini. Utilisez plutôt SameSite=Strict ou SameSite=Lax.
Set-Cookie: session=abc123; SameSite=None ← vulnérableSet-Cookie: session=abc123; SameSite=Strict; Secure ← correctAttribut SameSite non défini (CWE-1275)
Section titled “Attribut SameSite non défini (CWE-1275)”Sans attribut SameSite, les navigateurs appliquent la politique par défaut (Lax dans les navigateurs modernes, mais None dans les plus anciens). Définissez explicitement SameSite pour ne pas dépendre des valeurs par défaut du navigateur.
Absence d’expiration (Expires / Max-Age manquant) (CWE-613)
Section titled “Absence d’expiration (Expires / Max-Age manquant) (CWE-613)”Sans expiration, le cookie est un cookie de session — il n’expire que lorsque l’onglet du navigateur se ferme. Les utilisateurs qui ne ferment pas leur navigateur peuvent conserver l’accès à la session indéfiniment.
Set-Cookie: session=abc123 ← pas d'expirationSet-Cookie: session=abc123; Max-Age=3600 ← expire après 1 heureComment tester ?
Section titled “Comment tester ?”vulnapi scan curl [url] -H "Authorization: Bearer eyJhbGciOiJSUzUxMiI..." --scans misconfiguration.http_cookiesecho "eyJhbGciOiJSUzUxMiI..." | vulnapi scan openapi [OpenAPI_Path_Or_URL] --scans misconfiguration.http_cookiesvulnapi scan graphql -H "Authorization: Bearer eyJhbGciOiJSUzUxMiI..." --scans misconfiguration.http_cookies [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 ?”Les indicateurs de cookie manquants représentent individuellement des résultats de faible gravité, mais combinés, ils créent une surface d’attaque significative :
- XSS +
HttpOnlymanquant → l’attaquant peut voler le token de session viadocument.cookie Securemanquant → token exposé en HTTP (ex. pages en contenu mixte, portails captifs)SameSitemanquant → les attaques CSRF peuvent utiliser le cookie de session cross-origin- Absence d’expiration → des sessions de longue durée augmentent la fenêtre d’opportunité pour les abus
Comment corriger ?
Section titled “Comment corriger ?”Définissez tous les indicateurs de sécurité sur les cookies transportant des tokens de session ou des données d’authentification :
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Strict; Max-Age=3600; Path=/| Indicateur | Valeur | Objectif |
|---|---|---|
HttpOnly | (indicateur) | Empêcher l’accès JavaScript |
Secure | (indicateur) | HTTPS uniquement |
SameSite | Strict ou Lax | Restreindre l’envoi cross-site |
Max-Age | secondes | Définir la durée de vie de la session |
Path | / ou chemin spécifique | Restreindre la portée du cookie |
Pour les applications monopages nécessitant des cookies cross-origin (ex. domaines API et frontend séparés), utilisez SameSite=None; Secure accompagné de tokens CSRF.