This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org
4.7.3 Tester les fixations de session (OTG-SESS-003)
This article is part of the new OWASP Testing Guide v4.
Back to the OWASP Testing Guide v4 ToC: https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents Back to the OWASP Testing Guide Project: https://www.owasp.org/index.php/OWASP_Testing_Project
Sommaire
Quand une application ne renouvelle pas son/ses cookie(s) de session après une authentification réussie, il est possible de trouve une vulnérabilité de fixation de session et de forcer un utilisateur à utiliser un cookie connu de l'attaquant. Dans ce cas, un attaquant peut détourner la session de l'utilisateur (session hijacking).
Les vulnérabilité de fixation de session apparaissent quand :
- Une application web authentifie un utilisateur sans d'abord invalider l'identifiant de session existant, continuant ainsi à utiliser l'identifiant de session déjà associé à l'utilisateur.
- Un attaquant peut forcer un utilisateur à utiliser un identifiant de session connu permettant à l'attaquant, une fois l'utilisateur authentifié, d'accéder à la session authentifiée.
Dans le cas général d'exploitation de fixation de session, un attaquant crée une nouvelle session sur une application web et enregistre l'identifiant de session associé. Ensuite, l'attaquant pousse la victime à s'authentifier sur le serveur en utilisant le même identifiant de session, donnant ainsi à l'attaquant accès au compte de l'utilisateur via la session active.
De plus, le soucis décrit plus haut est problématique pour les sites qui envoient des identifiant de session via HTTP, puis redirigent les utilisateurs vers un formulaire d'authentification en HTTPS. Si l'identifiant de session n'est pas renouvelé lors de l'authentification, l'attaquand peut espionner et voler l'identifiant, puis l'utiliser pour détourner la session.
Comment tester
Test en boite noire
Tester les vulnérabilités de fixation de session:
La première étape est de faire une requête vers le site à tester (par exemple www.example.com). Si le testeur envoit cette requête :
GET www.example.com
Il va obtenir la réponse suivante :
HTTP/1.1 200 OK Date: Wed, 14 Aug 2008 08:45:11 GMT Server: IBM_HTTP_Server Set-Cookie: JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1; Path=/; secure Cache-Control: no-cache="set-cookie,set-cookie2" Expires: Thu, 01 Dec 1994 16:00:00 GMT Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html;charset=Cp1254 Content-Language: en-US
L'application crée un nouvel identifiant de session JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1 pour le client.
Ensuite, si le testeur réussi à s'authentifier sur l'application au moyen du POST HTTPS suivant :
POST https://www.example.com/authentication.php HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://www.example.com Cookie: JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1 Content-Type: application/x-www-form-urlencoded Content-length: 57 Name=Meucci&wpPassword=secret!&wpLoginattempt=Log+in
Le testeur observe la réponse suivante renvoyée par le serveur :
HTTP/1.1 200 OK Date: Thu, 14 Aug 2008 14:52:58 GMT Server: Apache/2.2.2 (Fedora) X-Powered-By: PHP/5.1.6 Content-language: en Cache-Control: private, must-revalidate, max-age=0 X-Content-Encoding: gzip Content-length: 4090 Connection: close Content-Type: text/html; charset=UTF-8 ... HTML data ...
Aucun nouveau cookie n'a été envoyé suite à l'authentification réussie. Le testeur sait qu'il est possible de procéder à un détournement de session.
Résultat attendu : Le testeur peut envoyer un identifiant de session valide à un utilisateur (par ingénierie sociale, par exemple), attendre que ce dernier s'authentifie, et ensuite vérifier que les privilèges ont été assignés à ce cookie.
Test en boite grise
Parlez avec les développeurs et comprenez s'il ont implémenté un renouvellement de jeton de session après une authentification réussie.
Résultat attendu :
L'application devrait toujours invalider l'identifiant de session existant avant d'authentifier un utilisateur, et si l'authantification est réussie, fournir un autre identifiant de session.
Outils
- JHijack - un outil numérique de détournement de session - http://yehg.net/lab/pr0js/files.php/jhijackv0.2beta.zip
- OWASP WebScarab: OWASP_WebScarab_Project
References
Whitepapers
- Session Fixation
- ACROS Security: http://www.acrossecurity.com/papers/session_fixation.pdf
- Chris Shiflett: http://shiflett.org/articles/session-fixation