# Broken User Authentication

## 🔍 Fundamentos e Definição

### O que é Broken User Authentication?

Diferente da autorização (BOLA/BFLA), a **Autenticação Quebrada** refere-se a falhas nos mecanismos que confirmam a identidade do usuário. Isso permite que atacantes comprometam senhas, chaves de API, tokens de sessão ou explorem falhas na lógica de implementação para assumir identidades de outros usuários (temporária ou permanentemente).

### Diferença Crucial: Autenticação vs Autorização

| Termo            | Pergunta                 | Exemplo de Falha                   |
| ---------------- | ------------------------ | ---------------------------------- |
| **Autenticação** | "Quem é você?"           | Login sem senha, bypass de MFA.    |
| **Autorização**  | "O que você pode fazer?" | Ver dados de outro usuário (BOLA). |

## ⚔️ Vetores de Ataque Comuns

### 1. Credential Stuffing & Brute Force

* **Brute Force:** Tentativas exaustivas de senhas para uma conta.
* **Credential Stuffing:** Uso de listas de usuários e senhas vazadas em outros sites.
* **Ataque de Dicionário:** Testar palavras comuns e variações.

### 2. Senhas Fracas ou Padrão

Sistemas que permitem senhas como `123456`, `admin` ou não forçam a troca da senha inicial.

### 3. Gestão de Sessão Insegura

* **Session Fixation:** Forçar um ID de sessão conhecido para a vítima.
* **Tokens Expostos:** Tokens enviados via URL (`GET /api/user?token=xyz`).
* **Falta de Timeout:** Sessões que nunca expiram.

### 4. Falhas no Esquecimento de Senha

Processos de recuperação previsíveis, como perguntas de segurança óbvias ou tokens de reset baseados em `timestamp`.

## 🔧 Técnicas de Exploração em APIs

APIs costumam ser alvos preferenciais devido à sua natureza "stateless" e uso intensivo de tokens (JWT, API Keys).

### 1. Exploração de JWT (JSON Web Tokens)

* **None Algorithm:** Alterar o header para `{"alg": "none"}` para aceitar payloads sem assinatura.
* **Weak Secrets:** Brute force de chaves secretas fracas usando `hashcat`.
* **KID Manipulation:** Apontar o parâmetro `kid` (Key ID) para um arquivo local ou nulo.

### 2. Previsibilidade de Identificadores

Se o token de autenticação for um simples base64 de um ID sequencial ou email.

```bash
# Token: dXNlci0xMjM= (user-123)
# Altera para: dXNlci0xMjQ= (user-124)
```

### 3. Incompleteness da Cadeia de Autenticação

Ignorar passos de autenticação em endpoints específicos que deveriam ser protegidos mas foram esquecidos no código do router.

## 🛡️ Bypass de MFA e Autenticação

### Técnica 1: Reutilização de Token de MFA

Tentar usar o mesmo código de 6 dígitos mais de uma vez ou para usuários diferentes.

### Técnica 2: Brute Force de Código OTP

Se a API não bloqueia o IP após X erros no código SMS/Email de 6 dígitos.

```python
# Exemplo de ataque a OTP de 4 dígitos
for code in range(0, 9999):
    response = requests.post("https://api.alvo.com/verify-mfa", json={"code": f"{code:04d}"})
    if response.status_code == 200:
        print(f"✅ Sucesso: {code}")
        break
```

### Técnica 3: Manipulação de Respostas (Client-side)

Algumas implementações verificam o MFA no frontend.

* O servidor retorna: `{"mfa_required": true, "token": "..."}`
* O atacante altera a resposta via Proxy (Burp) para: `{"mfa_required": false, "status": "authorized"}`

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

### Cenário A: Lack of Rate Limiting no Login

```http
POST /api/v1/auth/login HTTP/1.1
Content-Type: application/json

{"email": "victima@email.com", "password": "§password§"}
```

Usando o **Burp Suite Intruder**, o atacante testa 10.000 senhas por minuto sem receber bloqueio de IP ou CAPTCHA.

### Cenário B: Long-lived Sessions

Um usuário faz login em um computador público, fecha o navegador mas não faz logout. O atacante reabre o navegador e a sessão persiste porque o cookie não possui flag `Session` e o tempo de expiração no servidor é de 1 ano.

## 🔍 Detecção e Ferramentas

### 1. Ferramentas Automáticas

* **Burp Suite (Intruder/Repeater):** Essencial para testar rate limit e bypass de lógica.
* **OWASP ZAP:** Autenticação automatizada e testes de cookies.
* **Hashcat/John the Ripper:** Para crackear hashes de senhas ou chaves JWT.
* **JWT\_Tool:** Ferramenta especializada em análise e ataque de tokens JWT.

### 2. Check-list de Busca em Pentest

* [ ] O sistema permite senhas extremamente simples?
* [ ] Posso realizar 100 tentativas de login sem bloqueio?
* [ ] O link de "Esqueci minha senha" expira após uso?
* [ ] O Token de sessão muda após o login?
* [ ] É possível acessar a API sem o header `Authorization`?

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

Segundo o **OWASP API Security Top 10 (API2)**:

1. **Vulnerabilidades de Implementação:** Jamais tente reinventar a roda na autenticação. Use frameworks consolidados (OAuth2, OpenID Connect).
2. **Rate Limiting:** Implemente limites rigorosos de tentativas de login por IP e por conta.
3. **MFA Obrigatório:** Implemente Multi-Factor Authentication para todas as contas, especialmente as administrativas.
4. **Secure Token Management:**
   * Use tokens curtos e aleatórios.
   * Armazene senhas com algoritmos de hashing modernos (Argon2, bcrypt).
   * Use flags de cookies: `HttpOnly`, `Secure`, `SameSite=Strict`.
5. **Invalidação de Sessão:** Implemente logout funcional (revogação no servidor) e timeouts automáticos de inatividade.

> Falhas de autenticação são frequentemente o "primeiro passo" para um comprometimento total do sistema. Uma API com BOLA (acesso a dados) é perigosa, mas uma com Broken Authentication permite que o atacante atue como administrador.


---

# 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/broken-user-authentication.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.
