27 de jul. de 2025·7 min de leitura

Cliente vê dados de outra pessoa: o que fazer primeiro

Se um cliente consegue ver dados de outro cliente, contenha rápido, capture as evidências certas e envie atualizações claras enquanto corrige a causa raiz.

Cliente vê dados de outra pessoa: o que fazer primeiro

O que significa quando um cliente vê os dados de outra pessoa

Se um cliente consegue ver os dados de outra pessoa, trate como urgente. Mesmo que pareça um bug de interface, pode expor informações privadas, quebrar a confiança rapidamente e criar risco legal ou contratual (leis de privacidade, NDAs, termos empresariais).

“Dados de outra pessoa” significa qualquer informação que pertence a um usuário, conta ou empresa (tenant) diferente. Pode aparecer em lugares óbvios ou em detalhes pequenos que ainda identificam pessoas.

Exemplos incluem o:\n

  • Nome, e‑mail, endereço ou detalhes de perfil de outro usuário\n- Faturas, status de pagamento, plano de assinatura ou histórico de cobrança\n- Mensagens, tickets de suporte ou notas internas\n- Arquivos, documentos ou exports (CSV/PDF)\n- Visões só para admin como listas de usuários, logs de auditoria ou chaves de API

Uma distinção importante:\n

  • Um bug de isolamento de dados é um defeito do produto que retorna ou mostra dados para o tenant errado.\n- Uma breach significa que uma parte não autorizada realmente acessou dados (você tem evidências, ou sinais fortes, de que provavelmente aconteceu).

No início, você frequentemente não sabe qual é o caso. Aja como se a exposição fosse real até provar o contrário.

Os objetivos práticos permanecem os mesmos:\n

  1. Parar a exposição rapidamente (contenção).\n2) Entender o escopo (quem viu o quê, com que frequência e desde quando).\n3) Corrigir a causa raiz com segurança.\n4) Comunicar claramente enquanto trabalha e depois explicar o que mudou.

Contenção imediata nos primeiros 15 minutos

Trate isso como um incidente de segurança em tempo real, não como um ticket de bug normal. Seu primeiro trabalho é impedir nova exposição, mesmo que você ainda não entenda a causa.

Comece reconhecendo o relato e abrindo um log de incidente. Anote o horário exato em que recebeu, quem reportou, o que eles viram (copie as palavras deles) e quaisquer screenshots fornecidos. A partir de então, registre com timestamp toda ação e decisão.

Designe um único responsável pelo incidente. Essa pessoa não precisa escrever a correção, mas deve coordenar decisões, manter as notas e enviar atualizações para que a equipe não tome rumos diferentes.

Reduza o raio de impacto rapidamente:

  • Se suspeitar de uma funcionalidade específica (visão de admin, busca, exports, atividade recente, caixa compartilhada), desative-a ou bloqueie o endpoint.\n- Se não conseguir isolar rápido, mude para modo somente leitura ou manutenção para que clientes não disparem novas requisições que possam expor dados.

Enquanto contêm o problema, congelem mudanças arriscadas. Pause deploys, migrations e jobs em background que reescrevem dados. Evite “correções rápidas” feitas diretamente em produção até ter um panorama mais claro.

Um checklist simples de contenção:\n

  • Abra um log de incidente com timestamps e detalhes do repórter\n- Nomeie um responsável pelo incidente (e um backup)\n- Desative a funcionalidade/endpoint suspeito ou o papel afetado\n- Use modo somente leitura ou manutenção se o escopo estiver incerto\n- Pause deploys e migrations até a contenção ser confirmada

Confirmar e delimitar o problema sem espalhá-lo

Você precisa confirmar o relato rápido sem pedir ao cliente que envie mais informações sensíveis.

Peça o menor conjunto de passos que levou ao problema. Pergunte por ações, não por conteúdo privado. Detalhes úteis incluem a hora em que aconteceu, qual página apareceu e qual workspace/conta estava em uso.

Perguntas que normalmente ajudam:\n

  • Qual página ou ação mostrou os dados de outra pessoa exatamente?\n- Aconteceu uma vez ou toda vez que atualizam?\n- Eles fizeram logout e login recentemente, ou mudaram de conta/workspace?\n- Acontece em outro navegador ou no celular?\n- Aproximadamente quanta informação estava errada (um item, muitas linhas, visão inteira da conta)?

Reproduza de forma segura. Use um tenant de teste novo e um usuário com privilégios mínimos (não um admin). Se precisar de dois tenants, crie duas contas de teste limpas para não tocar nos dados reais dos clientes enquanto testa.

Depois, verifique como o problema se comporta:\n

  • Hard refresh\n- Nova sessão (incógnito)\n- Segundo dispositivo

Se o problema aparece só após um deploy, após trocar de conta, ou apenas para um papel específico, isso costuma indicar cache, tratamento de sessão ou limites de autorização.

Considere confirmado como exposição quando você conseguir reproduzir, ou quando logs mostram leituras cross-tenant (mesmo que você ainda não consiga reproduzir). Considere como suspeito se for um relato único sem evidências de suporte, mas mantenha a urgência até descartar.

O que documentar para poder corrigir e explicar

Suas notas se tornam a espinha dorsal da correção e da explicação posterior. Capture o relato exatamente antes de alguém parafraseá‑lo.

Registre:\n

  • Quem reportou e como contatá‑lo\n- Quando notou\n- Qual tela/funcionalidade estava usando\n- A descrição exata do que parecia errado

Peça evidências com cuidado. Se compartilharem um screenshot, peça para borrar nomes, e‑mails, endereços, dados de pagamento e tudo o que não seja necessário para verificar o bug. Armazene arquivos em pasta restrita e anote quem tem acesso.

Os detalhes técnicos mínimos a capturar

Você quer identificadores suficientes para reproduzir o caminho sem coletar mais dados sensíveis do que o necessário.

Capture:\n

  • Timestamps (com fuso horário): relatório recebido, primeira repro, contenção e cada mudança feita\n- ID do usuário que reportou e ID do tenant/workspace (e o outro tenant ID se conseguir identificar)\n- Request IDs/correlation IDs e identificadores de sessão\n- Endpoints/páginas afetadas, filtros e quaisquer query params incomuns\n- Versão do app ou commit hash e horário do último deploy

Puxe snapshots de logs cedo, porque alguns sistemas giram logs. Salve logs de autenticação relevantes, logs do gateway/load balancer, logs da aplicação e consultas ao banco de dados para a janela de tempo. Anote de onde vieram e por quanto tempo o sistema de origem os mantém.

Mantenha uma linha do tempo contínua das ações de contenção (feature flags, acessos desabilitados, caches purgados, rollback iniciado) e quem fez cada etapa.

Triagem rápida: causas comuns para testar primeiro

Eliminate session confusion
We diagnose token and cookie mix-ups that cause wrong-user data to appear.

A maioria dos vazamentos cross-tenant vem de um pequeno conjunto de modos de falha. Comece pelo mais simples e avance para os mais sutis.

Uma ordem apertada de verificações

  1. Autorização e filtragem por tenant\n Procure leituras que carregam registros por id sem checar propriedade, ou endpoints que esquecem de aplicar filtros de tenant/workspace. Fique atento a caminhos estilo IDOR como /invoices/123 onde o servidor não verifica se o registro pertence ao tenant atual.

  2. Confusões de sessão\n Verifique se cookies e tokens estão escopados corretamente (domain, path, environment). Atente para contas demo compartilhadas, chaves de assinatura reutilizadas entre ambientes ou um proxy que remove cabeçalhos de auth.

  3. Erros de cache\n Cheque cabeçalhos de cache do CDN e do servidor. Um Vary faltando em cabeçalhos de auth, ou cache de HTML/API que não deveria ser compartilhado, pode fazer o usuário A receber uma resposta destinada ao usuário B. Inspecione também o estado do cliente: local storage obsoleto pode mostrar dados antigos após logout.

  4. Bugs em consultas ao banco de dados\n Revise mudanças recentes em queries, joins e escopos padrão. Problemas comuns incluem joins que removem a restrição de tenant, registros soft-deleted aparecendo nos resultados e queries “fallback” quando um filtro está vazio.

  5. Jobs em background e anexos\n Confirme que exports, PDFs, e‑mails e webhooks são construídos a partir do contexto correto do tenant. Workers em fila frequentemente rodam sem os mesmos checks escopados à requisição.

Após cada verificação, responda a uma pergunta: os dados errados vêm do servidor, ou é a UI mostrando algo errado? Capturar o corpo de resposta da API e os headers geralmente esclarece isso.

Mitigações de curto prazo enquanto a correção é construída

Seu objetivo é parar nova exposição rapidamente, mesmo antes de ter a causa raiz completa.

Reduzir o acesso enquanto investiga

Se suspeitar de confusão de sessões ou tokens, forçar um login limpo frequentemente interrompe o vazamento.

Movimentos de curto prazo comuns:\n

  • Revogar sessões ativas e exigir reautenticação (para todos os usuários, ou pelo menos para os tenants afetados).\n- Desativar temporariamente troca de conta, impersonation e recursos “view as” de admin.\n- Pausar exports e downloads (CSV, PDF) e restringir telas admin que mostram muitos registros.\n- Colocar páginas sensíveis atrás de um gate de manutenção temporário se não confiar na isolação ainda.\n- Adicionar rate limits para reduzir a extração em massa enquanto investiga.

Informe o suporte sobre o que mudou para que possam explicar por que usuários estão sendo deslogados ou porque exports foram pausados.

Adicionar guardrails temporários

Adicione checagens server-side que sejam difíceis de contornar. Valide propriedade do tenant para cada requisição, não apenas no primeiro carregamento da página.

Considere também desabilitar cache para endpoints e páginas sensíveis (incluindo cache de CDN ou reverse-proxy). Se não puder desabilitar totalmente, reduza o tempo de cache e garanta que a chave de cache inclua contexto de tenant e usuário.

Por fim, falhe fechado: se o tenant id estiver ausente, ambíguo ou incompatível, retorne um erro em vez de tentar adivinhar.

Como comunicar com o cliente que reportou

Responda rapidamente, mesmo que ainda não tenha respostas. Silêncio parece que você está ignorando um problema sério.

Use uma mensagem calma e direta: recebemos o relato, estamos tratando como urgente e estamos tomando medidas para evitar nova exposição enquanto investigamos. Não discuta, especule ou culpabilize o ambiente do cliente.

Peça o mínimo de detalhes que ajudem a reproduzir:\n

  • Qual página ou funcionalidade mostrou os dados errados (e o que esperavam)\n- A hora aproximada (com fuso horário)\n- O workspace/conta em que estavam logados\n- Se se repete após atualizar, logout ou em janela privada\n- Um screenshot com campos sensíveis borrados (só se puderem fazer isso com segurança)

Defina uma cadência de atualizações que consiga cumprir. Um padrão razoável é: “Vamos atualizar em 2 a 4 horas, mesmo que ainda estejamos investigando.”

Uma mensagem curta que pode ser reutilizada:\n “Obrigado por avisar. Estamos investigando com urgência e já iniciamos passos de contenção para evitar nova exposição. Por favor, informe a página/funcionalidade, hora aproximada e o workspace em que você estava. Enviaremos uma atualização em até 2 horas e depois a cada poucas horas até resolver.”

Quando tiver uma mitigação ou correção, faça um follow‑up em linguagem simples:\n

  • O que foi encontrado\n- O que foi alterado (ou temporariamente desativado)\n- Que dados podem ter sido visíveis e por quanto tempo (se souber)\n- O que será feito em seguida (monitoramento, checagens adicionais)

Como comunicar internamente e para outros clientes

Server-side tenant checks
We verify every route enforces tenant ownership, not just the UI.

Escolha um único responsável pela mensagem (geralmente o líder do incidente). Encaminhe atualizações por essa pessoa para que suporte, vendas e engenharia não contem histórias diferentes.

Use uma linha do tempo simples em cada atualização para que as pessoas escaneiem rapidamente: descoberto, contido, corrigindo, verificado. Use um único fuso horário.

Seja explícito sobre o que vocês sabem vs o que ainda estão confirmando. Não chute. Aponte evidências (logs, screenshots, endpoints específicos) e diga o que será checado a seguir.

Ao descrever impacto potencial, nomeie tipos de dados, não categorias vagas como “dados pessoais”. Exemplos: e‑mail da conta, nome, nome da empresa, PDF de fatura, últimos 4 dígitos do cartão, endereço de entrega, texto de tickets de suporte, arquivos enviados. Só diga “nenhuma senha foi exposta” se tiver prova.

Um template simples de atualização interna:\n

  • Status: descoberto em [hora], contido em [hora], correção em andamento, verificação em progresso\n- O que aconteceu: 1–2 frases\n- Dados potenciais envolvidos: campos e telas específicos\n- O que sabemos / o que estamos confirmando: duas linhas curtas\n- Próxima atualização: um horário real

Antes de notificar outros clientes, alinhe um gatilho claro (por exemplo: acesso cross-tenant confirmado, exportação/download confirmado, ou evidência de que durou além de uma sessão única).

Cenário de exemplo: dados de tenant misturados após um deploy

Um ticket de suporte chega numa sexta-feira à tarde: um cliente diz que abriu a página de Invoices e viu o número da fatura, valor e endereço de cobrança de outra empresa.

A equipe trata como possível exposição de dados e contém antes de depurar:

  • Desativam a página de Invoices com uma feature flag.\n- Desligam a camada de cache para respostas de invoice para evitar servir conteúdo em cache incorreto.\n- Revogam sessões ativas para contas que usaram billing recentemente, forçando reautenticação.

Uma vez contido, reproduzem o problema com dois tenants de teste e verificam logs de acesso para o endpoint de invoice. O padrão fica claro: uma rota de API retorna IDs de tenant misturados, e só acontece após o último deploy.

Um diff da mudança recente mostra a causa raiz. Um refactor moveu lógica de query para um helper que deixou de receber tenantId, então um endpoint parou de aplicar o filtro de tenant.

Eles enviam um hotfix que:\n

  • Adiciona checagens explícitas de autorização por tenant no endpoint\n- Acrescenta testes que executam a mesma requisição entre várias contas para confirmar isolamento\n- Falha fechado se o contexto de tenant estiver ausente

Em seguida, fazem follow‑up com o cliente em linguagem clara: o que aconteceu, que dados poderiam ter sido visíveis, o que interrompeu o problema e o que impede repetição.

Erros comuns que pioram incidentes de exposição de dados

Find the real blast radius
We help trace logs, request IDs, and timelines to understand what was exposed.

Pequenas decisões na primeira hora podem aumentar o impacto e complicar a limpeza.

Erro 1: Fazer muitas mudanças sem um registro claro

Sob pressão, é tentador “tentar algumas coisas” até o problema desaparecer. Aí você perde o rastro do que realmente ajudou e pode destruir evidências necessárias depois.

Anote cada mudança: o que foi alterado, quem fez, quando e por quê. Trate rollbacks, toggles de feature flag e mudanças de configuração como passos formais.

Erro 2: Deixar dados sensíveis vazarem durante a investigação

Times de suporte às vezes pedem screenshots, gravações de tela ou arquivos exportados. Isso pode espalhar dados privados ainda mais.

Peça o mínimo: timestamps, nome da página e passos realizados. Se um screenshot for inevitável, instruir o cliente a borrar nomes, e‑mails, tokens e tudo o que não for necessário para reproduzir.

Outros erros a evitar:\n

  • Postar atualizações públicas antes de confirmar o básico (quem é afetado, que dados, se o acesso é real).\n- Assumir que é “só a UI” sem verificar se o backend aplica checagens de tenant.\n- Testar a correção apenas com uma conta admin e perder outros papéis ou caminhos de API.\n- Tratar o primeiro relato como o único caso em vez de checar logs por acessos semelhantes.

Uma armadilha comum: um patch no frontend impede que a UI mostre dados misturados, então alguém declara o problema resolvido. Depois descobre‑se que a API ainda permite leituras cross-tenant por requisições diretas. Confirme sempre o isolamento no servidor, abrangendo papéis e tenants.

Checklist rápido e próximos passos práticos

Trate “consigo ver dados de outro cliente” como emergência. Pare a exposição primeiro, depois junte fatos suficientes para consertar e explicar claramente.

Um checklist prático, em ordem:\n

  • Conter (agora): Desative a funcionalidade/endpoint que mostra dados errados, desligue caches arriscados e pause deploys/mudanças de config até a contenção ser confirmada.\n- Delimitar (próximos 30–60 minutos): Reproduzir de forma segura (contas de teste), identificar telas/APIs afetadas e estimar a janela de tempo (desde o último deploy/migration/change).\n- Preservar evidências: Salvar request IDs, timestamps, user IDs, tenant IDs e logs relevantes. Redigir screenshots antes de compartilhar internamente.\n- Corrigir com segurança: Adicionar checagens explícitas de tenant, consertar chaves de cache e adicionar testes automatizados que falhem se limites de tenant forem cruzados.\n- Comunicar: Reconhecer o relato, manter uma cadência de atualizações que você cumpra e documentar o que aconteceu, quem foi afetado e o que mudou.

Mantenha um único documento de incidente desde o minuto um. Inclua quem percebeu, como foi contido, o que os logs mostraram e o commit ou mudança de configuração que corrigiu tudo.

Se você estiver lidando com um protótipo gerado por IA difícil de confiar sob pressão (especialmente em torno de auth, checagens de tenant e cache), FixMyMess (fixmymess.ai) pode rodar uma auditoria de código gratuita para identificar o bug de isolamento e ajudar a reparar e endurecer o app rapidamente, com a maioria dos projetos concluídos em 48–72 horas.

Perguntas Frequentes

Is seeing another customer’s data always an emergency?

Trate imediatamente como um incidente de segurança potencial. Mesmo que pareça só um problema de interface, assuma que houve exposição até ter provas de que não houve acesso cross-tenant.

What’s the difference between a data isolation bug and a breach?

Um bug de isolamento de dados é um defeito no produto que retorna ou mostra dados do inquilino errado. Uma violação (breach) significa que uma parte não autorizada acessou os dados, com base em evidências ou sinais fortes. No início, muitas vezes você não saberá qual é o caso.

What should we do in the first 15 minutes?

Priorize contenção: desative a funcionalidade ou endpoint suspeito e, se não conseguir isolar rápido, mude para modo somente leitura ou manutenção. Pause deploys e mudanças arriscadas até ter confiança de que a exposição foi interrompida.

What should we document from the start?

Abra um registro de incidente e registre tudo com timestamp: quando o relatório chegou, o que o usuário viu (nas palavras dele) e cada ação tomada. Designe um único responsável pelo incidente para coordenar decisões e atualizações.

How do we ask the customer for details without collecting more sensitive data?

Peça ações e contexto, não conteúdo sensível: a página/funcionalidade, hora aproximada com fuso horário, qual workspace eles estavam usando, e se repete após atualizar ou relogar. Se precisar de screenshot, peça para borrar nomes, e‑mails, endereços, dados de pagamento e qualquer coisa desnecessária para reproduzir.

How can we reproduce safely without touching real customer data?

Reproduza usando tenants de teste limpos e usuários com privilégios mínimos, não contas reais de clientes. Compare comportamento após hard refresh, em sessão nova (incógnito) e em outro dispositivo para entender se é cache, sessão ou autorização.

What are the most common causes of cross-tenant data leaks?

Comece pela autorização e filtros de tenant: verifique endpoints que carregam registros por id sem checar propriedade. Depois cheque mix-ups de sessão, cabeçalhos e chaves de cache, alterações em consultas de banco de dados que removem o filtro de tenant e jobs em background que executam fora do contexto da requisição.

What short-term mitigations can reduce risk while we build a proper fix?

Forçar um login limpo revogando sessions ajuda se suspeitar de confusão de tokens. Desative temporariamente troca de conta, impersonation, exports/downloads e telas admin que mostram muitos registros; considere desativar cache em endpoints sensíveis para evitar respostas compartilhadas.

What’s the best way to reply to the reporting customer?

Responda rápido e com calma: confirme que o caso é tratado com urgência e que medidas de contenção estão em curso. Defina uma cadência de atualizações que você consiga cumprir e evite especular; compartilhe o que sabe, o que vai checar a seguir e o que foi mudado quando tiver uma mitigação ou correção.

When should we bring in outside help like FixMyMess?

Use um único responsável pela mensagem e uma linha do tempo simples para alinhar suporte, vendas e engenharia. Se o código veio de um protótipo gerado por IA com controles de auth e cache fracos, FixMyMess (fixmymess.ai) pode executar uma auditoria de código gratuita e ajudar a reparar e endurecer a aplicação, com a maioria dos projetos concluídos em 48–72 horas.