Skip to main content

#02 + #03 ATO — Resumo Executivo

Severidade: Crítica
O que é: Um atacante consegue trocar a senha de qualquer vendedor sem ter acesso ao e-mail nem ao telefone dele.

A mesma falha existe em dois caminhos: recuperação por e-mail (#02) e recuperação por SMS (#03). A correção resolve ambos de uma vez.


O Problema

Fluxo normal de recuperação de senha

O código só vai para o celular ou e-mail cadastrado do vendedor. Isso é seguro.

O que o atacante faz hoje

Importante: o atacante não usa o app. Ele faz chamadas diretas para o servidor usando ferramentas como curl ou Postman. As proteções do app (interceptors, Firebase Remote Config) são inúteis contra esse tipo de ataque — é um ataque direto à API, sem interface de usuário.

Dois caminhos, mesma falha:

VetorEndpointComo funciona
#02 Emailverify-emailAtacante informa o email dele, recebe o código lá
#03 SMSverify-phoneAtacante informa o celular dele, recebe o código lá

O problema: o sistema aceita que o atacante escolha para qual email o código será enviado. Em vez de mandar para o email cadastrado da vítima, manda para o email do atacante.


Por Que Isso Acontece

O atacante não enfrenta as proteções do app (biometria, Firebase, interceptor). Ele conversa direto com o servidor via chamadas HTTP. O servidor decide se atende ou não. E hoje, o servidor atende sem verificar se quem está pedindo é o dono da conta.

3 falhas encadeadas:

#FalhaExplicação simples
1Destino do código não verificadoO sistema envia o código para o email/telefone que o atacante informa, não para o contato cadastrado da vítima. Vale para email e SMS.
2Falta de autenticaçãoO atacante não precisa estar logado para pedir o código
3Token compartilhadoO token gerado na validação de email serve para trocar a senha — os fluxos se misturam

A Solução

Onde a correção acontece: no servidor (backend), não no app. É o servidor que decide se atende ou rejeita cada chamada.

Antes e Depois

Fluxo Corrigido — Atualização de Contato

Fluxo Corrigido — Recuperação de Senha


O Que Muda no App

Única mudança visível: se o vendedor não tem telefone nem email confirmados e tenta recuperar a senha, o app mostrará "Contate o suporte" em vez de oferecer cadastrar novo contato na hora.


Verificação de Segurança


O Que NÃO Entra Neste Fix

ItemMotivoQuando
Código mestre previsível por dataVulnerabilidade distintaPróximo card
Limite de tentativas de códigoVulnerabilidade distintaCard #04
Impedir descoberta de CPFs válidosVulnerabilidade distintaCard separado

Impacto

  • Vendedores: sem impacto no dia a dia. Recuperação de senha continua igual. Atualização de contato continua igual.
  • Suporte: vendedores sem telefone/email confirmados precisarão de atendimento para recuperar senha (antes conseguiam sozinhos).
  • Segurança: fecha a porta de entrada mais crítica do relatório de pentest.