Web Security Academy

Cross-site request forgery - Lab : CSRF where Referer validation depends on header being present

Objectif :

  • Réussir à changer l'adresse email d'une personne inscrite dans le site.

Solution :

On lance le lab et on se trouve sur un blog :

On se connecte avec l'identifiant et le mot de passe d'un compte fourni dans l'énoncé ( wiener / peter ) et l'onglet "Change email" apparaît :

On accède à cette section :

On essaye maintenant de changer l'adresse mail par "bob@hotmail.fr" et d'observer la requête émise lorsqu'on clique sur "Update email" :

C'est une simple requête POST qui est construite avec un paramètre nommé "email" ayant comme valeur "Jean@hotmail.fr". Un en-tête Referrer est présent. Pour réussir notre CSRF, on va devoir contourner cette mesure mise en place.

Une solution consiste à inclure une balise <meta name="referrer" content="never"> dans le code HTML qui sera exécuté par le client. Cette balise va forcer le navigateur à enlever l'en-tête Referrer des requêtes envoyées.

Dans le lab, une simulation d'envoi et d'exécution d'un payload sur une victime est implémentée. Il suffit de cliquer sur "Go to exploit serveur" et de simuler l'envoi d'une requête réponse vers une cible à partir duquel notre payload sera exécuté.

On accède à cette fonctionnalité et on simule l'exécution du code HTML suivant chez une victime :

On teste le payload sur nous-même et on observe que l'attaque s'effectue correctement. Le lab est désormais validé.