Cross-Site Request Forgery

juin 30, 2013  |   Blog   |     |   Commentaires fermés sur Cross-Site Request Forgery

 

Introduction

Le CSRF est une attaque de type Web dans laquelle, lors de l’attaque, le pirate délegue son action à un autre utilisateur du système sans même que la victime s’en rende compte.

Cette délégation peut avoir essentiellement 2 buts :

  • Cacher son identité pour effectuer une action malveillante

  • Faire executer une action à quelqu’un aillant plus de privilège que l’attaquant

Le bon déroulement de l’attaque repose sur plusieurs éléments comme :

  • La prédictabilité des requetes envoyées par l’utilisateur à l’application

  • Le type d’authentification utilisé par l’application

  • La connaissance d’une victime pouvant s’authentifier sur l’application

 

Mise en scene

Pour illustrer une attaque de ce type, imaginons que vous utilisez une application webmail mal protégée contre le CSRF et que nous pouvons entrer en contact avec un autre utilisateur.

Cette application utilise une authentification propre se basant sur un système de cookie pour effectuer du SSO (Single Sign On).

En utilisant votre messagerie, vous allez regarder comment votre navigateur communique avec le serveur et nous pouvons alors nous rendre compte que pour supprimer un message vous utilisez un lien du type :

http[:]//webmail[.]company[.]com/DeleteMail?id=32

Vous constatez aussi que vous pouvez marquer tous les mails comme lus grâce au lien suivant :

http[:]//webmail[.]company[.]com/MarkAsRead?id=*

Vous pouvez alors vous dire “Comment pourrais-je faire supprimer tous les mails de mon collègue ?”

Nous pouvons supposer que, vu l’architecture des commandes utilisées pour piloter l’application, le lien “http[:]//webmail[.]company[.]com/DeleteMail?id=*” supprimera tous les mails.

Toute la difficulté reste à le faire visiter par votre collègue, sauf que vu l’apparence du lien, il y a peu de chance pour qu’il clique. Pour ce faire, vous allez simplement créer une page web ayant cette apparence :

<html>
<body>
<p>Regardez cette jolie photo <img src=”http[:]//webmail[.]company[.]com/DeleteMail?id=*” /></p>
</body>
</html>

De cette facon, quand votre collègue chargera la page, son navigateur ira charger l’image et ne fera que supprimer l’ensemble de ses mails (à condition qu’il soit authentifié sur son webmail à cet instant précis).

Dans les faits, un lien vers ce site malveillant est souvent fourni au sein d’un mail de phishing (ou hameçonnage en français). L’utilisateur en confiance ou en stress (ex.prelevement refusé pour un fournisseur d’énergie) et clique sans prêter attention.

Protection

Afin, de se protéger de ce genre d’attaque, plusieurs méthodes existent telles que :

  • Ajouter des demandes d’interaction pour chaque action importante/irreversible

    • Popup “Voulez vous vraiment effacer ce message ?”, captcha, …

  • Ajouter des jetons afin de valider les différentes actions

    • Supprimer un message génère une valeur aléatoire qui s’ajoute au lien http[:]//webmail[.]company[.]com/DeleteMail?id=*&token=31EZA331RF

    • De cette facon, quand le collègue recevra le lien forgé, l’application ne pourra executer l’action car le token aura déjà été utilisé. De plus, ce token peut être associé a l’utilisateur et peut permettre de tracer l’attaque.

  • Eviter de faire des applications avec des commandes facilement façonable

    • Identifier un document/une commande par une valeur calculée depuis plusieurs éléments (IP, date, …)

  • Certain reverse proxy proposent des solutions pour protéger une application

    • Les reverse proxy du marché permettent de se protéger de ce genre d’attaque. En effet, l’administrateur liste les pages qui ont besoin d’être protégées et le reverse proxy se charge d’ajouter, au choix, un paramêtre en URL, un cookie ou même un champ caché dans un formulaire de sorte que la requête ne soit pas remis au serveur si la valeur de ce token n’est pas bonne ou absente.

  • Enfin, de manière plus globale, les attaques proviennent souvent de la messagerie et des sites Internet. Un bon antivirus-/malware couplé à une solide base de réputation permet de bloquer la majorité des sites, même lorsque l’utilisateur est prêt à cliquer..

 

Bibliographie

http://fr.wikipedia.org/wiki/Cross-site_request_forgery

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

Les commentaires sont fermés.