[CSRF] – Lutter efficacement contre ce genre d’attaque !

Le-Vieux-Sage

 

 

Coucou bande de vilains pirates !!!

 

J'étais l'autre jour à auditer la plateforme de quelques amis  ^^
Et je suis tombé sur 2 jolis petites failles, qui permettaient à distance de :

  • Déconnecter un utilisateur
  • Supprimer ses messages

 

Ces 2 failles font partie de la famille des CSRF  "Cross Site Request Forgery"

 

Késako ?

 

Et bien ce sont des vulnérabilités liées au "non contrôle" de l'action humaine

 

Par exemple, et dans ce cas présent, si vous avez un lien de suppression d'un contenu, de déconnexion, ....

 

Si ce lien ne contrôle pas d’interaction humaine, n'importe qui peut sur son site, glisser une petite iframe, un script, ou une image ... appelant ces fameux liens provenant d'un site vulnérable  ...

 

L'internaute qui se baladera ainsi sur le site malveillant  ...
Ouvrira alors à son insu, de manière transparente ces fameux liens ...

 

Ce qui n'aura d'autre effet que :

 

De supprimer ses données, ou de le déconnecter du site vulnérable ....

 

Comment s'en protéger ?

 

Les navigateurs modernes nous protègent de diverses manières, par exemple en interdisant à un site X d'accéder ou de créer des cookies sur un site Y ... ou bien en interdisant l’exécution de javascript depuis une URL (XSS)

 

Aussi, nous pouvons bénéficier de ces sécurités, tout en exploitant les cookies pour  contrôler que l'action est humaine.
Par exemple ... en remplaçant ce genre de lien :

<a href="http://site.com/logout">Deconnexion</a>

 

 

Par ...  ce genre de lien :

<a href=# onclick="Logout()">Deconnexion</a>

 

Un lien qui lorsqu'il sera cliqué par l'utilisateur, appellera une fonction javascript.
Cette fonction se chargera de créer pour l'utilisateur un cookie spécial avant de le rediriger vers le fameux lien de déconnexion.

 

var Logout = function(){
      document.cookie='jesuisunHumain=123';
      document.location='http://site.com/logout';
}

 

La fameuse page de déconnexion ... contrôlera alors si le cookie existe avant d’exécuter l'action, et de supprimer ce fameux cookie.

 

<?php 
session_start(); 
//Si l'utilisateur veut se deconnecter
 if (isset($_GET['logout'])){ 
  //Si l'utilisateur a bien cliqué sur le lien 
  if (isset($_COOKIE['JesuisunHumain']) && $_COOKIE['JesuisunHumain'] == 123){ 
   //Alors je le deconnecte session_destroy(); 
   } 
 } 
?>

 

 

 

Avec ce genre de méthodologie, vous devriez être plutôt tranquille ... sauf si votre internaute, utilisateur un vieux navigateur très permissif ....

 

POC : https://dyrk.org/divers/demo/csrf.php

Partagez ce contenu

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *