Falhas de Autorização acontecem quando não verificamos adequadamente se o usuário logado pode ou não realizar determinada ação sobre um recurso.
Esta vulnerabilidade (relacionada a Broken Access Control) está no Top 1 do OWASP Top 10.
Cenários Vulneráveis
Normalmente encontramos problemas de autorização quando:
- Um usuário não poderia acessar uma informação (como fazer request para uma api ou acessar um documento) e mesmo assim consegue.
- Quando um usuário logado poderia fazer apenas alguma ação em específico (como acesso de leitura) mas acaba por também poder fazer acessos de outros tipos (como atualizar, criar, deletar, administrar).
- Quando definimos regras para acesso à alguma funcionalidade (como a pesquisa de clientes) mas não verificamos o conteúdo a ser visualizado (digamos, os dados do cliente em si) e permitimos acessos a conteúdo sigiloso que não deveria estar sendo exposto.
Riscos
Ao não validarmos corretamente as permissões de acesso a informação ou funcionalidades, corremos risco de:
- Termos nossos dados vazados por acesso indevido a dados pessoais e sensíveis.
- Ter corrompida a integridade dos dados, uma vez que alguém pode ter acesso a uma funcionalidade na qual não deveria, podendo modificar as informações do sistema.
- Comprometer os sistemas como um todo através de uma conta ou serviço com acesso indevido a nossa infraestrutura.
Como mitigar
Algumas práticas comuns para evitarmos problemas com relação a Autorização são:
- Definir permissões a nível de funcionalidade, com o descritivo do tipo de acesso (exemplo:
purchases:read). Caso não seja possível neste nível de granularidade, definir pelo menosPerfisde acesso (exemplo:store:customer) e garantir que cada usuário logado tenha o perfil / permissões corretas associadas a ele. - Garantir que todas as operações críticas necessitem de um perfil ou permissão em específico para ser executada.
- Para nós do time de TI, garantir que tenhamos apenas as permissões necessárias para executar nossas atividades.
- Se não preciso criar infra na AWS, que eu não tenha credenciais para isso.
- Se eu preciso fazer consultas ao banco de dados apenas para ler informações, que eu tenha acessos apenas a este tipo de operação.
- Se eu preciso de alguma permissão crítica (como ver dados PII de clientes, ou corrigir algo no ambiente de produção), que esta permissão seja criada nominalmente e dure apenas o tempo necessário para finalizar a atividade.
Para se aprofundar, pode consultar o OWASP Application Security Verification Standard - Access Control