CSRF et Clickjacking Escalade de privilèges trans-domaine

CSRF : attaques légitimes !

Cross-Site Request Forgeries : une faille intrinsèque du Web

Les acteurs

Servane, un serveur web possédant des données confidentielles.

Clélie, un utilisateur légitime authentifié ayant des droits sur les données.

Athanase, un attaquant malicieux qui  contrôle un site tiers sans rapport avec le serveur victime (par ex., son propre serveur, ou un site avec une injection XSS).

Les effets

Athanase gagne accès aux données confidentielles avec les droits de Clélie.

CSRF : Comment ?

Pré-requis…

  • Clélie est logguée sur le serveur (par ex., el garde un onglet ouvert sur une page de Servane) ;
  • Servane utilse un mécanisme d’authentification sans intervention de l’utilisateur (par. ex., des identifiants de session dans des cookies) ;
  • Clélie tombe (par hasard) sur la page malicieuse d’Athanase.

…et ensuite

  • La page de l’attaquant déclenche une requête au serveur.
<html>
...
<h1>Recipe: Panini Reblochon Nutella</h1>
<h2>Ingredients:</h2>
<ul>
<li>Two slices of bread</li>
...
<img width="0" height="0" src="http://servane.org/transfer?to=attacker&amount=10k"/>
  • Le navigateur de Clélie, en voulant télécharger l’image, déclanche un transfert d’argent authentifié.

Démo CSRF 

  1. Connectez-vous à https://aws-security.herokuapp.com/,
  2. Maintenant, supposons que vous visitiez un site au hasard (par ex., ce site !!!), contenant cet <iframe> (caché par display:none):
  1. Si vous cliquez ici, le formulaire est soumis, et le CSRF est exécuté.

Note : Si le <iframe> avait été vraiment caché, vous n’auriez rien remarqué.

Note: Il aurait été possible de tout faire sans attendre de clic de l’utilisateur !

CSRF et AJAX

Les sites construits en AJAX sont classiquement mieux protégés contre CSRF :

  • Les requêtes de type XMLHttpRequest cross-domain
    • n’envoient pas les cookies par défaut,
    • ignorent les entêtes Set-Cookie ;
  • Les API de type AJAX sont souvent conçues pour envoyer explicitement les données d’authentification avec chaque requête.

Mais AJAX n’est pas invulnérable à CSRF :

  • Les cookies cross-domain peuvent être explicitement réactivés avec l’option withCredentials ;
  • L’application doit tout de même vérifier que les actions ont pour origine l’utilisateur ;
  • Certains paradigmes, comme AJAX+JSONP, peuvent exposer à des vulnérabilités de type CSRF.

CSRF dans la vraie vie

GMail 2007 redirection de mail : des filtres de mails arbitraires ont pu être configurés via CSRF

GMail 2007 vol de contacts : (basé sur AJAX+JSONP) les attaquants ont pu voler les carnets d’adresses

Autres (d’apres Wikipedia)

  • ING Direct : transfert d’argent,
  • YouTube (2008) : contrôler un compte,

Contre-mesures CSRF

Utilisateur

  • Se délogguer ;
  • Utiliser plusieurs navigateurs.

Développeur

De la moins à la plus efficace :

  • Préférer POST à GET pour les requêtes qui déclenchent des actions ;
  • Contrôler l’entête Referer ;
  • Contrôler l’entête Origin ;
  • Faire expirer rapidement les sessions ;
  • Demander confirmation ;
  • Utiliser des captchas ;
  • Ajouter des informations reliées à la session dans les URLs ;
  • Cacher des jetons aléatoires jetables (nonces) dans les formulaires.

Note : il n’existe, et n’existera probablement jamais de protection définitive !

Clickjacking et sécurité des Mash-up

Demander confirmation peut ne pas être suffisant !

Clickjacking : amener l’utilisateur à cliquer un bouton de confirmation sans son consentement

  • Inclure le formulaire de confirmation dans un <iframe> ;
  • Utiliser CSS pour superposer le <iframe> à du contenu apparemment inoffensif ;
  • Convaincre l’utilisateur à cliquer sur le contenu inoffensif ;
  • Le clic va au <iframe> de confirmation.

Peu d’utilisations vérifiées :

Clickjacking: Exemple

On ajoute une confirmation avant le transfert : https://aws-security.herokuapp.com/?confirm

Bienvenue sur LonelyHearts.org

Il y des milliers de LonelyHearts dans notre site !

Ils n’attendent que toi !

Vite ! Crée ton compte, c’est gratuit !

Contre-mesures

  • Entête X-Frame-Options, partie du standard CSP

    X-Frame-Options: SAMEORIGIN
    
  • Directive frame-ancestors de la Content Security Policy.

    Content-Security-Policy: frame-ancestors 'self'
    
  • Empêchent aux navigateurs d’inclure la page dans des frames cross-domain ;
  • Twitter s’en sert depuis 2009…

Lectures

Google browser security guide (M. Zalewski)

CSRF

Clickjacking

Fork me on GitHub