# Lack of Resources & Rate Limiting

## 🔍 Fundamentos

### O que é?

A vulnerabilidade de **Falta de Recursos e Rate Limiting** (API4:2023 no OWASP API Security Top 10) ocorre quando uma API não impõe restrições suficientes sobre o número de requisições, o tamanho das solicitações ou o consumo de recursos computacionais (CPU, Memória, I/O).

### Impacto

Isso pode levar à negação de serviço (DoS), aumento excessivo de custos de infraestrutura e facilitar ataques de força bruta ou scraping massivo.

## 🏗️ Vetores de Exaustão de Recursos

As APIs podem ser abusadas de diversas formas além do simples número de requisições:

1. **Execution Timeout:** Requisições que levam muito tempo para processar, ocupando threads do servidor.
2. **Max Allocatable Memory:** Solicitar grandes volumes de dados (ex: `limit=1000000`) causando `Out Of Memory`.
3. **Number of File Descriptors:** Abrir muitas conexões ou arquivos simultaneamente.
4. **DDoS em Camada 7:** Sobrecarga de endpoints que realizam operações pesadas (criptografia, processamento de imagem).

## 🛑 Tipos de Rate Limiting

Para uma defesa robusta, é necessário aplicar limites em múltiplos níveis:

| Nível            | Descrição                                            | Exemplo                                                |
| ---------------- | ---------------------------------------------------- | ------------------------------------------------------ |
| **Por IP**       | Bloqueia o endereço de origem após X requisições.    | Máximo 100 req/min por IP.                             |
| **Por Usuário**  | Limita com base no ID do usuário autenticado.        | Máximo 500 req/min por conta.                          |
| **Por Endpoint** | Limites específicos para rotas sensíveis ou pesadas. | Login: 5 req/min; Busca: 50 req/min.                   |
| **Geográfico**   | Restringe tráfego de regiões inesperadas.            | Bloqueio de picos de tráfego de países fora do escopo. |

## 🔧 Técnicas de Exploração

### 1. Teste de Paginação (Unbounded Results)

Tentar aumentar o parâmetro de limite para valores absurdos.

* `GET /api/v1/users?page=1&limit=100` -> Normal
* `GET /api/v1/users?page=1&limit=999999` -> **Humm...**

### 2. Payload Size Inflation

Enviar requisições POST com corpos gigantes de JSON ou arquivos para testar o limite de parsing do servidor.

```json
{
  "name": "a...[repetir 10MB de caracteres]...a"
}
```

### 3. Ataques de "Slowloris" em API

Manter conexões abertas enviando headers muito lentamente para exaurir a pool de conexões do servidor.

### 4. ZIP Bombs / XML Bombs

Enviar arquivos comprimidos que expandem centenas de vezes o seu tamanho original quando processados.

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

### Cenário A: Brute Force de Código de Recuperação

Uma API envia um código de 6 dígitos por email para resetar a senha.\
Endpoint: `POST /api/v1/auth/reset-verify`\
**Falha:** O endpoint não tem rate limit. O atacante usa o Burp Intruder para testar as 1.000.000 de combinações em poucos minutos.

### Cenário B: Exaustão de CPU via Exportação

Endpoint: `GET /api/v1/reports/export?format=pdf&user_id=123`\
O processo de gerar PDF é pesado. O atacante dispara 500 requisições simultâneas para gerar este relatório.\
**Resultado:** O uso de CPU do servidor vai para 100%, derrubando a API para todos os outros usuários.

## 🔍 Detecção e Ferramentas

### 1. Burp Suite (Intruder & Repeater)

Tente enviar requisições em alta velocidade e verifique se o servidor retorna o status **429 Too Many Requests**.

### 2. OWASP ZAP (Fuzzer)

Use o fuzzer para enviar grandes payloads e observar o tempo de resposta do servidor.

### 3. Postman (Collection Runner)

Dispare uma coleção de testes repetidamente para identificar em qual ponto a API começa a falhar ou degradar a performance.

### 4. Ferramentas de Carga (k6, JMeter)

Simule um tráfego volumoso para testar a escalabilidade e os limites de segurança.

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

### 1. Implementar Throttling e Rate Limiting

Use soluções de infraestrutura como API Gateways (AWS API Gateway, Kong, Tyk) ou bibliotecas de código (ex: `express-rate-limit` para Node.js).

### 2. Limitar Tamanho de Payload e Conteúdo

Defina limites máximos para o corpo das requisições (ex: 1MB para JSON, 5MB para arquivos).

### 3. Paginação Obrigatória

Nunca retorne todos os resultados de uma vez. Force limites baixos no `limit` da query e valide se o valor solicitado é aceitável.

```javascript
const limit = Math.min(parseInt(req.query.limit) || 20, 100); // Máximo 100
```

### 4. Timeout de Execução

Configure timeouts rigorosos para que requisições presas não ocupem recursos eternamente.

### 5. Monitoramento de Recursos

Utilize ferramentas de APM (New Relic, Datadog) para alertar sobre picos anômalos de consumo de CPU ou Memória em endpoints específicos.

{% hint style="danger" %}
A falta de rate limit não é apenas um problema de disponibilidade. Ela serve como facilitador para quase todos os outros ataques: força bruta, enumeração de usuários e scraping de dados privados.
{% endhint %}


---

# 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/lack-of-resources-and-rate-limiting.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.
