Postmortem: endpoint "/api/v1/recovery" retornava token sensível que conseguia burlar o fluxo de alteração de senha
É com muito orgulho que venho aqui publicar o segundo Postmortem do TabNews (caso tenha curiosidade este foi o primeiro), onde o orgulho obviamente não está na falha em sí, mas está em conhecer cada vez mais pessoas interessadas em proteger esse pedaço de internet que estamos construindo juntos e também por conta da transparência que temos com todos 🤝
Então desta vez eu gostaria de dar destaque para o Fabrício, que na descrição do seu perfil no GitHub diz o seguinte:
Olá todos, chamo-me Fabrício, tenho 16 anos e, no momento, curso o 2 ano do ensino médio. Sou um novato na programação, mas busco me aprimorar a cada dia.
E nesta segunda-feira o Fabrício descobriu uma falha de segurança no endpoint responsável pela Recuperação de Senha, onde na verdade você não recupera a sua senha atual, você apenas consegue definir uma nova. Então vou descrever abaixo o que aconteceu, começando pelo resumo, depois a sequência dos fatos e por fim entender se a falha foi explorada.
Resumo
O endpoint /api/v1/recovery
, ao ser utilizado para iniciar o fluxo de uma recuperação de senha, retornava também o próprio token
que deveria ser utilizado para conseguir definir uma nova senha, sendo que o comportamento esperado era este token ser apenas visível dentro do email que era enviado ao usuário.
Este token poderia ser gerado ao utilizar o username
da conta (que é um dado público), onde apesar disto, um login com sucesso requer um dado privado, que é o email
da pessoa.
Sequência dos fatos
- Às 8:29 AM do dia 28 de Novembro de 2022, Fabrício nos reportou de forma privada pelo email
[email protected]
os passos para reproduzir esta falha de segurança. - Às 9:00 AM do mesmo dia retornamos o email informado que iniciamos uma investigação do nosso lado para confirmar a falha.
- Em paralelo a isto, o acesso ao endpoint
/api/v1/recovery
foi barrado globalmente na Cloudflare como medida emergencial. - Às 9:19 AM aplicamos a correção no Ambiente de Produção e agora o token não é mais retornado.
- Às 11:17 AM Fabrício confirmou que a falha não poderia mais ser explorada.
Por fim, nada no sistema de autenticação ou autorização foi impactado e em paralelo a isto, iremos implementarmos autenticação de 2 fatores. O Tiago Dinis (coffee-is-power) já fez uma proposta neste PR.
A falha foi explorada?
Uma característica do fluxo de Recuperação de Senha me faz acreditar que há uma baixa probabilidade desta falha ter sido explorada, que é o fato de que, ao concluir com sucesso o fluxo com a alteração da senha, todas as sessões do usuário são invalidadas, deslogando imediatamente qualquer cliente que possa estar conectado ao TabNews. Então como ponto de referência, a conta filipedeschamps
, que é a conta com todas as credenciais administrativas, em nenhum momento teve suas sessões invalidadas por este tipo de evento.
Mas isto não é a prova que a falha não possa ter sido explorada e você pode ter sido afetado. Caso você acredite que este seja o caso, você deve resetar sua senha e invalidar todas as sessões ativas utilizando este link: https://www.tabnews.com.br/cadastro/recuperar
Agradecimento extra
Gostaria de agradecer especialmente o FelipeBarso que se uniu nesta batalha num ponto que ainda gostaríamos de explorar um pouco mais antes de tornarmos a informação pública, até por envolver uma solução terceirizada e que pode afetar outros projetos da comunidade open source 🤝
Conclusão
Uma coisa que sinto falta nas empresas brasileiras é justamente a criação de documentos como este, sendo transparentes (na medida do possível) e explicando de forma pública o que aconteceu e o que foi feito, mas entendo que não há incentivo ou benefício algum na percepção da empresa... e concordo, pois isto muitas vezes vai mais mais assustar todo mundo e atrapalhar do que ajudar. De qualquer forma, o TabNews é diferente, acessado por pessoas diferentes, e não somente vamos nos tornar o pedaço de internet com a maior quantidade de conteúdos em português com valor concreto para quem trabalha com programação ou tecnologia, como também teremos o repositório open source com a maior carga e fluxo de conhecimento sobre programação da "vida real", expondo o lado bom e ruim, tudo de forma respeitosamente transparente com quem participa.
E seguindo a Lei de Linus: "Dado olhos suficientes, todos os bugs são superficiais" e este evento foi mais uma prova disto. Então peço que você que está lendo isto continue a proteger o TabNews, da forma que for possível para você. E se você trabalha com segurança da informação, tanto em red team quanto blue team, sua ajuda para tentar cavucar a API do TabNews e o código fonte será extremamente valioso para toda a comunidade e teremos um orgulho eterno de reportar publicamente os seus achados 🤝
Um grande abraço a todos!