Quais são os efeitos de ativar a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) no Amazon Cognito?

7 minuto de leitura
0

Quero saber mais sobre a configuração para impedir erros de existência do usuário no Amazon Cognito.

Breve descrição

A enumeração de usuários é uma vulnerabilidade de aplicações Web em que um agente mal-intencionado usa técnicas de força bruta para adivinhar ou confirmar usuários válidos em um sistema. O Amazon Cognito fornece um recurso de segurança para impedir que malfeitores encontrem usuários válidos dentro de um grupo de usuários do Amazon Cognito. Esse recurso de segurança está disponível para as áreas mais comuns em que ocorre a enumeração do usuário:

  • Autenticação de usuários
  • Confirmação de usuários
  • Recuperação de senha
  • Registro de usuários

Resolução

Autenticação de usuários

Quando o nome de usuário e a senha de um usuário inexistente são inseridos, o Amazon Cognito responde com uma exceção chamada UserNotFoundException. Esse erro de existência do usuário afirma explicitamente que o nome de usuário inserido não existe. Com base nessa resposta de erro, agentes mal-intencionados podem realizar um ataque de força bruta para adivinhar usuários válidos em seu grupo de usuários.

Ative a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) para que seu cliente da aplicação do Amazon Cognito retorne uma mensagem genérica para solicitações de login de usuários inexistentes. A mensagem genérica diz que o nome de usuário ou a senha está incorreta. A configuração Prevent User Existence Errors (Impedir erros de existência do usuário) ajuda a proteger contra ataques de adivinhação de credenciais porque a existência do usuário não é revelada pela mensagem de erro.

Exemplo de resposta de erro para tentativas de login de usuário inexistente

Veja a seguir exemplos de respostas de erro para tentativas de login de usuário inexistente.

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

Com a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) desativada: “An error occurred (UserNotFoundException) when calling the InitiateAuth operation: User does not exist” (Ocorreu um erro [UserNotFoundException] ao chamar a operação InitiateAuth: o usuário não existe).

Com a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) ativada: “An error occurred (NotAuthorizedException) when calling the InitiateAuth operation: Incorrect username or password” (Ocorreu um erro [NotAuthorizedException] ao chamar a operação InitiateAuth: nome de usuário ou senha incorreta).

Confirmação de usuários

Quando a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) está ativada e um usuário é desativado ou não é encontrado, o Amazon Cognito retorna CodeDeliveryDetails. Os detalhes da entrega do código são retornados aos usuários com um meio de entrega simulado, em vez de retornar a exceção chamada UserNotFoundException. Quando um usuário existe no grupo de usuários, o Amazon Cognito envia um código de confirmação para o endereço de e-mail ou número de telefone existente do usuário. O meio de entrega simulado é determinado pelo formato de entrada do nome de usuário e pelas configurações de verificação do grupo de usuários.

Exemplo de resposta de erro para usuário inexistente reenviando código de confirmação

Veja a seguir exemplos de respostas de erro para reenviar um código de confirmação para um usuário inexistente em um grupo de usuários:

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

Com a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) desativada: “An error occurred (UserNotFoundException) when calling the ResendConfirmationCode operation: Username/client id combination not found” (Ocorreu um erro [UserNotFoundException] ao chamar a operação ResendConfirmationCode: combinação de nome de usuário/ID do cliente não encontrada).

Com a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) ativada, em que o endereço de e-mail é aleatório e o meio de entrega é simulado:

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

Recuperação de senha

Quando a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) está ativada e um usuário é desativado, não é encontrado ou não consegue recuperar senhas, o Amazon Cognito retorna CodeDeliveryDetails. Os detalhes da entrega do código fornecem um meio de entrega simulado para um usuário, em vez de retornar a exceção chamada UserNotFoundException. O meio de entrega simulado é determinado pelo formato de entrada do nome de usuário e pelas configurações de recuperação do grupo de usuários.

Com os detalhes da recuperação do código, você pode ver que o código de recuperação é enviado para um endereço de e-mail ou número de telefone simulado aleatoriamente. Esse meio de entrega simulado dificulta que o invasor diferencie entre usuários válidos e não válidos.

O Amazon Cognito retorna CodeDeliveryDetails com um meio de entrega simulado no fluxo de redefinição de senha. No entanto, os códigos de redefinição de senha não são realmente enviados para o meio de entrega simulado. Esta é uma medida de segurança para evitar o envio de spam para endereços de e-mail e números de telefone não verificados.

Exemplo de resposta de erro para recuperação de senha de usuário inexistente

Veja a seguir exemplos de respostas de erro para recuperação de senha para usuários que não existem no grupo de usuários:

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

Com a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) desativada: “An error occurred (UserNotFoundException) when calling the ForgotPassword operation: Username/client id combination not found” (Ocorreu um erro [UserNotFoundException] ao chamar a operação ForgotPassword: combinação de nome de usuário/ID do cliente não encontrada).

Com a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) ativada, em que o número de telefone é aleatório e o meio de entrega é simulado:

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

Registro de usuários

A operação SignUp retorna UsernameExistsException quando um nome de usuário já está em uso. Para evitar o erro UsernameExistsException em um endereço de e-mail ou número de telefone durante o cadastro, use aliases baseados em verificação.

O registro é bem-sucedido quando um endereço de e-mail ou número de telefone é fornecido como um alias de uma conta diferente que já está em uso. Quando um usuário tenta confirmar uma conta com esse endereço de e-mail ou número de telefone e um código de verificação válido, o erro AliasExistsException é retornado. O erro indica ao usuário que existe uma conta com esse endereço de e-mail ou número de telefone.

Como o erro de existência do usuário é revelado somente após a inserção de um código válido, esse processo elimina o risco potencial de agentes mal-intencionados identificarem usuários válidos. Para saber mais sobre aliases baseados em verificação, consulte Atributos de grupo de usuários e escolha a guia Customizing sign-in attributes (Personalizar atributos de login).

Como modifico a configuração Prevent User Existence Errors (Impedir erros de existência do usuário) no Amazon Cognito?

Siga estas etapas para modificar a configuração de impedir erros de existência do usuário:

  1. Faça login no console do Amazon Cognito.
  2. Selecione um grupo de usuários existente na lista.
  3. Escolha a seção App integration (Integração de aplicações).
  4. Em App clients (Clientes de aplicações), selecione um cliente de aplicação na lista.
  5. Na seção App client information (Informações do cliente de aplicação), escolha o botão Edit (Editar).
  6. Role até a parte inferior para encontrar a configuração Prevent user existence errors configuration (Impedir erros de existência do usuário) em Advanced security configurations (Configurações avançadas de segurança). Selecione ou desmarque essa opção.
  7. Salve suas alterações.

Para obter mais informações sobre respostas de erro, consulte Gerenciar repostas de erros.


AWS OFICIAL
AWS OFICIALAtualizada há um ano