Skip to main content

#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

EndpointAntesDepois
GET /api/payment/profile-fraudSem autenticaçãoExige login (JWT)
POST /api/payment/profile-fraudSem autenticaçãoExige login (JWT)
DELETE /api/payment/profile-fraudSem autenticaçãoExige login (JWT)
GET /api/payment/history/{id}Sem autenticaçãoExige login (JWT)
POST /api/payment/v2/paymentSó header de lojaExige login (JWT)
GET /api/payment/v2/{id}Só header de lojaExige login (JWT)
GET /api/payment/v2/{id}/installmentsSó header de lojaExige login (JWT)
GET /api/payment/v2/reasons/{score}Só header de lojaExige login (JWT)
POST /api/payment/v2/npsSó header de lojaExige 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

ItemMotivoQuando
Endpoints de ecommerce (loja virtual pública)Cliente final não tem login no appCard separado
Endpoints de webhook (gateways de pagamento)Chamados por sistemas externos (Braspag, ClearSale)Card separado
Rotação da chave de API vazadaJá requerido como ação imediataImediato
Header api-company-target sobrescrever claim do JWTVulnerabilidade distintaCard #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.