#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:
| # | Falha | Explicação simples |
|---|---|---|
| 1 | Header sem validação | O servidor aceita qualquer texto no lugar do nome da organização, sem verificar se é um nome válido |
| 2 | Concatenação direta no SQL | O valor do header é colado dentro do comando SQL sem nenhum tratamento |
| 3 | Múltiplos pontos de entrada | 10+ 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ço | O que muda |
|---|---|
| Todos (via biblioteca) | GetSchemaName() passa a validar o header com regex + whitelist |
| Cart, Checkout, Jobs, BFF | Já usam IUserProvider.GetSchemaName() — protegidos automaticamente |
| Product, Store, Backoffice, Integration, Message, Payments-Reports, Showcase | Precisam trocar leitura direta do header por IUserProvider.GetSchemaName() |
O que NÃO muda
- App Flutter continua enviando
api-company-target: arezzonormalmente - 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
| Item | Motivo | Quando |
|---|---|---|
| Header sobrescrever permissão do token JWT | Vulnerabilidade distinta | Card #30 |
| Suporte a novas organizações (além da Arezzo) | Whitelist será expandido quando necessário | Quando novas organizações forem adicionadas |
| Validação de schema vindo de webhooks de pagamento | Input externo, mecanismo diferente | Card 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.