# APIs

**API (Interface de Programação de Aplicações)** é um ponto de comunicação entre sistemas — permite que diferentes softwares conversem entre si de forma padronizada.

```
Cliente (Front-end, App, Outra API) → API → Servidor / Banco de Dados
                                          ↓
                                    Resposta (JSON, XML, etc.)
```

#### APIs são onipresentes

| Onde você usa API     | Exemplo                                    |
| --------------------- | ------------------------------------------ |
| **Aplicações web**    | Front-end se comunica com back-end via API |
| **Aplicações mobile** | App busca dados do servidor via API        |
| **Integrações**       | Sistema A conversa com Sistema B           |
| **Microserviços**     | Serviços internos se comunicam             |
| **Terceiros**         | "Login com Google", pagamentos, maps       |

#### Formatos comuns de API

| Formato       | Descrição                                                                 |
| ------------- | ------------------------------------------------------------------------- |
| **REST**      | Mais comum. Usa HTTP, URLs como recursos, verbos (GET, POST, PUT, DELETE) |
| **GraphQL**   | Cliente define exatamente quais dados quer (mais flexível)                |
| **SOAP**      | Mais antigo, XML, padrão corporativo                                      |
| **WebSocket** | Comunicação bidirecional em tempo real                                    |

> *"APIs são os canos que conectam a encanação da internet."*

***

### ⚠️ Por que APIs são alvos frequentes?

APIs são **projetadas para serem acessadas por programas** — não por humanos. Isso significa:

* 🔴 **Mais expostas** que interfaces web tradicionais
* 🔴 **Menos monitoradas** que interfaces de usuário
* 🔴 **Automatizáveis** (atacantes podem scriptar ataques)
* 🔴 **Documentação pública** (muitas vezes revela estrutura interna)
* 🔴 **Esquecem de implementar controles de acesso**

> *"Uma API sem segurança é uma porta aberta para o back-end."*

***

### 📋 Vulnerabilidades de API (Neste Diretório)

Este diretório documenta as principais falhas que afetam APIs, baseadas no **OWASP API Security Top 10**.

| Vulnerabilidade                                | Descrição Rápida                                                  |
| ---------------------------------------------- | ----------------------------------------------------------------- |
| **BFLA (Broken Function Level Authorization)** | Usuário acessa funções que não deveria (admin, moderação, etc.)   |
| **BOLA (Broken Object Level Authorization)**   | Usuário acessa objetos (dados) de outros usuários                 |
| **Broken User Authentication**                 | Falhas em login, tokens, sessão, recuperação de senha             |
| **Command or Code Injection**                  | Injeção de comandos ou código malicioso na API                    |
| **Excessive Data Exposure**                    | API retorna mais dados do que o cliente precisa (dados sensíveis) |
| **GraphQL Injection**                          | Injeção em consultas GraphQL (esquemas, argumentos, introspecção) |
| **Improper Inventory Management**              | APIs esquecidas, versões antigas, endpoints não documentados      |
| **Lack of Resources & Rate Limiting**          | Ausência de limites (DDoS, brute force, exaustão de recursos)     |
| **Mass Assignment**                            | Cliente envia campos extras que não deveria (ex: `is_admin=true`) |
| **Security Misconfiguration**                  | Configurações inseguras (CORS, headers, TLS, logs)                |
| **Unrestricted Access to Business Flows**      | Automação de fluxos de negócio sem restrição                      |
| **Unsafe Consumption of APIs**                 | Consumo inseguro de APIs de terceiros                             |

***

### 🧠 Resumo Rápido por Categoria

#### 🔐 Autorização e Autenticação

| Vulnerabilidade                | O que acontece                                                                                        |
| ------------------------------ | ----------------------------------------------------------------------------------------------------- |
| **BOLA (IDOR para APIs)**      | `GET /api/user/123` → usuário 123 consegue acessar `/api/user/124`                                    |
| **BFLA**                       | `GET /api/user/profile` (normal) → `POST /api/admin/deleteUser` (admin) usuário comum consegue chamar |
| **Broken User Authentication** | Tokens JWT fracos, sessões previsíveis, falta de MFA                                                  |

> O atacante assume identidade alheia ou executa ações privilegiadas.

#### 📤 Exposição de Dados

| Vulnerabilidade             | O que acontece                                                                                        |
| --------------------------- | ----------------------------------------------------------------------------------------------------- |
| **Excessive Data Exposure** | API retorna `{"id":1, "nome":"João", "cpf":"123...", "senha_hash":"..."}` quando só precisava do nome |
| **Mass Assignment**         | Cliente envia `{"nome":"João", "is_admin":true}` e o servidor aceita o campo extra                    |

> O atacante coleta dados sensíveis ou se autopromove.

#### 💉 Injeção

| Vulnerabilidade               | O que acontece                                               |
| ----------------------------- | ------------------------------------------------------------ |
| **Command or Code Injection** | `GET /api/ping?ip=8.8.8.8; rm -rf /` → execução no servidor  |
| **GraphQL Injection**         | Consultas maliciosas que exploram a flexibilidade do GraphQL |

> O atacante executa código arbitrário no servidor.

#### 🛡️ Configuração e Limites

| Vulnerabilidade                       | O que acontece                                                         |
| ------------------------------------- | ---------------------------------------------------------------------- |
| **Lack of Resources & Rate Limiting** | Atacante faz 1 milhão de requisições → servidor cai (DDoS)             |
| **Improper Inventory Management**     | Endpoint `/api/v1/users` esquecido, enquanto `/api/v2/users` é o atual |
| **Security Misconfiguration**         | CORS com `*`, debug ativo em produção, TLS fraco                       |

> O atacante explora configurações erradas ou ausência de proteções.

#### 🔄 Fluxos de Negócio

| Vulnerabilidade                           | O que acontece                                                                         |
| ----------------------------------------- | -------------------------------------------------------------------------------------- |
| **Unrestricted Access to Business Flows** | Atacante automatiza compra de produtos limitados, criação de contas, resgate de cupons |
| **Unsafe Consumption of APIs**            | API confia cegamente em dados de APIs de terceiros                                     |

> O atacante explora a lógica de negócio via automação.

***

### 🎯 Exemplo Rápido (BOLA - Broken Object Level Authorization)

```http
# Cenário: API de e-commerce

# Requisição normal (usuário vê seu próprio pedido)
GET /api/orders/12345
Authorization: Bearer token_usuario_12345

# Resposta (OK)
{"order_id": 12345, "items": [...], "total": 100.00}

# Requisição maliciosa (tenta ver pedido de outro usuário)
GET /api/orders/12346
Authorization: Bearer token_usuario_12345

# Se retornar dados → BOLA! Usuário acessa dados de outro
{"order_id": 12346, "items": [...], "total": 500.00}  # Falha!
```

***

### 🎯 Exemplo Rápido (Mass Assignment)

```http
# Requisição normal (criar usuário)
POST /api/users
Content-Type: application/json

{"nome": "João", "email": "joao@email.com"}

# Requisição maliciosa (tenta se tornar admin)
POST /api/users
Content-Type: application/json

{"nome": "João", "email": "joao@email.com", "is_admin": true}

# Se o servidor aceitar o campo extra → Mass Assignment!
# João agora é administrador
```

***

### 🛡️ Recomendações Gerais para APIs

| Problema                | Solução                                                   |
| ----------------------- | --------------------------------------------------------- |
| BOLA (IDOR)             | Verificar propriedade do objeto a CADA requisição         |
| BFLA                    | Verificar permissão da função a CADA requisição           |
| Mass Assignment         | Usar DTOs (Data Transfer Objects); ignorar campos extras  |
| Excessive Data Exposure | Definir explicitamente quais campos retornar              |
| Rate Limiting           | Implementar limites por IP, usuário, endpoint             |
| Injection               | Sanitizar entradas; usar consultas parametrizadas         |
| Configuração            | Desabilitar debug em produção; CORS restrito; TLS forte   |
| Inventário              | Manter documentação atualizada; desativar versões antigas |

***

### 🔗 Links Úteis (Introdução)

* [OWASP API Security Top 10](https://owasp.org/www-project-api-security/)
* [PortSwigger – API Testing](https://portswigger.net/web-security/api-testing)
* [REST API Security Checklist](https://github.com/shieldfy/API-Security-Checklist)


---

# 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.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.
