Sessions
Sessions CSRF
Definitions
CSRF: Cross Site Request Forgery:
- Attaquant profite de la session ouverte de l’utilisateur pour réaliser des actions à son insu sur une appli
- L’attaquant donne un lien qui fait une action ou envoie une requete à l’appli à la place de l’utilisateur
- Le navigateur va automatiquement rajouter le cookie de session à la requete (authentification implicite)
Jetons anti-CSRF:
- création d’un jeton “token” par utilisateur inséré dans tous les forms et requests
- généré aléatoirement (en fct de la session et d’une private key server-side)
- stocké dans la session coté back
 
- Pas de jeton ou mauvais jeton alors request ignorée
- L’attaquant connait pas le jeton et jeton n’est pas automatiquement added by the browser in requests
 Don’t keep it in cookie! That makes it useless! Don’t keep it in cookie! That makes it useless!
 
- Jeton ne doit pas être prévisible et différent pour chaque utilisateur
- Most modern frameworks helps adding and validating tokens
Coté Attaquant
On exploite en GET:
- Si on autorise de poster sur des forums avec des balises html, meme si le JS est interdit, il est possible de forcer le navigateur à charger une page/une requete via une balise <img> vulnérable vulnérable
On exploite en POST en utilisant une <iframe>.
Coté Utilisateur
- CRSF ne marche que si la session dans l’appli est ouverte
- Se déconnecter des sites sensibles après utilisation
- Utiliser des navigateurs différents pour accéder aux apps sensibles
- Navigation privée
Coté Appli
- Demander à l’utilisateur de re-taper le mot de passe pour toute action critique (lors d’un changement de mdp)
- Utiliser une autre méthode de suivi de session/authentification non-implicite
- Ex: Jetons envoyés via “Authorization: Bearer” (JWT/OAuth2)
- Pas d’injection automatique du navigateur
 
- Utiliser SameSite dans les cookies
- marche que pour les browsers récents
- seulement s’il n’y a pas d’action dangeureuse via GET
- seulement si les GET et POST ne sont pas interchangeables (dans le cas de certains frameworks)
 
 Utilisation de jetons anti-CSRF Utilisation de jetons anti-CSRF- 
- meilleure solution
- en cas d’XSS, le jeton peut être volé et ne sert donc plus à rien
 
Seems legit, but no it isn’t 
- Parametres sensibles en:
- GET  attaques simples attaques simples
- POST  pages malveillantes évoluées pages malveillantes évoluées
 
- N’autoriser que les request venant d’un referer valide (meme site):
- Vulnérabilités de type open redirect peuvent faire des GET qui contournent ceci
- Entete peut etre modifié par le browser/proxy/pare-feu
- If request comes from HTTPS page, no entête présent
 
- Mettre le jeton anti-CSRF dans un cookie
- Découper les processus sur plusieurs pages
- Demande plus de travail pour le pirate, mais rien n’empêche de faire plusieurs requests d’affilée
 
- Vérifier que toutes les requests viennent de la meme adresse IP
- Une adresse IP peut changer au cours d’un processus (wifi à 4G, …)
- A request using une faille CSRF vient du browser du user, l’IP envoyée sera de toute manière la bonne
 
Auto-test
- Qu’est-ce qu’une attaque CSRF ? (prérequis, comment ça fonctionne, pourquoi ça fonctionne)
- Qu’est-ce qu’on peut faire pour s’en prémunir ?
Tester la déconnexion
Est-ce qu’on a un mécanisme de déconnexion ?
- Supprimer les cookies de session client side
- To remove cookies, an empty expired cookie should be created to replace the former one
 
- Supprimer la session server side
Selon langages
- Java: HttpSession.Invalidate()
- .NET: Session.Abandon()
- PHP: session_destroy()
Session timeout
- Déconnexion automatique après un certain temps d’inactivité
- Pour les applis très sensibles
Sessions
Sessions CSRF
Definitions
CSRF: Cross Site Request Forgery:
Jetons anti-CSRF:
Coté Attaquant
On exploite en GET:
<img>On exploite en POST en utilisant une
<iframe>.Coté Utilisateur
Coté Appli
Seems legit, but no it isn’t
Auto-test
Tester la déconnexion
Est-ce qu’on a un mécanisme de déconnexion ?
Selon langages
HttpSession.Invalidate()Session.Abandon()session_destroy()Session timeout