web-dev-qa-db-fra.com

L'action de connexion et de déconnexion doit-elle avoir une protection CSRF?

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?

25
Jesvin Jose

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 .

33
SilverlightFox

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.

6

La protection CSRF à la déconnexion est un must!

Pourquoi? Supposons le scénario suivant:

  1. Vous êtes sur une page de trading et préparez un ordre d'achat pour par exemple 1000 Daimlers sur un Exchange XETRA.
  2. Jusqu'à ce que vous prépariez la commande, quelqu'un, qui sait que vous êtes connecté https://anybrokerpage.com/ , vous envoie un lien de phishing. par exemple. https://anybrokerpage.com/logout
  3. En cliquant sur le lien, vous êtes déconnecté et la commande n'est peut-être pas terminée.
  4. Après vous être reconnecté, vous reconnaissez que le prix des 1000 Daimlers est supérieur à une minute avant de vous déconnecter via ce lien de phishing.
  5. Vous devez maintenant commander un prix plus élevé.

Un jeton CSRF sur la déconnexion aurait empêché ce gâchis.

6
security-guest

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.

3
Sirens

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

2
Darragh