Activer ou désactiver la protection contre l'énumération des adresses e-mail

Ce guide décrit la fonctionnalité de protection contre l'énumération des e-mails, et vous explique comment l'activer et la désactiver. Si vous avez créé votre projet le 15 septembre 2023 ou après, la protection contre l'énumération des adresses e-mail est activée par défaut.

Présentation

L'énumération par e-mail est un type d'attaque par force brute dans lequel un acteur malveillant tente de deviner ou de confirmer des utilisateurs dans un système en transmettant une adresse e-mail à l'API et en vérifiant la réponse.

Sans protection contre l'énumération des adresses e-mail, Identity Platform affiche des informations pouvant être utilisées dans une attaque par énumération d'adresses e-mail:

  • Tentative de connexion avec une adresse e-mail qui n'existe pas dans le système. Identity Platform renvoie une erreur EMAIL_NOT_FOUND.

  • Tentative d'inscription avec une adresse e-mail déjà enregistrée dans le système. Identity Platform renvoie une erreur EMAIL_EXISTS.

Vous pouvez utiliser la fonctionnalité de protection contre l'énumération des e-mails d'Identity Platform pour protéger les comptes utilisateur de votre application contre ces attaques.

Lorsque la protection contre l'énumération des adresses e-mail est activée, votre projet présente le comportement suivant:

  • L'API fetchSignInForEmail échouera. L'association d'utilisateurs authentifiés anonymes avec une adresse e-mail ne fonctionnera pas non plus avec les SDK 22.3.0 pour Android, 10.18.0 pour iOS et 10.6.0 pour le Web.

  • La liste des méthodes de connexion pour une adresse e-mail spécifiée n'est plus renvoyée lors de l'appel de l'API REST createAuthUri ou de la méthode du SDK client fetchSignInMethodsForEmail sur toutes les plates-formes.

  • Les utilisateurs ne peuvent pas modifier leur adresse e-mail sans avoir préalablement validé la nouvelle adresse. Par exemple, vous ne pouvez plus modifier l'adresse e-mail d'un utilisateur avec l'API REST update, l'API REST setAccountInfo ou la méthode SDK client updateEmail sur toutes les plates-formes.

    Vous pouvez utiliser verifyBeforeUpdateEmail pour le Web et Android ou sendEmailVerification(beforeUpdatingEmail:) pour iOS à la place.

  • Vous ne pouvez plus utiliser l'API REST setAccountInfo pour associer un fournisseur d'adresse e-mail/de mot de passe à un compte utilisateur existant. Vous ne pouvez plus utiliser la méthode du SDK client linkWithCredential avec un EmailAuthCredential sur n'importe quelle plate-forme. Utilisez plutôt l'API REST signUp, en transmettant le jeton d'ID de l'utilisateur dans le champ idToken et les champs email et password à associer.

  • Suppression des réponses d'erreur pour les flux de validation de l'adresse e-mail, tels que ceux initiés en appelant l'API REST sendOobCode avec les types de requêtes VERIFY_AND_CHANGE_EMAIL ou PASSWORD_RESET, et lors de l'appel de verifyBeforeUpdateEmail pour le Web et Android, sendEmailVerification(beforeUpdatingEmail:) pour iOS ou les méthodes du SDK client sendPasswordResetEmail sur toutes les plates-formes.

    Lorsque vous effectuez une demande de réinitialisation de mot de passe, un e-mail de validation n'est envoyé que si l'adresse e-mail existe. Lorsque vous effectuez une demande de changement d'adresse e-mail, un e-mail de validation n'est envoyé que si l'adresse e-mail n'existe pas déjà. Dans les deux cas, aucun message d'erreur spécifique n'indique quand les e-mails ne sont pas envoyés.

    Nous vous recommandons de ne pas autoriser les utilisateurs à s'inscrire sans une procédure de validation de l'adresse e-mail.

  • Les demandes de connexion non valides renvoient une erreur INVALID_LOGIN_CREDENTIALS. Les demandes d'inscription non valides continuent de renvoyer des erreurs EMAIL_EXISTS. Consultez les recommandations dans la section suivante.

Si votre application repose sur l'un des comportements modifiés par la protection contre l'énumération des adresses e-mail, vous pouvez actuellement la désactiver. Toutefois, cela n'est pas recommandé à long terme (consultez la section suivante).

Recommandations pour améliorer la sécurité

L'une des méthodes les plus courantes pour effectuer une attaque par piratage de compte consiste à effectuer des attaques par accumulation d'identifiants à l'aide d'identifiants divulgués ou faciles à deviner. L'énumération des adresses e-mail peut également être utilisée pour obtenir des informations sensibles sur vos utilisateurs ou pour effectuer des attaques d'hameçonnage à leur encontre. Pour ces raisons, Google recommande d'utiliser la fonctionnalité de protection contre l'énumération des e-mails afin de protéger vos applications contre de telles attaques.

  • Si vous avez créé votre projet le 15 septembre 2023 ou après, la protection contre l'énumération des e-mails est activée par défaut. Nous vous recommandons de laisser la protection contre l'énumération des adresses e-mail activée et de ne pas vous appuyer sur l'un des comportements énumérés précédemment dans ce guide.

  • Si vous avez créé votre projet avant le 15 septembre 2023, la protection contre l'énumération des adresses e-mail n'est pas automatiquement activée.

    Si vos applications ne reposent sur aucun des comportements décrits précédemment dans ce guide, nous vous recommandons d'activer immédiatement la protection contre l'énumération des e-mails.

    Si vos applications reposent sur l'un des comportements décrits précédemment, nous vous recommandons de commencer à ne plus le faire et d'activer la protection contre l'énumération des e-mails dès que possible.

En plus d'utiliser la protection contre l'énumération des adresses e-mail, envisagez de prendre des mesures pour éviter toute utilisation abusive des points de terminaison d'inscription de votre projet qui continuent de renvoyer des erreurs EMAIL_EXISTS. Pour ce faire, procédez comme suit:

  • Activez App Check.
  • Intégrez reCAPTCHA dans votre processus d'inscription.
  • Interdisez la connexion avec des adresses e-mail, des mots de passe ou des liens d'e-mail, et utilisez plutôt d'autres méthodes, telles que Google Sign-In.

Activer la protection contre l'énumération des adresses e-mail

Pour activer la protection contre l'énumération des adresses e-mail, procédez comme suit:

Console Firebase

  1. Dans la console Firebase, accédez à la page Paramètres d'authentification Firebase.

    Accéder aux paramètres d'authentification Firebase

    1. Dans le volet de navigation, sélectionnez Actions de l'utilisateur.

    2. Sélectionnez Protection contre l'énumération des e-mails (recommandé).

  2. Cliquez sur Enregistrer.

Node.js

  1. Installez le SDK Admin.

  2. Pour activer la protection contre l'énumération des adresses e-mail, utilisez l'une des options suivantes:

    • Pour une protection au niveau du projet:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      
    • Pour la protection au niveau du locataire:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().tenantConfigManager().updateTenant(TENANT_ID,
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      

      Remplacez TENANT_ID par l'ID du locataire pour lequel vous souhaitez activer la protection contre l'énumération des e-mails.

REST

  1. Dans la console Google Cloud, imprimez un jeton d'accès pour votre ID de projet à l'aide de la commande gcloud auth print-access-token:

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Activez la protection contre l'énumération des adresses e-mail pour votre ID de projet à l'aide de l'API Identity Toolkit:

    curl -X PATCH -d "{'emailPrivacyConfig':{'enableImprovedEmailPrivacy':true}}" \
        -H 'Authorization: Bearer ACCESS_TOKEN' \
        -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
        "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=emailPrivacyConfig"
    

Remplacez les éléments suivants :

  • ACCESS_TOKEN: jeton d'accès que vous avez généré précédemment
  • PROJECT_ID : ID de votre projet.

Désactiver la protection contre l'énumération des adresses e-mail

Pour désactiver la protection contre l'énumération des adresses e-mail, procédez comme suit:

Console Firebase

  1. Dans la console Firebase, accédez à la page Paramètres d'authentification Firebase.

    Accéder aux paramètres d'authentification Firebase

    1. Dans le volet de navigation, sélectionnez Actions de l'utilisateur.

    2. Désactivez l'option Protection contre l'énumération des e-mails (recommandé).

  2. Cliquez sur Enregistrer.

Node.js

  1. Installez le SDK Admin.

  2. Pour désactiver la protection contre l'énumération des adresses e-mail, utilisez l'une des méthodes suivantes:

    • Pour une protection au niveau du projet:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      
    • Pour la protection au niveau du locataire:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().tenantConfigManager().updateTenant(TENANT_ID,
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      

      Remplacez TENANT_ID par l'ID du locataire pour lequel vous souhaitez désactiver la protection contre l'énumération des adresses e-mail.

REST

  1. Dans la console Google Cloud, imprimez un jeton d'accès pour votre ID de projet à l'aide de la commande gcloud auth print-access-token:

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Désactivez la protection contre l'énumération des e-mails à l'aide de l'API Identity Toolkit:

    curl -X PATCH -d "{'emailPrivacyConfig':{'enableImprovedEmailPrivacy':false}}" \
        -H 'Authorization: Bearer ACCESS_TOKEN' \
        -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
        "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=emailPrivacyConfig"
    

Remplacez les éléments suivants :

  • ACCESS_TOKEN: jeton d'accès que vous avez généré précédemment
  • PROJECT_ID : ID de votre projet.

Exemple de réponse d'erreur

Si un utilisateur tente de se connecter avec une adresse e-mail ou un mot de passe incorrects, ou tente de s'inscrire avec une adresse e-mail déjà présente dans le système, Identity Platform renvoie une erreur semblable à la suivante:

{
"code": "auth/internal-error",
"message": "{\"error\":{\"code\":400,\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"errors\":[{\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"domain\":\"global\",\"reason\":\"invalid\"}]}}"
}