Skip to content

Firefox et le stockage des identifiants web

Un petit article afin de vous parler d’un outil qui m’a récemment permis d’effectuer une avancée décisive lors d’un audit interne. Il s’agit de firefox_decrypt.

Vous le savez certainement, mais Firefox et bien d’autres navigateurs proposent une fonctionnalité qui permet de sauvegarder les identifiants (nom utilisateur et mot de passe) des sites sur lesquels l’utilisateur s’authentifie au fil de sa navigation :

Fonctionnalité "Password manager" de Firefox
Fonctionnalité « Password manager » de Firefox

Lorsqu’un utilisateur clique sur « Enregistrer« , ses identifiants sont enregistrés sur le système par Firefox. Dés lors, la prochaine fois que l’utilisateur se rendra sur la page d’authentification du même site, ses identifiants seront directement saisis dans les champs correspondants et n’aura qu’à cliquer sur « Connexion« .

Bien entendu, le stockage des ces identifiants est effectué de façon chiffré sur le système par Firefox. Ceux-ci sont stockés dans le fichier « login.json » et la clé permettant de déchiffrer les mots de passe est positionnée dans le fichier « key3.db » :

Chemin et présence des fichiers "logins.json" et "key.db" dans un profil utilisateur Firefox.
Chemin et présence des fichiers « logins.json » et « key3.db » dans un profil utilisateur Firefox.

Voici le contenu du fichier « login.json » lorsqu’un Master Password n’est pas paramétré :

Contenu du fichier "logins.json".
Contenu du fichier « logins.json ».

Il est à noter que Firefox propose la mise en place d’un Master Password, c’est à dire d’un mot de passe permettant d’ouvrir le « coffre-fort » de Firefox, mais surtout un mot de passe permettant de chiffrer le coffre-fort avec une clé non stockée sur le disque (cette clé étant le mot de passe).

Sans le paramétrage d’un Master Password, seule la clé générée par Firefox est utilisée, le problème principal étant que cette clé est stockée dans le même répertoire que le coffre-fort qu’elle déchiffre, et possède les mêmes droits d’accès. Si l’on peut accéder au coffre fort, on peut accéder à la clé qui permet de le déchiffrer. C’est précisément ce que fait firefox-decrypt. Ce problème est déjà connu de Firefox, qui en parle sur son site officiel et met d’ailleurs en avant l’utilisation du Master Password.
Dans les faits, le Master Password sert deux fonctions de sécurité :

  • éviter qu’une personne ayant un accés physique à votre poste puisse se logguer sur vos sites préférés en utilisant la saisie automatique Firefox ;
  • éviter que la base contenant les mots de passe ne soit déchiffrée facilement si compromise.

Dans le cas de l’infection d’un poste utilisateur, cet outil peut être utilisé pour retrouver les mots de passe enregistrés dans le navigateur de l’utilisateur en question. Cette information peut bien entendu être très intéressante pour un attaquant.

L’utilisation de firefox_decrypt est relativement simple, on commence par télécharger l’outil depuis Github : https://github.com/Unode/firefox_decrypt
A noter que pour l’exploiter, il faut que Python soit installé sur la machine, aucun soucis pour les machines Linux. Pour les machines Windows, qui disposent rarement de Python installé nativement, il est plus rapidement de télécharger les bons fichiers depuis le poste infecté, puis de les traiter en local sur le poste de l’attaquant.

Voici une démonstration de son utilisation sur une base ne disposant pas de Master Password, celle-ci ayant été récupérée sur un poste Windows. Par défaut, firefox_decrypt va pointer vers le dossier Firefox de l’utilisateur courant, il suffit de spécifier un autre chemin si besoin (cas de l’attaque sur un autre utilisateur ou sur un fichier volé depuis un autre poste) :

  • /home/utilisateur/.mozilla/firefox/XXXX sous Linux ;
  • C:\Users\utilisateur\AppData\Local\Mozilla\Firefox\Profiles\XXX sous Windows.

On voit donc que l’outil nous demande de saisir le Master Password, s’il n’y en a pas, il suffit de saisir « Entrée » :

Utilisation de firefox_decrypt sur un profil Firefox sans Master Password.

Si la base dispose d’un Master Password, il faut le saisir, sinon celle-ci ne pourra être déchiffrée.A souligner que le Master Password peut faire l’objet d’une attaque de type brute-force :

Attaque de type brute force sur le Master Password d'un profil Firefox en utilisant firefox_decrypt.
Attaque de type brute force sur le Master Password d’un profil Firefox en utilisant firefox_decrypt.

Voici le script bash utilisé pour démontrer cette possibilité d’attaque par brute force. Il faut fournir en premier argument le chemin vers le profil Firefox à attaquer, et en deuxième argument le chemin vers le dictionnaire à utiliser.

#!/bin/bash
# $1 Path to Firefox profile
# $2 Path to dictionnary
while read p; do
    echo $p |python firefox_decrypt.py -n $1 2> /dev/null 1> /dev/null
    if [ $? -eq 0 ]
    then
        echo "[+] Found ! Good password is $p"
        echo $p |python firefox_decrypt.py -n $1
    fi
done <$2

Pour la petite histoire, l’utilisation de cet outil sur un poste utilisateur infectée (un Ubuntu) durant un audit interne m’a permis de trouver des identifiants valables sur le domaine de ma cible, ce qui m’a donné une première porte d’entrée légitime sur le domaine Actve Directory.

Il faut donc être vigilant concernant  l’utilisation de cette fonctionnalité dans un cadre personnel, mais également dans un cadre professionnel, vous pouvez être certains qu’une partie, voire une majorité de vos utilisateurs utilisent le même mot de passe dans le cadre personnel et dans le cadre professionnel, le simple fait qu’ils enregistrent leurs identifiants Facebook dans leur navigateur professionnel peut alors être problématique en cas d’infection.

Comment s’en protéger ?

De façon unitaire, la recommandation est donc d’utiliser un Master Password, bien que celui-ci puisse être brute forcé en cas de compromission des fichiers de profil Firefox, voir cet article pour la mise en place d’un Master Password sous Firefox : Utilisation du master password avec Firefox

Plus généralement, il est possible de gérer les configurations Firefox d’un parc utilisateur grâce aux GPO, il serait donc intéressant de voir si la fonctionnalité d’enregistrement des mots de passe Firefox peut être désactivée par se biais, ou alors de l’utiliser pour forcer la mise en place d’un Master Password, toute précision à ce sujet est bienvenue dans les commentaires.

Également, il est intéressant de pousser les utilisateurs à utiliser un coffre-fort prévu à cet effet et réellement sécurisé tel que Keepass : Gestion des mots de passe et sécurité
Sources :

  • https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data ;
  • https://support.mozilla.org/en-US/kb/password-manager-remember-delete-change-and-import ;
  • https://support.mozilla.org/en-US/kb/use-master-password-protect-stored-logins ;
  • http://kb.mozillazine.org/Master_password ;
  • http://kb.mozillazine.org/Key3.db ;
Partager :
Published inAttaques

4 Comments

  1. rsuinot

    Bonjour.
    Très intéressant, mais que faire quand votre employeur (institutionnel) vous empêche d’utiliser un master password ?
    Déjà l’utilisation d’Internet exploreur est plus ou moins forcé, mais si on a l’idée d’utiliser Firefox on a accès à aucun menu de paramétrage. Bien pour empêcher la modification de configuration et l’installation de pluggin(s) suspect, mais un peu limite quand même.
    Cordialement.

  2. Bonjour,
    Quel que soit le navigateur, autant ne pas tout mettre dans le même panier et utiliser un gestionnaire de mot de passe non ?
    C’est pas les solutions qui manquent : LastPass, 1Password, Keepass, etc.
    Cordialement,

    • En utilisant un outil tiers comme LastPass, KeePass ou autre, tu mets également tous tes oeufs dans le même panier 😉

  3. Rama

    Bonjour Clément,
    Merci pour cet intéressant article.
    Sur les recommandations de solutions, personnellement j’aime pas les : LastPass, 1Password, Keepass, etc. On dépend toujours d’un tiers.
    En plus pour certains d’entre eux l’information est stockée en locale (Bien entendu chiffré).
    Les clés FIDO U2S serait peut-être une solution partielle mais contraignante certainement.
    Cordialement,
    Rama

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *