Cross-site request forgery
En sécurité des systÚmes d'information, le cross-site request forgery, abrégé CSRF (parfois prononcé sea-surf en anglais) ou XSRF, est un type de vulnérabilité des services d'authentification web.
Lâobjet de cette attaque est de transmettre Ă un utilisateur authentifiĂ© une requĂȘte HTTP falsifiĂ©e qui pointe sur une action interne au site, afin qu'il l'exĂ©cute sans en avoir conscience et en utilisant ses propres droits. Lâutilisateur devient donc complice dâune attaque sans mĂȘme s'en rendre compte. L'attaque Ă©tant actionnĂ©e par l'utilisateur, un grand nombre de systĂšmes d'authentification sont contournĂ©s.
Illustration
Supposons qu'Alice soit l'administratrice d'un forum et qu'elle soit connectĂ©e Ă celui-ci par un systĂšme de sessions. Malorie 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 d'Alice grĂące Ă une attaque de type CSRF.
- Malorie arrive Ă connaitre le lien qui permet de supprimer le message en question.
- Malorie envoie un message à Alice contenant une pseudo-image à afficher (qui est en fait un script). L'URL de l'image est le lien vers le script permettant de supprimer le message désiré.
- Alice doit avoir une session ouverte dans son navigateur pour le site visĂ© par Malorie. C'est une condition requise pour que l'attaque rĂ©ussisse de façon silencieuse sans requĂ©rir une demande d'authentification qui alerterait Alice. Cette session doit disposer des droits requis pour exĂ©cuter la requĂȘte destructrice de Malorie. Il n'est pas nĂ©cessaire qu'un onglet du navigateur soit ouvert sur le site cible ni mĂȘme que le navigateur soit dĂ©marrĂ©. Il suffit que la session soit active.
- Alice lit le message de Malorie, son navigateur utilise la session ouverte d'Alice et ne demande pas d'authentification interactive. Il 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 texte comme contenu pour l'image. Ne reconnaissant pas le type d'image associé, il n'affiche pas d'image et Alice ne sait pas que Malorie vient de lui faire supprimer un message contre son gré.
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.
Il est important de souligner que ces attaques peuvent aussi ĂȘtre menĂ©es sur des intranets pour permettre Ă un attaquant de rĂ©cupĂ©rer des informations sur ledit intranet.
Prévention
- Demander des confirmations Ă l'utilisateur pour les actions critiques, au risque d'alourdir l'enchaĂźnement des formulaires.
- Demander une confirmation de l'ancien mot de passe Ă l'utilisateur pour changer celui-ci ou changer l'adresse mail du compte.
- Utiliser des jetons de validité (ou Token) dans les formulaires. Ce systÚme d'autorisation est basé sur la création d'un token via le chiffrement d'un identifiant utilisateur, un nonce et un horodatage. Le serveur doit vérifier la correspondance du jeton envoyé en recalculant cette valeur et en la comparant avec celle reçue[1].
- Ă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 trĂšs simplement de lancer des requĂȘtes HTTP POST.
- Effectuer une vĂ©rification du rĂ©fĂ©rent dans les pages sensibles : connaĂźtre la provenance du client permet de sĂ©curiser ce genre d'attaques. Ceci consiste Ă bloquer la requĂȘte du client si la valeur de son rĂ©fĂ©rent est diffĂ©rente de la page d'oĂč il doit thĂ©oriquement provenir.
Notes et références
- (en) « CSRF Prevention Cheat Sheet », sur https://github.com, (consulté le )