Nous allons aujourd’hui nous arrêter sur les attaques de types CSRF, classées #8 à l’OWASP Top 10 2013.
Cross Site Request Forgery, traduit en français “Falsification de requête intersite”. Déjà que le nom en anglais n’est pas des plus facile à cerner au premier abord, la traduction française ne fait qu’ajouter de la difficulté!
Le plus gros problème des attaques CSRF est que bon nombre de développeurs ne les comprennent pas. Le mode opératoire de ces attaques est pourtant assez facile à comprendre et les protections également assez faciles à mettre en place.
L’impact de telles attaques peut être assez sévère, puisqu’il permet à un attaquant de forcer ses victimes à effectuer certaines actions sur un site cible, sans qu’elles s’en aperçoivent.

Dans le monde réel, une attaque CSRF serait quelqu’un de malintentionné ajoutant un article dans votre caddie lorsque vous faites vos courses en supermarché, et l’hôtesse de caisse traitant cet article comme un article de plus que vous souhaitez acheter. Si l’attaque n’est pas détectée, vous allez payer l’article en question.

Prenons une à une les différentes étapes d’une attaque CSRF, sur le web.
Nous supposons que l’attaquant aura au préalable repéré un site vulnérable à une attaque de type Cross Site Request Forgery.

CSRF steps illustration
Etapes Cross Site Request Forgery (CSRF)

CSRF étape 1

La victime navigue sur une page web gérée par l’attaquant, et hébergée sur un site malicieux. Cette page malicieuse aura été spécialement développée pour inclure quelques lignes de code qui déclencheront automatiquement une requête vers le site cible (ou manuellement, mais sans que la victime ne s’en aperçoive).
Par exemple, ces quelques lignes de code pourraient être une simple balise HTML image, qui au lieu de charger une image effectuera une requête vers le site cible.
<img src=“http://mytarget.com/change_password.php?new_password=letmein” height=0 width=0>

CRSF étape 2

Lors de sa navigation sur le site malicieux, le navigateur de la victime va parcourir le code écrit par l’attaquant, et lira en particulier les quelques lignes de code décrites ci dessus (la balise image).
Ceci nous amène directement à l’étape 3.

CSRF étape 3

La victime envoie la requête vers le site cible, exécutant ainsi n’importe quelle action que l’attaquant souhaite faire exécuter à sa victime, si celle-ci est authentifiée sur le site cible, bien entendu.

Dans notre exemple, la victime va effectuer un changement de mot de passe sur le site cible, sans s’en rendre compte.
Du point de vue du site cible, la requête de modification de mot de passe est comme toute autre requête réalisée par la victime dans un contexte normal, puisque le navigateur de la victime est authentifié (c’est une des conditions nécessaires à l’exécution de l’attaque).

Notez que l’action qui sera effectuée sur le site cible lors de l’attaque peut être n’importe quelle action qui n’est pas correctement protégée contre les attaques CSRF.
Notez également que nous avons pris comme exemple dans notre explication le cas d’un site malicieux contenant le code réalisant l’attaque (la balise image), mais il est existe plusieurs autres moyens d’effectuer l’attaque, comme par exemple l’exploitation d’une attaque XSS.
Pour mémo, une attaque XSS permet à un attaquant d’inclure un code malicieux (l’image ici) sur un site tiers, tel qu’un forum, un blog, ou tout autre type de site qu’il ne possède pas.

Comment se prémunir des attaques CSRF?

Eviter les vulnérabilités, en tant que développeur

Détecter les vulnérabilités sur votre site peut être effectué en réalisant une revue de code, ou un test d’intrusion (pentest).
Les vulnérabilités permettant ces attaques peuvent être contrées en utilisant des jetons anti-CSRF (anti-CSRF tokens) dans les requêtes afin de rendre certains paramètres non prévisibles (aussi bien GET que POST).
Demander une ré-authentification est également un moyen de s’assurer que la personne que l’on croit être en train d’effectuer l’action est bel et bien celle que l’on imagine, et qu’elle souhaite effectuer l’action en question.
Les authentifications multi-facteurs sont également très efficaces, sur des opérations sensibles.

Eviter les attaques, en tant qu’utilisateur

En tant qu’utilisateur d’un site web, vous pouvez rester en dehors de portée des attaques (dans une certaine mesure), en suivant les règles suivantes :

  • Se déconnecter des sites web après avoir terminé sa navigation.
  • Ne pas autoriser son navigateur web à retenir ses identifiants, et ne pas autoriser les sites web à se rappeler de vous.
  • Accéder aux sites sensibles avec une machine différente, ou avec un navigateur différent.

Autres articles dans cette série :