Cross-Site Request Forgeries

Un article de Wikipédia, l'encyclopédie libre.

Les attaques de type Cross-Site Request Forgeries (abrégées CSRF ou XSRF) utilisent l'utilisateur comme déclencheur, celui-ci devient complice sans en être conscient. L'attaque étant actionnée par l'utilisateur, un grand nombre de systèmes d'authentifications sont contournés. Le nombre de sites se protégeant contre ce type d'attaque est encore marginal, faute de communication sur ce type d'attaque probablement.[réf. souhaitée]

Sommaire

[modifier] Illustration

Supposons que Bob est l'administrateur d'un forum et qu'il soit connecté à celui-ci par un système de sessions. Alice est un membre de ce même forum, elle veut supprimer un des messages du forum. Comme elle n'a pas les droits nécessaires avec son compte, elle utilise celui de Bob grâce à une attaque de type CSRF.

  • Alice arrive à connaître le lien qui permet de supprimer le message en question
  • Alice envoie un message à Bob contenant une image à afficher. L'URL de l'image est le lien permettant de supprimer le message désiré.
  • Bob lit le message d'Alice, son navigateur tente de récupérer le contenu de l'image. En faisant cela, le navigateur actionne le lien et supprime le message, il récupère une page web comme contenu pour l'image. Ne reconnaissant pas le type d'image associé, il n'affiche pas d'image et Bob ne sait pas qu'Alice vient de lui faire supprimer un message contre son gré.

[modifier] Caractéristiques

Les caractéristiques du CSRF sont un type d'attaque qui :

  • Implique un site qui repose sur l'authentification globale d'un utilisateur
  • Exploite cette confiance dans l'authentification pour autoriser des actions implicitement
  • Envoie des requêtes HTTP à l'insu de l'utilisateur qui est dupé pour déclencher ces actions

Pour résumer, les sites sensibles au CSRF sont ceux qui acceptent les actions sur le simple fait de l'authentification à un instant donné de l'utilisateur et non sur une autorisation explicite de l'utilisateur pour une action donnée.

[modifier] Prévention

Éviter d'utiliser des requêtes HTTP GET pour effectuer des actions 
Cette technique va naturellement éliminer des attaques simples basées sur les images, mais laissera passer les attaques fondées sur Javascript, lesquelles sont capables de lancer des requêtes HTTP POST.
Demander des confirmations à l'utilisateur pour les actions critiques 
Au risque d'alourdir l'enchaînement des formulaires.
Vérifier l'adresse url du script appelant (referrer) 
Au risque d'alourdir le développement des formulaires.
Utiliser des tokens de validité dans les formulaires 
Faire en sorte qu'un formulaire posté ne soit accepté que s'il a été produit quelques minutes auparavant : le token de validité en sera la preuve. Le token de validité doit être transmis en paramètre et vérifié côté serveur.

[modifier] Voir aussi

[modifier] Lien externe