Skip to main content

#07 SQL Injection — Resumo Executivo

Severidade: Crítica O que é: Um atacante consegue executar comandos SQL no banco de dados injetando código malicioso em um header HTTP comum a todas as requisições. Pode roubar dados de todas as organizações, alterar pedidos ou destruir tabelas inteiras.


O Problema

O que acontece hoje

Toda requisição que o app faz carrega um header com o nome da organização (api-company-target: arezzo). Isso diz ao servidor "quero acessar os dados da Arezzo". Mas hoje o servidor confia cegamente nesse valor — se alguém mandar comandos SQL no lugar do nome da organização, o servidor executa.

O que está em risco


Por Que Isso Acontece

3 falhas encadeadas:

#FalhaExplicação simples
1Header sem validaçãoO servidor aceita qualquer texto no lugar do nome da organização, sem verificar se é um nome válido
2Concatenação direta no SQLO valor do header é colado dentro do comando SQL sem nenhum tratamento
3Múltiplos pontos de entrada10+ serviços diferentes leem esse header e fazem a mesma coisa — uma falha, vários alvos

Onde está a falha


A Solução

Onde a correção acontece: em uma biblioteca compartilhada por todos os serviços. Uma única alteração protege todo o sistema.

Três barreiras de proteção

O que muda em cada serviço

ServiçoO que muda
Todos (via biblioteca)GetSchemaName() passa a validar o header com regex + whitelist
Cart, Checkout, Jobs, BFFJá usam IUserProvider.GetSchemaName() — protegidos automaticamente
Product, Store, Backoffice, Integration, Message, Payments-Reports, ShowcasePrecisam trocar leitura direta do header por IUserProvider.GetSchemaName()

O que NÃO muda

  • App Flutter continua enviando api-company-target: arezzo normalmente
  • BFF continua repassando o header para downstream
  • Funcionamento normal para chamadas legítimas
  • Performance: regex compilado + HashSet lookup = sub-milissegundo

Verificação de Segurança


O Que NÃO Entra Neste Fix

ItemMotivoQuando
Header sobrescrever permissão do token JWTVulnerabilidade distintaCard #30
Suporte a novas organizações (além da Arezzo)Whitelist será expandido quando necessárioQuando novas organizações forem adicionadas
Validação de schema vindo de webhooks de pagamentoInput externo, mecanismo diferenteCard separado

Impacto

  • Vendedores e lojistas: nenhum impacto. O app continua funcionando igual.
  • Novas organizações: será necessário adicionar o nome da nova organização na whitelist (uma linha de código).
  • Segurança: fecha a vulnerabilidade mais abrangente do relatório de pentest — 10+ serviços protegidos com uma única alteração.