Une attaque CSRF (ou Cross-Site Request Forgery) est une technique malveillante où un attaquant incite un utilisateur à exécuter, à son insu, des actions non désirées sur une application web à laquelle il est déjà authentifié. L’objectif est de détourner la confiance que l’application accorde à l’utilisateur, en exploitant les cookies de session ou les identifiants stockés dans le navigateur.
- CATÉGORIE : 🔴 Attaque informatique
- FRÉQUENCE : 🔥🔥🔥
- DANGEROSITÉ : 💀💀💀
- DIFFICULTÉ D’ÉRADICATION : 🧹🧹🧹
Fonctionnement
- Scénario typique :
- L’utilisateur est connecté à un site (ex: banque en ligne, réseau social).
- Il visite un site malveillant ou clique sur un lien piégé.
- Ce lien déclenche une requête HTTP vers l’application cible, en utilisant les cookies de session de l’utilisateur.
- L’application traite la requête comme légitime, car elle provient d’un navigateur authentifié.
- Exemple concret :
<!-- Site malveillant : formulaire invisible déclenchant un virement bancaire --> <form action="https://banque.com/transfer" method="POST"> <input type="hidden" name="montant" value="1000"> <input type="hidden" name="compte" value="ATTACKER_ACCOUNT"> </form> <script>document.forms[0].submit();</script>
Si l’utilisateur est connecté à
banque.com
, la requête transfère 1000 € sans son consentement
📌 Conditions nécessaires
- Authentification par cookies : l’application utilise des cookies pour gérer les sessions
- Absence de protection CSRF : aucun jeton aléatoire (CSRF token) n’est exigé pour valider les requêtes sensibles
- Requêtes prédictibles : les paramètres de l’action (ex: URL, champs de formulaire) sont devinables
🎯 Actions possibles via CSRF
- Modification de mots de passe ou d’adresses e-mail
- Publication de contenu indésirable (ex : réseaux sociaux)
- Virements bancaires, achats non autorisés
- Suppression de comptes ou de données
🛡️ Méthodes de protection
- CSRF Tokens :
- Générer un jeton unique et aléatoire pour chaque formulaire ou requête.
- Le serveur vérifie ce jeton avant d’exécuter l’action.
- SameSite Cookies :
- Définir l’attribut
SameSite=Strict
ouLax
pour empêcher l’envoi de cookies dans des requêtes intersites.
- Définir l’attribut
- Vérification du Referer/Origin :
- Vérifier que la requête provient du même domaine que l’application.
- Reconnaissance utilisateur :
- Demander un mot de passe ou une 2FA pour les actions critiques.
🔍 Exemple
- En 2018, une vulnérabilité CSRF a été trouvée dans Drupal, permettant à des attaquants de modifier les paramètres d’administration.
⚠️ Différence entre CSRF vs XSS
- CSRF : exploite la confiance d’un site envers l’utilisateur.
- XSS : exploite la confiance d’un utilisateur envers un site (injection de code malveillant).
📊 Statistiques
- OWASP : classée dans le Top 10 des risques web jusqu’en 2017, moins fréquente aujourd’hui grâce aux protections modernes.
- Bug Bounty : les primes pour les failles CSRF varient entre 500 et 5000 € selon la criticité.