BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 1
OWASP Top 10OWASP Top 10
N°8 Falsification de requête intersite (CSRF)N°8 Falsification de requête intersite (CSRF)
Kevin BOULALA – Maxime MARTINKevin BOULALA – Maxime MARTIN
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 2
• • CSRF ?CSRF ?
• • Exemple simpleExemple simple
• • Les vulnérabilités de cette attaqueLes vulnérabilités de cette attaque
• • Comment éviter ces attaquesComment éviter ces attaques
• • DémonstrationDémonstration
PLANPLAN
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 3
CSRF ?CSRF ?
Faire une action à un autre utilisateur sans qu'il le veuille Faire une action à un autre utilisateur sans qu'il le veuille et qu'il le sacheet qu'il le sache
http://www.sitexe.com/?supprmsg=30http://www.sitexe.com/?supprmsg=30 ( (GETGET))Attaque possible aussi avec la méthode Attaque possible aussi avec la méthode POSTPOST
Exemple avec un forum :Exemple avec un forum :> Faire supprimer un message> Faire supprimer un message> S'abonner à un fil de discussion> S'abonner à un fil de discussion
Exemple avec un site d'achat :Exemple avec un site d'achat :> Faire acheter quelque chose> Faire acheter quelque chose
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 4
CSRF ?CSRF ?
Cette attaque fonctionne grâce aux Cette attaque fonctionne grâce aux navigateursnavigateurset que l'utilisateur victime est et que l'utilisateur victime est authentifiéauthentifié sur le site sur le site
Ne nécessite que peu de compétences pointuesNe nécessite que peu de compétences pointues
De même, facilement découverte avec un De même, facilement découverte avec un minimum de connaissancesminimum de connaissances
Du point de vue du site attaqué, Du point de vue du site attaqué, la victime est la victime est le fautifle fautif
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 5
ExempleExemple
Sur un forum Sur un forum S S ::
AA souhaite supprimer un message. souhaite supprimer un message.AA trouve l'URL type pour supprimer un message. trouve l'URL type pour supprimer un message.
AA prépare un mail à envoyer à prépare un mail à envoyer à VV avec une balise image avec une balise image contenant l'adresse censée supprimer le message sur contenant l'adresse censée supprimer le message sur SS..
L'attaquant La victime Le site victimeA V S
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 6
ExempleExemple
L'attaquant La victime Le site victimeA V S
Salut ! Tu connais cette blague ?Salut ! Tu connais cette blague ?C'est un mec il rentre dans un bar et C'est un mec il rentre dans un bar et
il crie "COUCOU C'EST MOI !!" il crie "COUCOU C'EST MOI !!" et enfaite c'était pas lui...et enfaite c'était pas lui... X
Mail :Mail :Logo d'image non chargéLogo d'image non chargé
Mais c'est ce qui permet Mais c'est ce qui permet de charger la requête de charger la requête censée supprimer le censée supprimer le message sur message sur SS..
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 7
ExempleExemple
L'attaquant La victime Le site victimeA V S
Le navigateur de Le navigateur de VV interprète l'image. interprète l'image.
Ce qui exécute la requête et supprime le message.Ce qui exécute la requête et supprime le message.
VV ne s'en rend pas compte. ne s'en rend pas compte.
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 8
Beaucoup (si ce n'est toutes) les fonctionnalités Beaucoup (si ce n'est toutes) les fonctionnalités d'un site sont vulnérablesd'un site sont vulnérables
Tout dépend de l'activité du site :Tout dépend de l'activité du site :Transaction boursièreTransaction boursière
Vente en ligneVente en ligneForum de discussionForum de discussion
......
VulnérabilitésVulnérabilités
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 9
Pour réaliser une attaque
Utilisation classique des outils du WEBUtilisation classique des outils du WEB
HTMLHTML et et JavaScriptJavaScript
Le plus populaire : la Le plus populaire : la balise imgbalise img en HTML en HTML (technique utilisé dans l'exemple précédent)(technique utilisé dans l'exemple précédent)
VulnérabilitésVulnérabilités
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 10
Reprise de l'exemple :
L'image qui ne se chargeait pas :L'image qui ne se chargeait pas :<img src='<img src='http://www.sitexe.com/?supprmsg=30http://www.sitexe.com/?supprmsg=30' /' />>
Version JavaScript :Version JavaScript :<script><script>
var foo = new image();var foo = new image();foo.src="http://www.sitexe.com/?supprmsg=30";foo.src="http://www.sitexe.com/?supprmsg=30";
</script></script>
Note : selon le navigateur, il ne s'affichera rien ou Note : selon le navigateur, il ne s'affichera rien ou bien au pire des cas le logo vu plutôt.bien au pire des cas le logo vu plutôt.
VulnérabilitésVulnérabilités
X
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 11
La méthode de l'image est réutilisable avec d'autres balises :
<<scriptscript src...>, < src...>, <iframeiframe src...>, etc src...>, etc
Il est aussi possible de faire cette attaque avec la Il est aussi possible de faire cette attaque avec la méthode méthode POSTPOST..
La difficulté n'est pas plus grande, il est juste plus La difficulté n'est pas plus grande, il est juste plus délicat de le mettre en place.délicat de le mettre en place.
VulnérabilitésVulnérabilités
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 12
Avec un peu de Avec un peu de JavaScriptJavaScript et de et de HTML HTML ::
<body <body onload="document.getElementById('f').submit()"onload="document.getElementById('f').submit()">><form id="f" action="<form id="f" action="http://sitexe.com/poster.phphttp://sitexe.com/poster.php" " method="post" name="form">method="post" name="form">
<input name="titre" <input name="titre" value="Blague pourrie"value="Blague pourrie">><textarea name="message"><textarea name="message">C'est un gars qui rentre C'est un gars qui rentre dans un café et plouf !dans un café et plouf !</textarea></textarea><input name="update" value="update"><input name="update" value="update">
</form></body></form></body>
Il est nécessaire de lire le code du site victime pour faire Il est nécessaire de lire le code du site victime pour faire cette attaque.cette attaque.
VulnérabilitésVulnérabilités
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 13
Ce qui ne fonctionne pas :Ce qui ne fonctionne pas :
> Les requêtes POST (dernière partie : Vulnérabilités)> Les requêtes POST (dernière partie : Vulnérabilités)
> Les opérations en plusieurs étapes :> Les opérations en plusieurs étapes :Du moment que l'attaquant peut prévoir les différentes Du moment que l'attaquant peut prévoir les différentes
étapes...étapes...
PréventionPrévention
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 14
Ce qui fonctionne :Ce qui fonctionne :
> Jetons (ou token) aléatoires ou> Jetons (ou token) aléatoires ou jetons de validités jetons de validités : :
Les jetons sont générés aléatoirement dans le temps.Les jetons sont générés aléatoirement dans le temps.
Le jeton doit être transmis avec la requête.Le jeton doit être transmis avec la requête.
Le serveur pourra vérifier que le formulaire a bien été Le serveur pourra vérifier que le formulaire a bien été
produit quelques minutes auparavant.produit quelques minutes auparavant.
PréventionPrévention
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 15
Ce qui fonctionne :Ce qui fonctionne :
> Vérification du > Vérification du Referer HeaderReferer Header : :
Referer Header correspond à une information transmise à un Referer Header correspond à une information transmise à un serveur HTTP, indiquant où se trouve le lien qui nous a permis serveur HTTP, indiquant où se trouve le lien qui nous a permis
de le rejoindre.de le rejoindre.
Avec une attaque CSRF, cette information est impossible à Avec une attaque CSRF, cette information est impossible à récupérer.récupérer.
Quelques soucis : les navigateurs peuvent désactiver l'envoi.Quelques soucis : les navigateurs peuvent désactiver l'envoi.Si on vient d'un domaine HTTPS aucun referer n'est envoyé.Si on vient d'un domaine HTTPS aucun referer n'est envoyé.
PréventionPrévention
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 16
Ce qui fonctionne :Ce qui fonctionne :
Quelques solutions en vrac :Quelques solutions en vrac :
CAPTCHA CAPTCHA
RéauthentificationRéauthentification
Désactiver les scripts dans le Désactiver les scripts dans le navigateur (& utiliser POST sur le site)navigateur (& utiliser POST sur le site)
etcetc
PréventionPrévention
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 17
DémonstrationDémonstration
Voici la démonstration de l'attaque effectuéeVoici la démonstration de l'attaque effectuée
en classe en classe
Nous verrons le cas d'un site non sécurisé et sécuriséNous verrons le cas d'un site non sécurisé et sécurisé
en parallèleen parallèle
Cette attaque a été réalisé avec le navigateur MidoriCette attaque a été réalisé avec le navigateur Midori
Les navigateurs tel que Chrome empêche ce genre d'attaqueLes navigateurs tel que Chrome empêche ce genre d'attaque
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 18
DémonstrationDémonstration
Connexion de l'utilisateur sur le site qui va être attaquéConnexion de l'utilisateur sur le site qui va être attaqué
Site sécuriséSite sécuriséSite non sécuriséSite non sécurisé
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 19
DémonstrationDémonstration
L'utilisateur est connecté et peut voir ses messagesL'utilisateur est connecté et peut voir ses messages
Site sécuriséSite sécuriséSite non sécuriséSite non sécurisé
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 20
DémonstrationDémonstration
La victime reçoit un mail qui l'invite à aller sur un siteLa victime reçoit un mail qui l'invite à aller sur un site
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 21
DémonstrationDémonstration
Il arrive sur ce site, qui contient des requêtes forgéesIl arrive sur ce site, qui contient des requêtes forgées
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 22
DémonstrationDémonstration
Extrait du code source de la pageExtrait du code source de la page
Requête forgée pour Requête forgée pour attaquer le site pas attaquer le site pas sécurisésécurisé
Et celleci pour le Et celleci pour le site sécurisésite sécurisé
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF) 23
DémonstrationDémonstration
Autant de fois la page est rafraîchie, autant de fois Autant de fois la page est rafraîchie, autant de fois les requêtes forgées seront exécutéesles requêtes forgées seront exécutées
Site sécuriséSite sécuriséSite non sécuriséSite non sécurisé
BOULALA MARTIN 2013 Cross Site Request Forgery (CSRF)
Return EXIT_SUCCESS ?Return EXIT_SUCCESS ?
42