Cross Site Request Forgery (CSRF, aussi XSRF ou Session Riding) est une attaque web qui force un utilisateur authentifie a executer une action non voulue sur une application ou il a une session ouverte. L attaquant prepare un lien malveillant, une image ou un formulaire sur un site qu il controle. Quand la victime visite cette page sans s etre deconnectee du site cible (banque en ligne, admin WordPress, webmail), le navigateur envoie automatiquement la requete avec le cookie de session. Le serveur ne distingue pas la fausse requete d une vraie et l execute : virement, changement d email, suppression d un article, attribution de droits admin. CSRF etait n5 dans OWASP Top 10 2007 et 2010, est sorti du Top 10 2017 grace aux frameworks, et figure dans OWASP Top 10 2021 sous A01 Broken Access Control. Le ver Samy sur MySpace (octobre 2005, plus d un million de profils infectes en 20 heures) reste l incident CSRF le plus celebre.
Comment fonctionne une attaque CSRF ?
- La victime est connectee au site cible.
- Le site cible execute des actions modificatrices sur la seule base des cookies.
- La victime visite une page controlee par l attaquant.
<img src="https://banque.example.fr/virement?vers=ATTAQUANT&montant=10000">Cibles typiques
- Banque et paiement.
- Webmail.
- Panneaux d administration.
- Reseaux sociaux (ver Samy).
- E-commerce.
- Routeurs et IoT.
Difference CSRF vs XSS
| Propriete | CSRF | XSS |
|---|---|---|
| Effet | Force l envoi d une requete | Execute du JS attaquant |
| Execution sur la cible | Non | Oui |
| Lit la reponse | Non | Oui |
| Contourne les tokens CSRF | Non | Oui |
| Defense principale | Tokens, SameSite | Encodage, CSP |
Defenses standard
- Token anti CSRF (synchronizer token).
- Cookie SameSite (
Strict,Laxpar defaut depuis Chrome 80 en fevrier 2020). - Double submit cookie.
- Verification de Origin et Referer.
- En-tete personnalisee pour AJAX.
- Reauthentification pour les actions critiques.
- POST plutot que GET pour les modifications.
Protection WordPress
WordPress utilise les Nonces. Fonctions cles : wp_nonce_field(), wp_create_nonce(), check_admin_referer(), check_ajax_referer(). Duree de vie 24 heures. Les plugins doivent les utiliser, sinon ils generent des CVE.
SPA et REST API
SameSite=Strictsur le cookie de session.- En-tete
X-CSRF-Tokensur chaque appel. - Ou JWT en
Authorization: Bearer, qui supprime CSRF mais necessite une CSP stricte contre XSS.
Incidents reels
- Ver Samy sur MySpace, octobre 2005.
- YouTube 2008, Netflix 2006.
- Nombreux plugins WordPress (Forminator, LiteSpeed Cache, Royal Elementor Addons en 2024).
- Routeurs grand public (etude 2018, plus de 70 pour cent vulnerables).
Comment InspectWP aide pour CSRF ?
InspectWP analyse les en-tetes Set-Cookie et signale l absence des attributs SameSite et Secure.