Projet

Général

Profil

Bug #20127

Mot de passe aléatoire créé quand l'usager clique sur "mot de passe perdu ?"

Ajouté par Frédéric Péters il y a plus de 6 ans. Mis à jour il y a plus de 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
16 novembre 2017
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

"réinitialise aléatoirement le mot de passe de l'utilisateur sur une demande de réinitialisation de mot de passe" c'est l'intitulé de #18643 mais personne n'a eu le temps de voir et réagir sur le moment.

Depuis, un usager qui sur la page de connexion clique sur "mot de passe perdu", voit son mot de passe changé dès cet instant; per d donc la possibilité de se logguer avec son ancien mot de passe si jamais celui-ci lui revenait. Ce n'est pas le comportement usuel des sites.

Aussi, ça permet bien sûr à un tiers d'être carrément chiant.


Fichiers


Demandes liées

Lié à Hobo - Development #20277: Poser A2_SET_RANDOM_PASSWORD_ON_RESET à FalseFermé25 novembre 2017

Actions

Révisions associées

Révision b7e525cb (diff)
Ajouté par Benjamin Dauvergne il y a plus de 6 ans

profile_forms: add setting for random reset of password on reset password requests (fixes #20127)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 6 ans

Aussi, ça permet bien sûr à un tiers d'être carrément chiant.

Extra fun sur les comptes utilisés pour accéder aux API.

#2

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Les comptes d'accès aux APIs ne devraient pas avoir d'email, ensuite c'est un comportement habituel pour permettre immédiatement de retirer l'accès à un compte en cas de vol de mot de passe que de rendre celui-ci inutilisable dés la demande de ré-initialisation. Coté bancaire c'est systématique, peut-être que Google et Facebook ne le font pas je n'en sais rien.

https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet

Step 2) Verify Security Questions

After the form on Step 1 is submitted, the application verifies that each piece of data is correct for the given username. If anything is incorrect, or if the username is not recognized, the second page displays a generic error message such as “Sorry, invalid data”. If all submitted data is correct, Step 2 should display at least two of the user’s pre-established personal security questions, along with input fields for the answers. It’s important that the answer fields are part of a single HTML form.

Do not provide a drop-down list for the user to select the questions he wants to answer. Avoid sending the username as a parameter (hidden or otherwise) when the form on this page is submitted. The username should be stored in the server-side session where it can be retrieved as needed.

Because users' security questions / answers generally contains much less entropy than a well-chosen password (how many likely answers are there to the typical "What's your favorite sports team?" or "In what city where you born?" security questions anyway?), make sure you limit the number of guesses attempted and if some threshold is exceeded for that user (say 3 to 5), lock out the user's account for some reasonable duration (say at least 5 minutes) and then challenge the user with some form of challenge token per standard multi-factor workflow; see #3, below) to mitigate attempts by hackers to guess the questions and reset the user's password. (It is not unreasonable to think that a user's email account may have already been compromised, so tokens that do not involve email, such as SMS or a mobile soft-token, are best.)

Step 3) Send a Token Over a Side-Channel

After step 2, lock out the user's account immediately. Then SMS or utilize some other multi-factor token challenge with a randomly-generated code having 8 or more characters. This introduces an “out-of-band” communication channel and adds defense-in-depth as it is another barrier for a hacker to overcome. If the bad guy has somehow managed to successfully get past steps 1 and 2, he is unlikely to have compromised the side-channel. It is also a good idea to have the random code which your system generates to only have a limited validity period, say no more than 20 minutes or so. That way if the user doesn't get around to checking their email and their email account is later compromised, the random token used to reset the password would no longer be valid if the user never reset their password and the "reset password" token was discovered by an attacker. Of course, by all means, once a user's password has been reset, the randomly-generated token should no longer be valid.

Je reconnais qu'on a pas l'étape 2.

#3

Mis à jour par Frédéric Péters il y a plus de 6 ans

... peut-être que Google et Facebook ne le font pas je n'en sais rien.

Et bien sûr je ne vais vérifier ni l'un ni l'autre; et je n'ai pas d'authentification par mot de passe auprès de ma banque, mais j'ai testé quelques sites communs sur lesquels j'ai des comptes et aucun ne fait ça. Le seul s'approchant, c'est amazon qui est tout différent et après ce formulaire "mot de passe perdu" demande à l'usager de choisir entre créer un nouveau mot de passe et se connecter avec un code temporaire.

Je maintiens que le comportement d'authentic est devenu inhabituel et si pas dangereux, relativement perturbant quand même.

#4

Mis à jour par Thomas Noël il y a plus de 6 ans

Frédéric Péters a écrit :

Je maintiens que le comportement d'authentic est devenu inhabituel et si pas dangereux, relativement perturbant quand même.

Même avis : ça permet à n'importe qui de coincer n'importe quel compte, ça me parait bien étrange. Un peu comme le site de notre banque qui bloque le compte après 3 tentatives ratées : n'importe qui peut venir nous faire chier s'il connait notre login d'accès (et pour le coup, ça ferai chier 24 à 48h).

#6

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Paul Marillonnet a écrit :

[...] tokens that do not involve email, such as SMS or a mobile soft-token, are best.

Ce serait faisable dans authentic ?

Tout est possible, mais je ne vois pas pourquoi tu mets une note privée :)

Comme je ne suis pas pour je vous propose de faire un patch (c'est une ligne dans registration pour mettre reset_password=False sur l'appel d'envoi du mail).

#8

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Vous me parlez d'un risque potentiel de vandalisme, ce que dit OWASP c'est que la fonction de ré-init de mot de passe ne sert pas seulement quand on l'a perdu mais quand on pense qu'on nous a piqué notre compte, et c'est pour cela qu'on réinitialise à ce moment, pour couper l'accès au compte (Django dans ce cas va bien invalider toutes les session déjà ouverte, parce qu'il stocke le hash du hash du mot de passe en cours dans la session et le compare à chaque accès, dans le contexte d'un IdP il faudrait en plus faire un SLO à ce moment, on a pas pour l'instant mais comme le SLO sur re-connexion en tant qu'un autre utilisateur dans l'admin c'est à faire bientôt).

Pour l'instant ce risque potentiel ne me semble pas qualifié, on a pas identifié un seul cas de vandalisme et on log les IPs des gens qui font des resets si ça arrivait, comme je suis un garçon conciliant je propose un setting qu'on pourra mettre à True coté hobo (un jour faudra que je vois comment débrancher authentic2-multitenant d'hobo en général, parce que dans la fait là on a pas de différence entre un déploiement seul et un déploiement publik d'authentic2-multitenant).

#9

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Et effectivement OWASP prévoit le problème puisqu'ils demandent d'ajouter des questions de sécurité avant d'accepter la demande de reset, faut juste ne pas rendre le type de question dépendante de la personne sinon on gagne un oracle pour savoir si un email est dans la base.

#10

Mis à jour par Frédéric Péters il y a plus de 6 ans

Ok pour le patch.

#11

Mis à jour par Frédéric Péters il y a plus de 6 ans

#12

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Statut changé de Nouveau à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#13

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF