Archives Wild Code School
Sécurité Web

1.1 [Basics] Attaques CSRF : découvrir

Quête 1 sur 8 · 1 image archivée

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.

↗
WTF? Twitter gets the goat as viral message spreads

Exemple d'une attaque CSRF dont la réussite n'a d'égale que le manque d'élégance verbale.

grahamcluley.com
↗
ESSENTIEL - OWASP - Cheat sheet

La partie « Introduction » survole les impacts possibles d'une attaque CSRF.

github.com

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.

↗
OPTIONNEL - Netsparker - What is a Cross-Site Request Forgery Attack & How to Prevent It

Exemple de requête HTTP contenant des informations d’authentification liées à un cookie.

netsparker.com
↗
OPTIONNEL - Stack Overflow - How does cookie based authentication work?

Explication simple du rôle des cookies dans une authentification.

stackoverflow.com
↗
OPTIONNEL - What is a cookie?

Vidéo animée expliquant ce qu'est un cookie (attention, ça donne faim !)

youtube.com

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.

↗
OPTIONNEL - Norton - What is social engineering?

Différentes techniques de social engineering (de quoi briller dans les dîners mondains façon Mr Robot).

us.norton.com
↗
ESSENTIEL - Youtube - How to perform a CSRF attack

(à regarder à partir de 3 minutes 58) Démonstration d'une attaque CSRF rudimentaire.

youtube.com
↗
OPTIONNEL - Stack Overflow - Cross-Site Request Forgery in simple words

Explication étape par étape d'une attaque CSRF (simple, clair - merci, Stack Overflow !).

stackoverflow.com
↗
ESSENTIEL - Medium - Introduction to CSRF

Mécanisme d'une attaque CSRF.

medium.com

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. 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. 2

    Inscris-toi

    Depuis la page Home, inscris-toi via le lien Sign Up en haut à droite, puis retourne sur la page Home.

  3. 3

    Crée un nouveau snippet

    Clique sur New snippet et crée un nouveau snippet.

  4. 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. 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=3 devient https://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 GRUYEREINSTANCEID par 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=3 devient https://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