Introdução
Section titled “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
Section titled “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
Section titled “Riscos”Exposição de Dados Confidenciais
Section titled “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
Section titled “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
Section titled “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
Section titled “Repercussões Legais”A empresa pode sofrer medidas legais por órgãos reguladores devido a exposição dos dados.
Como Mitigar
Section titled “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.