#08 Vazamento Cross-Tenant — Resumo Executivo
Severidade: Crítica O que é: Um atacante consegue acessar a lista de clientes bloqueados por fraude de qualquer loja — com CPF, nome completo e celular — e ainda remover suspeitos da blacklist. Basta ter a chave de API (vazada) e escolher qual loja quer atacar.
O Problema
O que o atacante consegue fazer
Dados expostos por cliente
Três operações sem controle
O que está em risco
Violação LGPD: dados sensíveis (qualificação como fraudador) expostos a atacante anônimo.
Bypass do sistema de fraude: o atacante remove suspeitos legítimos da blacklist para que fraudadores efetuem compras sem serem barrados.
Múltiplas lojas: mesma chave acessa schemas diferentes — Arezzo, Schutz, Anacapri.
Por Que Isso Acontece
A falha: o servidor confia que se a requisição chegou com a chave de API correta, o caller é legítimo. Mas a chave vazou. Sem exigir que o usuário esteja logado (JWT), qualquer pessoa com a chave acessa os dados.
A Solução
Exigir login (JWT) em todos os endpoints de pagamento usados pelo app e portal.
O que muda no servidor
| Endpoint | Antes | Depois |
|---|---|---|
GET /api/payment/profile-fraud | Sem autenticação | Exige login (JWT) |
POST /api/payment/profile-fraud | Sem autenticação | Exige login (JWT) |
DELETE /api/payment/profile-fraud | Sem autenticação | Exige login (JWT) |
GET /api/payment/history/{id} | Sem autenticação | Exige login (JWT) |
POST /api/payment/v2/payment | Só header de loja | Exige login (JWT) |
GET /api/payment/v2/{id} | Só header de loja | Exige login (JWT) |
GET /api/payment/v2/{id}/installments | Só header de loja | Exige login (JWT) |
GET /api/payment/v2/reasons/{score} | Só header de loja | Exige login (JWT) |
POST /api/payment/v2/nps | Só header de loja | Exige login (JWT) |
Loja controlada pelo login, não pelo header
O que NÃO muda
Verificação de Segurança
O Que NÃO Entra Neste Fix
| Item | Motivo | Quando |
|---|---|---|
| Endpoints de ecommerce (loja virtual pública) | Cliente final não tem login no app | Card separado |
| Endpoints de webhook (gateways de pagamento) | Chamados por sistemas externos (Braspag, ClearSale) | Card separado |
| Rotação da chave de API vazada | Já requerido como ação imediata | Imediato |
Header api-company-target sobrescrever claim do JWT | Vulnerabilidade distinta | Card #30 |
Impacto
- Vendedores e portal: nenhum impacto. App e portal já enviam token de login em todas as requisições.
- Clientes: dados de fraude protegidos — apenas usuários autenticados do portal acessam.
- Segurança: fecha acesso anônimo a dados sensíveis de fraude e impede remoção não autorizada da blacklist.