# Excessive Data Exposure

## **🔍 Fundamentos**

### **O que é Excessive Data Exposure?**

A **Exposição Excessiva de Dados** (antigamente API3:2019, agora evoluída para API3:2023 - *Broken Object Property Level Authorization*) ocorre quando uma API retorna mais informações do que o necessário para a funcionalidade em questão, confiando que o cliente (navegador ou aplicativo móvel) filtrará esses dados antes de exibi-los ao usuário.

### **Por que acontece?**

Muitas vezes, desenvolvedores utilizam métodos genéricos como `SELECT *` ou simplesmente serializam o objeto inteiro do banco de dados (ex: `return User.all()`) para a resposta JSON, por ser mais rápido e fácil do que criar estruturas de dados específicas para cada tela.

## **🏗️ O Princípio da Falha**

O fluxo da vulnerabilidade geralmente segue este padrão:

1. **O Desenvolvedor** envia o objeto completo (ex: Perfil do Usuário contendo Telefone, CPF, Endereço e Cargo).
2. **O Frontend** recebe o JSON, mas a interface só mostra o "Nome" e a "Foto".
3. **O Atacante** intercepta a resposta HTTP e lê todos os dados sensíveis que não deveriam estar ali.

## **⚖️ Diferença entre Excessive Data Exposure e BOLA**

| Vulnerabilidade                    | Foco               | Problema                                                                                              |
| ---------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------- |
| **BOLA (API1)**                    | Acesso ao Objeto   | Eu consigo acessar dados de *outro* usuário mudando o ID.                                             |
| **Excessive Data Exposure (API3)** | Conteúdo do Objeto | Eu tenho permissão para ver o objeto, mas ele contém *propriedades* sensíveis que eu não deveria ver. |

## **🔧 Técnicas de Exploração**

### **1. Inspeção de Tráfego**

A técnica mais simples e eficaz. Use um proxy interceptador (Burp Suite, OWASP ZAP ou as ferramentas de desenvolvedor do navegador) para analisar as respostas JSON de cada endpoint.

### **2. Análise de Respostas JSON**

Procure por campos comuns que costumam ser expostos inadvertidamente:

* `isAdmin`, `role`, `permissions`
* `password_hash`, `salt`
* `ssn`, `cpf`, `phone_number`
* `home_address`, `gps_location`
* `internal_id`, `created_at`, `last_login_ip`

### **3. Exploração de Endpoints de Listagem**

Endpoints que listam múltiplos itens (ex: `/api/users/`, `/api/products/`) são os mais propensos a essa falha, pois muitas vezes reutilizam o modelo completo em vez de uma versão resumida para listas.

## **🚀 Cenários de Exploração Prática**

### **Cenário A: Aplicativo de Encontros**

O app mostra perfis de usuários próximos. A interface exibe: *Nome, Idade e Hobby*.

Ao interceptar a resposta da API `/api/v1/users/nearby`, o atacante descobre que o JSON contém:

```json
{
  "id": 5432,
  "name": "João",
  "age": 28,
  "last_location": {
    "lat": -23.55052,
    "long": -46.63330
  },
  "exact_address": "Rua X, Número 100, Apto 22",
  "private_email": "joao_secreto@email.com"
}
```

**Impacto:** Stalking e invasão de privacidade.

### **Cenário B: E-commerce e Pedidos**

Um usuário comum acessa seus próprios pedidos através de `/api/orders/555`. A resposta inclui detalhes do vendedor que não estão na tela:

```json
{
  "order_id": 555,
  "status": "shipped",
  "vendor_details": {
    "name": "Loja Tech",
    "internal_rating": 2.5,
    "is_blacklisted": true,
    "commission_rate": 0.15
  }
}
```

**Impacto:** Fuga de informação competitiva e lógica de negócio.

## **🔍 Detecção e Ferramentas**

### **1. Burp Suite**

Utilize a aba **Target** para analisar o histórico e as propriedades dos JSONs. Extensões como **"JSON Beautifier"** ajudam na leitura.

### **2. Ferramentas de Linting de API**

Ferramentas que analisam a definição da API (Swagger/OpenAPI) podem alertar se um esquema retorna campos marcados como sensíveis em endpoints públicos.

### **3. Escaneamento Automatizado**

Scanners modernos de DAST (Dynamic Application Security Testing) procuram por padrões de PII (Personally Identifiable Information) como números de cartão de crédito e formatos de documentos nas respostas.

## **🛡️ Mitigação e Prevenção**

A regra de ouro é: **Nunca confie no cliente para filtrar dados.**

{% stepper %}
{% step %}

### Implemente DTOs (Data Transfer Objects)

Nunca retorne o objeto diretamente do banco de dados (Modelo). Crie uma classe intermediária que contenha apenas os campos estritamente necessários para aquela visualização.
{% endstep %}

{% step %}

### Filtragem baseada em Projeção

Se estiver usando um ORM ou banco de dados moderno, utilize projeções para selecionar apenas os campos desejados:

```javascript
// Exemplo em Node.js com Prisma
const user = await prisma.user.findUnique({
  where: { id: userId },
  select: { name: true, profilePic: true } // Não seleciona 'email' ou 'address'
});
```

{% endstep %}

{% step %}

### Auditoria de Esquemas de Resposta

Mantenha uma lista branca (allow-list) das propriedades que cada endpoint da API pode retornar. Revise essa lista sempre que o modelo de dados for alterado.
{% endstep %}

{% step %}

### Desabilite Respostas de Depuração

Certifique-se de que, em produção, erros e respostas não incluam stack traces ou dumps de objetos internos que possam expor a estrutura do banco de dados.
{% endstep %}
{% endstepper %}

> A Exposição Excessiva de Dados é uma das falhas mais comuns e "preguiçosas" em APIs modernas. Embora pareça inofensiva inicialmente, ela fornece o "mapa da mina" para que atacantes encontrem vetores de escalação de privilégios e IDORs em outras partes do sistema.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/tecnicas/web/back-end/apis/excessive-data-exposure.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
