Como uma Falha de Lógica no Reset de Palavra-Passe Permitiu Account Enumeration
Introdução
Funcionalidades de recuperação de palavra-passe são frequentemente vistas como triviais, mas erros subtis na sua implementação podem levar a falhas graves de segurança. Neste write-up descrevo como uma simples diferença no comportamento do endpoint de reset de password permitia enumerar contas válidas numa aplicação web, abrindo a porta para ataques direcionados.
Contexto da Aplicação
O alvo era uma aplicação web orientada a utilizadores finais, com autenticação baseada em e-mail e palavra-passe. A funcionalidade de “Esqueci-me da palavra-passe” estava disponível publicamente, como seria expectável.
A aplicação utilizava um endpoint dedicado para iniciar o processo de recuperação:
POST /api/auth/password-reset
A Descoberta
Ao testar o fluxo de recuperação, notei um comportamento inconsistente dependendo do e-mail introduzido:
Para e-mails válidos, o servidor respondia rapidamente com uma mensagem de sucesso.
Para e-mails inexistentes, a resposta era diferente, tanto no conteúdo como no tempo de resposta.
Esta diferença levantou uma suspeita imediata de account enumeration.
A Exploração
Para confirmar a falha, executei múltiplos pedidos ao endpoint com:
Endereços de e-mail reais (criados previamente)
Endereços de e-mail aleatórios
Foi possível distinguir claramente quais os e-mails registados na plataforma apenas analisando:
O código de resposta HTTP
O tempo médio de resposta
A mensagem devolvida pelo servidor
Sem qualquer autenticação, um atacante poderia automatizar este processo e construir uma lista de utilizadores válidos em poucos minutos.
Impacto
Embora esta falha não permita acesso direto a contas, o seu impacto é significativo. A enumeração de utilizadores facilita:
Ataques de força bruta
Phishing direcionado
Credential stuffing
Por este motivo, a vulnerabilidade foi classificada como Média, com potencial de escalada quando combinada com outras falhas.
Mitigação Recomendada
A aplicação deve responder sempre de forma genérica, independentemente de o e-mail existir ou não. A mensagem, o código HTTP e o tempo de resposta devem ser uniformes para evitar qualquer forma de distinção observável pelo utilizador.
Conclusão
Este caso demonstra como falhas aparentemente menores podem fornecer informação valiosa a um atacante. A consistência nas respostas e a eliminação de diferenças observáveis são essenciais para proteger funcionalidades sensíveis como a recuperação de palavra-passe.
Funcionalidades de recuperação de palavra-passe são frequentemente vistas como triviais, mas erros subtis na sua implementação podem levar a falhas graves de segurança. Neste write-up descrevo como uma simples diferença no comportamento do endpoint de reset de password permitia enumerar contas válidas numa aplicação web, abrindo a porta para ataques direcionados.
Contexto da Aplicação
O alvo era uma aplicação web orientada a utilizadores finais, com autenticação baseada em e-mail e palavra-passe. A funcionalidade de “Esqueci-me da palavra-passe” estava disponível publicamente, como seria expectável.
A aplicação utilizava um endpoint dedicado para iniciar o processo de recuperação:
POST /api/auth/password-reset
A Descoberta
Ao testar o fluxo de recuperação, notei um comportamento inconsistente dependendo do e-mail introduzido:
Para e-mails válidos, o servidor respondia rapidamente com uma mensagem de sucesso.
Para e-mails inexistentes, a resposta era diferente, tanto no conteúdo como no tempo de resposta.
Esta diferença levantou uma suspeita imediata de account enumeration.
A Exploração
Para confirmar a falha, executei múltiplos pedidos ao endpoint com:
Endereços de e-mail reais (criados previamente)
Endereços de e-mail aleatórios
Foi possível distinguir claramente quais os e-mails registados na plataforma apenas analisando:
O código de resposta HTTP
O tempo médio de resposta
A mensagem devolvida pelo servidor
Sem qualquer autenticação, um atacante poderia automatizar este processo e construir uma lista de utilizadores válidos em poucos minutos.
Impacto
Embora esta falha não permita acesso direto a contas, o seu impacto é significativo. A enumeração de utilizadores facilita:
Ataques de força bruta
Phishing direcionado
Credential stuffing
Por este motivo, a vulnerabilidade foi classificada como Média, com potencial de escalada quando combinada com outras falhas.
Mitigação Recomendada
A aplicação deve responder sempre de forma genérica, independentemente de o e-mail existir ou não. A mensagem, o código HTTP e o tempo de resposta devem ser uniformes para evitar qualquer forma de distinção observável pelo utilizador.
Conclusão
Este caso demonstra como falhas aparentemente menores podem fornecer informação valiosa a um atacante. A consistência nas respostas e a eliminação de diferenças observáveis são essenciais para proteger funcionalidades sensíveis como a recuperação de palavra-passe.
Introdução
Funcionalidades de recuperação de palavra-passe são frequentemente vistas como triviais, mas erros subtis na sua implementação podem levar a falhas graves de segurança. Neste write-up descrevo como uma simples diferença no comportamento do endpoint de reset de password permitia enumerar contas válidas numa aplicação web, abrindo a porta para ataques direcionados.
Contexto da Aplicação
O alvo era uma aplicação web orientada a utilizadores finais, com autenticação baseada em e-mail e palavra-passe. A funcionalidade de “Esqueci-me da palavra-passe” estava disponível publicamente, como seria expectável.
A aplicação utilizava um endpoint dedicado para iniciar o processo de recuperação:
POST /api/auth/password-reset
A Descoberta
Ao testar o fluxo de recuperação, notei um comportamento inconsistente dependendo do e-mail introduzido:
Para e-mails válidos, o servidor respondia rapidamente com uma mensagem de sucesso.
Para e-mails inexistentes, a resposta era diferente, tanto no conteúdo como no tempo de resposta.
Esta diferença levantou uma suspeita imediata de account enumeration.
A Exploração
Para confirmar a falha, executei múltiplos pedidos ao endpoint com:
Endereços de e-mail reais (criados previamente)
Endereços de e-mail aleatórios
Foi possível distinguir claramente quais os e-mails registados na plataforma apenas analisando:
O código de resposta HTTP
O tempo médio de resposta
A mensagem devolvida pelo servidor
Sem qualquer autenticação, um atacante poderia automatizar este processo e construir uma lista de utilizadores válidos em poucos minutos.
Impacto
Embora esta falha não permita acesso direto a contas, o seu impacto é significativo. A enumeração de utilizadores facilita:
Ataques de força bruta
Phishing direcionado
Credential stuffing
Por este motivo, a vulnerabilidade foi classificada como Média, com potencial de escalada quando combinada com outras falhas.
Mitigação Recomendada
A aplicação deve responder sempre de forma genérica, independentemente de o e-mail existir ou não. A mensagem, o código HTTP e o tempo de resposta devem ser uniformes para evitar qualquer forma de distinção observável pelo utilizador.
Conclusão
Este caso demonstra como falhas aparentemente menores podem fornecer informação valiosa a um atacante. A consistência nas respostas e a eliminação de diferenças observáveis são essenciais para proteger funcionalidades sensíveis como a recuperação de palavra-passe.
Funcionalidades de recuperação de palavra-passe são frequentemente vistas como triviais, mas erros subtis na sua implementação podem levar a falhas graves de segurança. Neste write-up descrevo como uma simples diferença no comportamento do endpoint de reset de password permitia enumerar contas válidas numa aplicação web, abrindo a porta para ataques direcionados.
Contexto da Aplicação
O alvo era uma aplicação web orientada a utilizadores finais, com autenticação baseada em e-mail e palavra-passe. A funcionalidade de “Esqueci-me da palavra-passe” estava disponível publicamente, como seria expectável.
A aplicação utilizava um endpoint dedicado para iniciar o processo de recuperação:
POST /api/auth/password-reset
A Descoberta
Ao testar o fluxo de recuperação, notei um comportamento inconsistente dependendo do e-mail introduzido:
Para e-mails válidos, o servidor respondia rapidamente com uma mensagem de sucesso.
Para e-mails inexistentes, a resposta era diferente, tanto no conteúdo como no tempo de resposta.
Esta diferença levantou uma suspeita imediata de account enumeration.
A Exploração
Para confirmar a falha, executei múltiplos pedidos ao endpoint com:
Endereços de e-mail reais (criados previamente)
Endereços de e-mail aleatórios
Foi possível distinguir claramente quais os e-mails registados na plataforma apenas analisando:
O código de resposta HTTP
O tempo médio de resposta
A mensagem devolvida pelo servidor
Sem qualquer autenticação, um atacante poderia automatizar este processo e construir uma lista de utilizadores válidos em poucos minutos.
Impacto
Embora esta falha não permita acesso direto a contas, o seu impacto é significativo. A enumeração de utilizadores facilita:
Ataques de força bruta
Phishing direcionado
Credential stuffing
Por este motivo, a vulnerabilidade foi classificada como Média, com potencial de escalada quando combinada com outras falhas.
Mitigação Recomendada
A aplicação deve responder sempre de forma genérica, independentemente de o e-mail existir ou não. A mensagem, o código HTTP e o tempo de resposta devem ser uniformes para evitar qualquer forma de distinção observável pelo utilizador.
Conclusão
Este caso demonstra como falhas aparentemente menores podem fornecer informação valiosa a um atacante. A consistência nas respostas e a eliminação de diferenças observáveis são essenciais para proteger funcionalidades sensíveis como a recuperação de palavra-passe.
6 likes
Comentários (5)
Queres participar na discussão? Faz login ou cria conta.