web-dev-qa-db-fra.com

Le bogue de Firefox permet de voler des mots de passe cryptés: comment est-ce possible?

Je crois comprendre que les mots de passe que j'enregistre dans le gestionnaire de mots de passe de Firefox sont cryptés et que la définition d'un mot de passe principal crypte la clé de cryptage utilisée dans ce processus. Le hit de Google pour "Firefox crypte-t-il les mots de passe enregistrés?" renvoie ceci article du forum de support Mozilla dans lequel la réponse choisie (publiée par un modérateur) indique:

Les mots de passe stockés dans logins.json sont cryptés, mais la clé de cryptage est stockée dans key4.db (précédemment dans key3.db) et sans mot de passe principal, il vous suffit de placer les deux fichiers dans le dossier de profil Firefox pour voir les mots de passe dans le Gestionnaire de mots de passe.

(Notez que logins.json est l'endroit où FF stocke les mots de passe.)

Cette sécurité de l'information question publiée par un utilisateur de haute réputation suppose le cryptage des mots de passe, même avant qu'un utilisateur ait défini un mot de passe principal, tout comme cela est bien reçu question .

Mais selon l'article de Sophos Naked Security, Firefox corrige le bug de contournement de la sécurité du "mot de passe principal" , Mozilla a publié un correctif de sécurité pour résoudre un problème où un attaquant peut copier les mots de passe enregistrés dans le presse-papiers sans entrer le mot de passe principal :

Il a été constaté que les mots de passe stockés localement peuvent être copiés dans le presse-papiers via l'élément de menu contextuel "Copier le mot de passe" sans entrer d'abord le mot de passe principal, ce qui permet un vol potentiel des mots de passe stockés.

Comment est-ce possible si les mots de passe sont cryptés?

Le mot de passe principal n'est-il pas nécessaire pour les déchiffrer avant l'accès? Je suis très inquiet maintenant qu'un attaquant qui accède à mon logins.json et key4.db les fichiers auraient tous mes mots de passe enregistrés!

10

Si aucun mot de passe maître n'est défini, les mots de passe de connexion sont toujours disponibles. Si un mot de passe principal est défini, l'ouverture de la boîte de dialogue Connexions enregistrées vous demandera le mot de passe principal. Sans le mot de passe maître correct, la liste des connexions sera vide et il n'y a donc pas de mot de passe à copier.

Le bogue se produit uniquement dans cette condition spécifique:

  • Un mot de passe principal est défini.
  • Vous avez déverrouillé vos identifiants en entrant le mot de passe maître une fois cette session de navigation.

Pour être clair: si vous avez un mot de passe principal défini et que vous n'avez pas déverrouillé vos connexions cette session, vos mots de passe seront toujours protégés et pas disponible via ce bug.

Les mots de passe sont stockés cryptés sur le disque, protégés par une clé dérivée du mot de passe principal. Si vous démarrez Firefox pour la première fois, il ne vous demandera généralement qu'une seule fois votre mot de passe principal lorsqu'il rencontrera un formulaire de connexion ou lorsque vous ouvrirez la section Connexions enregistrées. Si vous rejetez cette demande, les connexions ne seront pas disponibles. Si vous saisissez cependant le mot de passe, les mots de passe déchiffrés seront disponibles jusqu'à ce que vous quittiez Firefox.

Normalement, lorsque vous utilisez le bouton Afficher les mots de passe, ou si vous cliquez avec le bouton droit sur une connexion et choisissez Copier le mot de passe, il vous demandera à nouveau le mot de passe . En raison du bogue, l'invite de confirmation du mot de passe était affichée, mais le mot de passe était déjà copié en arrière-plan.

Screenshot of Saved Logins

L'impact est très faible à mon avis. Une personne disposant d'un accès physique à votre session déverrouillée peut déjà obtenir le mot de passe par d'autres moyens:

  1. Visitez le site Web, par exemple, https://stackoverflow.com/users/login
  2. Observez que la connexion est complétée.
  3. Ouvrez Developer Tools (F12), accédez à la console.
  4. Exécutez: document.querySelector("input[type=password]").value
  5. Observez le mot de passe.

Vous pouvez également accéder à l'onglet Réseau dans Developer Tools. Appuyez sur Connexion et observez le mot de passe enregistré. Il existe de nombreuses méthodes pour obtenir les connexions s'il est déjà rempli.

Quant au commit qui fait référence au bogue, le défaut de code était qu'un appel asynchrone (masterPasswordLogin()) n'était pas attendu. C'est pourquoi le code pour copier le mot de passe est déjà exécuté avant la confirmation de l'invite de connexion. Le correctif consiste à attendre la fin de l'invite.

L'avis de sécurité original de Mozilla indiquait seulement que les mots de passe peuvent être copiés sans entrer le mot de passe principal. Depuis lors, cet avis de sécurité a été mis à jour avec la clarification ci-dessus, et se lit maintenant:

Lorsqu'un mot de passe principal est défini, il doit être saisi à nouveau avant que les mots de passe enregistrés ne soient accessibles dans la boîte de dialogue "Connexions enregistrées". Il a été constaté que les mots de passe stockés localement peuvent être copiés dans le presse-papiers via l'élément de menu contextuel `` copier le mot de passe '' sans ressaisir le mot de passe principal si le mot de passe principal a été précédemment entré dans la même session, ce qui permet le vol potentiel de mots de passe stockés.

16
Lekensteyn