Postmortem: todas as sessões foram invalidadas por conta do endpoint /thumbnail
Turma, venho aqui realizar o primeiro Postmortem
do TabNews e explicar em detalhes porque todas as sessões foram invalidadas.
Resumo
Ontem 21/07/22 às 21:53 (Horário de Brasília) foi feito o deploy de um novo endpoint na API que gera thumbnails customizadas de cada publicação aqui do TabNews. Infelizmente, este endpoint estava configurado para realizar um cache de 60 segundos e estava guardando consigo o token de sessão do usuário.
Felizmente, esta falha só conseguiria ser explorada se o usuário visitasse o endpoint que gera a thumbnail manualmente, onde sem isso, não havia nenhum impacto ao acessar o TabNews, ou até mesmo compartilhar as publicações.
Como o problema foi descoberto
O usuário ErickCReis criou uma issue reportando que estava logado na conta de outro usuário, e dentro desta mesma issue o usuário GuiLra reportou também que estava conectado na conta do exato mesmo usuário.
O usuário em questão era o aprendendofelipe e ao investigar as informações nos logs e no banco de dados, de fato os dois usuários estavam compartilhando o mesmo cookie de sessão do aprendendofelipe.
Após as informações enviadas por eles, notamos que isto aconteceu, pois o aprendendofelipe manualmente acessou as URLs de thumbnails que eu publiquei nessa issue e em algum momento, ambos ErickCReis e GuiLra acessaram também, recebendo da CDN o cabeçalho Set-Cookie
que estava cacheado com a sessão do aprendendofelipe.
O que foi feito
- Consertamos o bug removendo o cache por completo da rota de thumbnail através deste PR, e iremos fazer outras implementações para dificultar que isso se repita.
- Criamos um outro PR reproduzindo do zero o bug para nos certificarmos que estamos sob controle da situação.
- Todos os caches da CDN foram invalidados e todos os snapshots de deploys passados tanto em ambiente de Produção quanto Homologação relacionados a esse problema foram removidos.
- Apesar da abrangência do impacto ser pequeno (inicialmente apenas as pessoas que manualmente clicaram nos links daquela issue), invalidamos todas as sessões de todos os usuários por precaução.
- Você pode fazer o login novamente ou recuperar a sua senha caso tenha esquecido, o sistema está se comportanto como anteriormente.
- Todos os endpoints da API que utilizam
Cache-Control
foram revisados a procura da mesma falha e em nenhum deles foi identificado o mesmo comportamento. O/thumbnail
era o único endpoint que estava ao mesmo tempo injetando a sessão do usuário e fazendo o cache. - Além do primeiro PR desta lista remover o cache do endpoint
/thumbnail
, este PR faz parar a injeção da sessão do usuário, tornando o endpoint 100% genérico. - Por fim, nada no core do sistema de autentização ou autorização foi impactado.
Pesquisa
Você pode acompanhar toda pesquisa realizada com todas as informações através dessa issue.
Agradecimentos
Muito obrigado a ErickCReis, GuiLra e aprendendofelipe por toda ajuda na pesquisa, vocês são pessoas sensacionais 🤝 🤝 🤝 🤝 🤝
No mais, qualquer dúvida ou qualquer informação, estou de plantão aqui no TabNews, no repositório do TabNews e no email [email protected]
.
⚠️ O repositório Open Source do TabNews ainda está em Modo Privado. Caso queira receber um convite para participar, leia esta publicação.