Skip to content

Excessive Data Exposure

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/2
Host: comments-api.company.com.br

A 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() e to_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.

Referências