Je crée une application Web en Django qui génère et inclut des jetons CSRF pour les sessions (a Django peut être anonyme ou un utilisateur enregistré). Dois-je conserver Protection CSRF pour les contrôleurs gérant les actions de connexion et de déconnexion?
Vous devriez peut-être vous protéger contre Login CSRF . Sans cette protection, un attaquant peut inverser efficacement une attaque CSRF. Plutôt que la victime étant connectée à son propre compte et que l'attaquant tente de monter la session en effectuant des demandes sur le site à l'aide des cookies de la victime, ils se connecteront au site sous les informations d'identification de l'attaquant, ce qui permettra à l'attaquant de détourner efficacement les demandes vers le domaine que la victime pensait être anonyme ou sous son propre compte, puis l'envoyer sur le compte de l'attaquant. Bien sûr, que cela soit pertinent pour votre site particulier ou non dépend de la nature de votre site et si quelque chose comme ça est avantageux pour un attaquant. Un exemple est une attaque CSRF de connexion sur un moteur de recherche afin que l'attaquant puisse voir les termes recherchés car ils sont connectés sous le compte de l'attaquant au lieu de ceux de la victime.
Les principales cibles de ce type d'attaque sont celles où les actions authentifiées peuvent avoir lieu en dehors de l'application principale elle-même. par exemple. à partir d'un plugin de navigateur ou d'un widget intégré sur un autre site. En effet, ces actions seront authentifiées par l'utilisation de cookies, et si un attaquant vous a connecté en tant que lui, chaque action sera enregistrée dans son compte.
Vous devez également protéger votre mécanisme de déconnexion contre CSRF. Au début, il semble que tout ce qu'un attaquant peut faire est de déconnecter l'utilisateur, ce qui serait au pire agaçant. Cependant, si vous combinez cela avec une attaque de phishing, l'attaquant peut être en mesure d'inciter la victime à se reconnecter en utilisant son propre formulaire, puis à capturer les informations d'identification. Voir ici pour un exemple récent - LostPass .
S'identifier? Oui. Se déconnecter? Non.
Pourquoi se connecter? Il y a cette drôle d'attaque de connexion CSRF, où l'attaquant connecte la victime sous un compte contrôlé par l'attaquant, puis peut "prendre le contrôle du contenu créé par la victime tout en étant connecté sous ce compte". L'impact est assez boiteux OMI, mais ils ont commencé à voir cela comme un problème maintenant que plus de vecteurs d'attaque juteux ont disparu. ;-)
Pourquoi ne pas vous déconnecter? Il n'y a aucun impact sur la sécurité. Le mieux que l'on puisse faire est de déconnecter quelqu'un du système, ce qui provoque tout au plus un désagrément.
EDIT : Il n'y a aucun impact sur la sécurité dans l'attaque CSRF de déconnexion en soi. Il peut y avoir des cas où cela peut être utilisé dans une attaque en plusieurs étapes pour déconnecter d'abord quelqu'un, puis l'inviter à se connecter sur une page usurpée.
La protection CSRF à la déconnexion est un must!
Pourquoi? Supposons le scénario suivant:
Un jeton CSRF sur la déconnexion aurait empêché ce gâchis.
La déconnexion et la connexion CSRF sont en fait très exploitables.
Si vous trouvez un moyen d'obtenir un XSS privé/auto permanent (tel qu'un champ privé non sécurisé comme dans les préférences de l'utilisateur), vous pouvez forcer la déconnexion de la victime, connectez-vous avec votre compte sur lequel l'auto XSS est appliqué, puis exécutez du code pour faire une attaque de phishing sauf qu'il s'agit du domaine correct avec un certificat SSL valide. Si l'utilisateur se connecte (ou a un remplissage automatique qui vous permettrait de voler ses informations d'identification avant même d'appuyer sur Soumettre, puis se connecter automatiquement pour lui afin qu'il puisse simplement voir sa page clignoter en blanc et qu'il sera là où il s'attend) vous maintenant avoir leur mot de passe et une même exécution Origin. Maintenant, exécutez simplement la persistance des exploits dans leurs paramètres privés et vous avez maintenant une exécution JS distante permanente sur le compte des utilisateurs.
Cela permet des attaques très importantes, d'autant plus que de nombreux développeurs ne font pas les deux avec des exploits d'injection HTML sur des champs privés car seul l'utilisateur devrait pouvoir le voir et ils n'ont aucune raison d'exécuter du code contre eux-mêmes. Un exploit CSRF de déconnexion vous permet d'effectuer le même phishing d'origine et s'ils ont les mêmes iframes d'origine activés, vous pouvez également incorporer la page de connexion en plein écran, puis exécuter le code que vous voulez dans l'iframe apparemment légitime.
N'importe lequel des bogues à lui seul va au mieux d'inutile à ennuyeux, mais si vous avez ces deux (et il est préférable de toujours le supposer), un attaquant peut détourner un compte d'utilisateur avec une seule annonce méchante.
CSRF pour la connexion généralement oui, mais cela dépend de votre application. un attaquant peut vous connecter à un compte malveillant, par exemple dans Google, puis surveiller toutes vos visites sur le site.
CSRF pour la déconnexion - oui peut absolument empêcher DOS