1.1 [Basics] Attaques CSRF : découvrir
Frotte-toi aux flammes des attaques cross-site request forgery (CSRF) sans te brûler les ailes !
Objectifs
- Savoir expliquer le fonctionnement d'une attaque CSRF
- Mener une attaque CSRF simple
Un e-mail qui vous veut du bien
Milieu d'après-midi. Un certain ennui te gagne à mesure que les heures avancent lorsque le plop d'une notification retentit sur ton ordinateur. Tu cliques et découvres un e-mail de la part de darkMereGrand_83, ta grand-mère amatrice de compositions florales et hacktiviste notoire.
Comme c'est touchant ! Connaissant ton amour pour les chatons ET les boîtes aux lettres rétro (oui, tu as des goûts très spécifiques), elle t'envoie un lien vers un gif s'annonçant des plus prometteurs.

Ce que tu espères voir en cliquant.
Source : Giphy
Mais lorsque tu cliques, c'est la déception : une page vide s'ouvre dans ton navigateur.
Quelques secondes plus tard, ton téléphone sonne.
– Tu pourrais vérifier les URLs des liens qu'on t'envoie avant de cliquer, quand même ! Et si j'avais été un sombre individu te demandant de me virer 15 000 euros pour financer la relance de ma mine de diamants au Birobijan..? – Mais, mamie, c'est toi qui m'as envoyé ce lien ! Pas un sombre individu du Bi.. Biro.. Birobi... – Trèves d'excuses et de prétextes, ma petite caille digitale, je ne veux rien savoir ! Les attaques sea-surf, c'est pas pour les poules d'eau ! – Scie quoi ? – Sea-surf ! C S R F !
Sa voix retentit encore dans le combiné tandis que tu ouvres une nouvelle fenêtre et te mets à googler « attaques CSRF »... ainsi que « chat mignon boîte aux lettres rétro ».
Qu'est-ce qu'une attaque CSRF ?
Les attaques Cross-Site Request Forgery (CSRF) ont pour but de faire exécuter à l'utilisateur·trice d'un site web des actions à son insu.
CSRF, qui s'écrit parfois XSRF, se prononce communément sea-surf.
Pour découvrir une définition interactive des CSRF, clique ici.
Si les attaques XSS peuvent être assimilées à un vol (des informations personnelles d'un utilisateur, par exemple), les attaques CSRF ressemblent davantage au hijacking : les pirates vont profiter du fait que l'utilisateur soit authentifié à un site web pour s'emparer de sa session et lui faire faire des actions à son insu.
Quels dommages ?
Il est difficile de généraliser l'impact d'une attaque CSRF, car il dépend du statut de l'utilisateur·trice piraté·e. Pour en savoir plus, consulte la partie « Introduction » de ce cheat sheet.
Exemple d'une attaque CSRF dont la réussite n'a d'égale que le manque d'élégance verbale.
La partie « Introduction » survole les impacts possibles d'une attaque CSRF.
Rappel : cookies et authentification
Comme tu vas le voir dans la suite de cette quête, les attaques CSRF exploitent un mode de fonctionnement normal des navigateurs web. Concrètement, lorsqu'un·e utilisateur·trice s'authentifie sur un site, ses informations d'authentification sont gardées en mémoire dans des cookies, eux-mêmes stockés dans le navigateur. C'est ce qui te permet de ne pas avoir à rentrer ton identifiant et ton mot de passe à chaque fois que tu interagis avec une application web sécurisée.
L'utilisation des cookies n'est pas la seule manière de réaliser une authentification. Néanmoins, puisque c'est ce qui engendre des vulnérabilités exploitables par CSRF, nous ne parlerons que de celle-ci dans cette quête.
L'attaque CSRF profite de la présence de ces cookies dans ton navigateur pour faire croire au site web que l'action malfaisante ne provient pas d'un·e pirate, mais de toi.
Avant de rentrer plus en détails dans cette mécanique, consulte (si tu en as besoin) cette vidéo sur les cookies, ainsi que cette réponse Stack Overflow, qui résume très bien le rôle des cookies dans le processus d'authentification. Jette un œil sur l’encart gris de la partie « The HTTP POST Request » de cet article pour voir comment les informations liées à un cookie d’authentification sont transmises au serveur dans une requête HTTP.
Exemple de requête HTTP contenant des informations d’authentification liées à un cookie.
Explication simple du rôle des cookies dans une authentification.
Vidéo animée expliquant ce qu'est un cookie (attention, ça donne faim !)
Mécanisme d'une attaque CSRF
Cet article (arrête-toi avant la partie « Preventing CSRF vulnerabilities ») décrit le mécanisme d'une attaque CSRF. Il explique aussi que cette attaque peut se faire aussi bien en GET qu'en POST.
Consolide ce que tu viens d'apprendre avec cette réponse sur Stack Overflow, qui résume très bien les étapes d'une attaque CSRF (arrête-toi à la phrase « This is the world without CSRF tokens. »).
Maintenant que tu as la théorie, vas voir comment mener une attaque rudimentaire en pratique (à regarder à partir de 3 minutes 58).
Tu peux déduire de ces descriptions qu'une attaque CSRF bien menée nécessite une bonne dose de social engineering. Pour en savoir plus sur les pratiques possibles (et apprendre à t'en méfier !), clique ici.
Différentes techniques de social engineering (de quoi briller dans les dîners mondains façon Mr Robot).
(à regarder à partir de 3 minutes 58) Démonstration d'une attaque CSRF rudimentaire.
Explication étape par étape d'une attaque CSRF (simple, clair - merci, Stack Overflow !).
Mécanisme d'une attaque CSRF.
Challenge
Un dessert sans fromage est une belle à qui il manque un œil
Si cette citation de Brillat-Savarin se discute, c'est certain qu'une application web sans barrières de sécurité peut vite devenir un gruyère ! Google l'a bien compris en proposant une application web vulnérable nommée Gruyere.
Pour ce challenge, ton but est de trouver une façon de piéger un utilisateur inscrit sur Gruyere afin de lui faire effacer un de ses snippets.
- 1
Démarre ton gruyère
Vas sur Gruyere. Comme tu peux le voir, un Gruyere instance id (une longue série de chiffres) t'est attribué. Il est différent pour chaque utilisateur qui ouvre l'application web. Note le tien quelque part, tu vas en avoir besoin. Clique ensuite sur le lien Agree & Start (ou Resume si ce n'est pas ta première fois sur ce site) pour arriver sur la page Home : note que l'url de la page Home contient ton id !
- 2
Inscris-toi
Depuis la page Home, inscris-toi via le lien Sign Up en haut à droite, puis retourne sur la page Home.
- 3
Crée un nouveau snippet
Clique sur New snippet et crée un nouveau snippet.
- 4
Cherche la faille
Observe le lien de suppression que tu as maintenant à disposition (la "croix" associé à ton nouveau snippet).

À partir de tes observations, tu dois trouver une URL de ce type :
https://google-gruyere.appspot.com/<gruyereInstanceId>/<quelqueChose>, où<gruyereInstanceId>correspond au Gruyere instance id que tu as noté à l'étape 1 (exemple : si ton Gruyere instance id était 1234563543737373, tu dois avoirhttps://google-gruyere.appspot.com/1234563543737373/quelqueChose). - 5
Prépare ton attaque
Une fois que tu as trouvé une URL qui entraîne la suppression d'un snippet lorsque tu cliques dessus, inscris là URL en solution de cette quête en remplaçant ton Gruyere instance id par
GRUYEREINSTANCEID(exemple : si ton Gruyere instance id était 1234563543737373,https://google-gruyere.appspot.com/1234563543737373/blabla?id=3devienthttps://google-gruyere.appspot.com/GRUYEREINSTANCEID/blabla?id=3).
Partage le lien en guise de solution au challenge.
Critères de validation
- Ouvrir Gruyere dans une fenêtre de navigation privée.
- Noter le Gruyere instance id (une série de chiffres), puis cliquer sur le lien Agree & Start.
- S'inscrire via le lien Sign Up en haut à droite.
- Se connecter.
- Cliquer sur New snippet et en créer un nouveau.
- Dans l'URL fournie par l'élève, remplacer la partie
GRUYEREINSTANCEIDpar le Gruyere instance id (une série de chiffres) noté à l'étape 2 (exemple : si le Gruyere instance id était 08909867,https://google-gruyere.appspot.com/GRUYEREINSTANCEID/blabla?id=3devienthttps://google-gruyere.appspot.com/08909867/blabla?id=3). - Sans fermer l'onglet où se trouve l'app Gruyere, ouvrir un nouvel onglet et copier-coller l'URL de l'élève dans le navigateur.
- Retourner dans l'onglet où se trouve l'app Gruyere et vérifier que le snippet a bien été effacé. Si oui, le challenge est réussi !
Ressources partagées sur cette quête
- Explication du concepthttps://www.youtube.com/watch?v=UxmXhnrYv8k
- doc officiel permet de connaitre le type d'url qu'ils attendenthttps://google-gruyere.appspot.com/part3
- une bonne explication des snippetshttps://www.youdemus.fr/2018/09/27/quest-ce-que-les-snippets-et-pourquoi-c-est-important/
- Bonne explication bien détaillée en françaishttps://www.youtube.com/watch?v=L3BvvR081j0