Introdução
Excessive Data Exposure, ou Exposição Excessiva de Dados em português, é uma vulnerabilidade em que uma aplicação revela mais informações do que o necessário para o usuário por meio de uma resposta de API.
Cenário Vulnerável
Considerem um cenário em que o site da loja virtual possui uma seção para que os clientes possam fazer comentários em relação aos produtos da loja. Para carregar os comentários, o site realiza a seguinte request para uma API:
GET /products/{idProduct}/comments HTTP/2Host: comments-api.company.com.brA estrutura de cada comentário, retornado pela API é a seguinte:
{ "commnets":[ { "id": 12354876, "title": "Gostei muito", "comment": "Essa nova bota ficou linda!", "author":{ "id": 481354944, "name": "Angela de Souza", "account": "angela.souza@gmail.com" } }, ... ]}Após analisar a lista retornada, devemos nos fazer a seguinte pergunta:
Por que a API retorna estas informações?
Em outras palavras, todas as informações enviadas pela API são necessárias para que o site possa carregar os comentários? O que aconteceria se um atacante acessasse o site e carregasse os comentários interceptando a resposta da API ou fizesse a requisição diretamente para a API? Como ele se beneficiaria destas informações?
Casos como este são um exemplo de Excessive Data Exposure, ou seja, quando a API recebe uma requisição para carregar um comentário ela envia várias informações referentes ao comentário e o seu autor, normalmente mais informações do que o site precisa. A API acredita que as informações serão filtradas no client side e que as informações apresentadas ao usuário serão apenas o titulo do comentário, o conteúdo dele e o nome do seu autor.
Contudo, como a API também retorna o endereço de email do autor, um atacante que intercepte esta reposta terá acesso a todas as informações retornadas pela API. Neste caso, o atacante poderia criar uma lista com os emails de todos os autores dos comentários da loja virtual.
O que será que ele poderia fazer com uma lista dessas?
Riscos
Exposição de Dados Confidenciais
Um atacante poderia obter informações pessoais e sensíveis de usuários como cpf, endereço, idade, email, credenciais e expo-las publicamente ou vende-las para parte mal intencionadas.
Exposição de Informações Uteis para Atacantes
Expor informações que um atacante poderia utilizar para ataques de phishing, enumeração de usuários do site e obtenção de acesso às contas dos usuários.
Danos à Reputação
Caso o atacante exponha publicamente as informações obtidas ou exponha o fato de que o site da loja virtual permite este tipo de exposição de informação, isto pode impactar na confiança e sensação de segurança que os clientes da loja possuem.
Repercussões Legais
A empresa pode sofrer medidas legais por órgãos reguladores devido a exposição dos dados.
Como Mitigar
Como a vulnerabilidade de Excessive Data Exposure existe justamente por que a API retorna mais informações do que o necessário para executar a ação requisitada pela aplicação, e confia que as informações excedentes serão filtradas pela no client side, existem alguns cuidados que podemos ter para evitar que esta vulnerabilidade ocorra em nossas APIs e aplicações.
- Nunca confie no client side para filtrar dados confidenciais.
- Revise as respostas da API para garantir que contenham apenas dados legítimos.
- Pergunte-se sempre “quem é o consumidor dos dados?” antes de expor um novo endpoint de API.
- Evite usar métodos genéricos como
to_json()eto_string(). Em vez disso, escolha propriedades específicas que você realmente deseja retornar. - Classifique informações confidenciais e de identificação pessoal (PII) que a sua aplicação armazena e com as quais trabalha, revisando todas as chamadas de API que retornam essas informações para ver se essas respostas representam um problema de segurança.