¿Cuáles son los efectos de activar la configuración Prevención de errores de existencia de usuarios en Amazon Cognito?

7 minutos de lectura
0

Deseo obtener más información sobre la configuración Prevención de errores de existencia de usuarios en Amazon Cognito.

Descripción breve

La enumeración de usuarios es una vulnerabilidad de las aplicaciones web en la que un actor malintencionado utiliza técnicas de fuerza bruta para adivinar o confirmar los usuarios válidos de un sistema. Amazon Cognito proporciona una característica de seguridad para evitar que los actores malintencionados encuentren usuarios válidos dentro de un grupo de usuarios de Amazon Cognito. Esta característica de seguridad está disponible para las áreas más comunes en las que se produce la enumeración de usuarios:

  • Autenticación de usuarios
  • Confirmación de usuarios
  • Recuperación de contraseñas
  • Registro de usuarios

Resolución

Autenticación de usuarios

Cuando se ingresan el nombre de usuario y la contraseña de un usuario que no existe, Amazon Cognito responde con una excepción denominada UserNotFoundException. Este error de existencia de usuarios indica explícitamente que el nombre de usuario ingresado no existe. A partir de esta respuesta de error, los actores malintencionados pueden llevar a cabo un ataque de fuerza bruta para adivinar los usuarios válidos del grupo de usuarios.

Active la configuración Prevención de errores de existencia de usuarios para que el cliente de la aplicación de Amazon Cognito devuelva un mensaje genérico en caso de solicitudes de inicio de sesión de usuarios que no existen. El mensaje genérico indica que el nombre de usuario o la contraseña son incorrectos. La configuración Prevención de errores de existencia de usuarios ayuda a evitar los ataques de adivinación de credenciales, ya que el mensaje de error no revela la existencia del usuario.

Ejemplo de respuesta de error para intentos de inicio de sesión de usuarios que no existen

A continuación se muestran ejemplos de respuestas de error para intentos de inicio de sesión de usuarios que no existen.

$ aws cognito-idp initiate-auth --client-id 12ab34cd56ef78gh91ij23kl45m --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME="myuser",PASSWORD="password"

Con la configuración Prevención de errores de existencia de usuarios desactivada: “An error occurred (UserNotFoundException) when calling the InitiateAuth operation: User does not exist” (Se ha producido un error [UserNotFoundException] al llamar a la operación InitiateAuth: el usuario no existe).

Con la configuración Prevención de errores de existencia de usuarios activada: “An error occurred (NotAuthorizedException) when calling the InitiateAuth operation: Incorrect username or password” (Se ha producido un error [NotAuthorizedException] al llamar a la operación InitiateAuth: nombre de usuario o contraseña incorrectos).

Confirmación de usuarios

Cuando la configuración Prevención de errores de existencia de usuarios está activada y un usuario está desactivado o no se encuentra, Amazon Cognito devuelve CodeDeliveryDetails. Los detalles de entrega del código se devuelven a los usuarios con un medio de entrega simulado en lugar de devolver la excepción denominada UserNotFoundException. Cuando existe un usuario en el grupo de usuarios, Amazon Cognito envía un código de confirmación a la dirección de correo electrónico o número de teléfono existentes del usuario. El medio de entrega simulado está determinado por el formato de entrada del nombre de usuario y la configuración de verificación del grupo de usuarios.

Ejemplo de respuesta de error para un usuario inexistente que reenvía el código de confirmación

A continuación se muestran ejemplos de respuestas de error para reenviar un código de confirmación a un usuario que no existe en un grupo de usuarios:

$ aws cognito-idp resend-confirmation-code --client-id 12ab34cd56ef78gh91ij23kl45m --username "myuser"

Con la configuración Prevención de errores de existencia de usuarios desactivada: “An error occurred (UserNotFoundException) when calling the ResendConfirmationCode operation: Username/client id combination not found” (Se ha producido un error [UserNotFoundException] al llamar a la operación ResendConfirmationCode: no se encontró la combinación de nombre de usuario/identificador de cliente).

Con la opción Prevención de errores de existencia de usuarios activada, la dirección de correo electrónico es aleatoria y el medio de entrega se simula:

{
  "CodeDeliveryDetails": {
    "Destination": "n****@g****.com",
    "DeliveryMedium": "Email",
    "AttributeName": "email"
  }
}

Recuperación de contraseñas

Cuando la configuración Prevención de errores de existencia de usuarios está activada y un usuario está desactivado, no se encuentra o no puede recuperar las contraseñas, Amazon Cognito devuelve CodeDeliveryDetails. Los detalles de entrega del código proporcionan un medio de entrega simulado para un usuario en lugar de devolver la excepción denominada UserNotFoundException. El medio de entrega simulado está determinado por el formato de entrada del nombre de usuario y la configuración de recuperación del grupo de usuarios.

Con los detalles de recuperación del código, puede ver que el código de recuperación se envía a una dirección de correo electrónico o número de teléfono simulados aleatorios. Este medio de entrega simulado dificulta que el atacante distinga entre los usuarios válidos y los que no lo son.

Amazon Cognito devuelve CodeDeliveryDetails con un medio de entrega simulado en el flujo de restablecimiento de contraseña. Sin embargo, los códigos de restablecimiento de contraseña no se envían realmente al medio de entrega simulado. Se trata de una medida de seguridad para evitar el envío de correo no deseado a direcciones de correo electrónico y números de teléfono no verificados.

Ejemplo de respuesta de error para la recuperación de una contraseña de usuario que no existe

A continuación se muestran ejemplos de respuestas de error para la recuperación de contraseñas para usuarios que no existen en el grupo de usuarios:

$ aws cognito-idp forgot-password --client-id 12ab34cd56ef78gh91ij23kl45m --username "myuser"

Con la configuración Prevención de errores de existencia de usuarios desactivada: “An error occurred (UserNotFoundException) when calling the ForgotPassword operation: Username/client id combination not found” (Se ha producido un error [UserNotFoundException] al llamar a la operación ForgotPassword: no se encontró la combinación de nombre de usuario/identificador de cliente).

Con la opción Prevención de errores de existencia de usuarios activada, donde el número de teléfono es aleatorio y el medio de entrega se simula:

{
  "CodeDeliveryDetails": {
    "Destination": "+*******0874",
    "DeliveryMedium": "SMS",
    "AttributeName": "phone_number"
  }
}

Registro de usuarios

La operación SignUp devuelve UsernameExistsException cuando ya hay un nombre de usuario en uso. Para evitar que se produzca el error UsernameExistsException en una dirección de correo electrónico o número de teléfono durante el registro, utilice alias basados en la verificación.

El registro se lleva a cabo correctamente cuando se proporciona una dirección de correo electrónico o un número de teléfono como alias de una cuenta diferente que ya está en uso. Cuando un usuario intenta confirmar una cuenta con esta dirección de correo electrónico o número de teléfono y un código de verificación válido, se devuelve el error AliasExistsException. El error indica al usuario que existe una cuenta con esta dirección de correo electrónico o número de teléfono.

Dado que el error de existencia del usuario solo se revela después de ingresar un código válido, este proceso elimina el riesgo potencial de que actores malintencionados identifiquen a los usuarios válidos. Para obtener más información sobre los alias basados en la verificación, consulte User pool attributes (Atributos del grupo de usuarios) y elija la pestaña Customizing sign-in attributes (Personalización de los atributos de inicio de sesión).

¿Cómo modifico la configuración Prevención de errores de existencia de usuarios en Amazon Cognito?

Siga estos pasos para modificar la configuración Prevención de errores de existencia de usuarios:

  1. Inicie sesión en la consola de Amazon Cognito.
  2. Seleccione un grupo de usuarios existente de la lista.
  3. Elija la sección App integration (Integración de aplicaciones).
  4. En App clients (Clientes de aplicaciones), seleccione un cliente de aplicaciones de la lista.
  5. En la sección App client information (Información del cliente de aplicación), seleccione el botón Edit (Editar).
  6. Desplácese hasta la parte inferior para encontrar la configuración Prevent user existence errors setting (Prevención de errores de existencia de usuarios) en Advanced security configurations (Configuraciones de seguridad avanzadas). Seleccione o desactive esta opción.
  7. Guarde los cambios.

Para obtener más información sobre las respuestas de error, consulte Managing error responses (Administrar respuestas de error).


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año