# OAuth Authentication

## 🔍 Conceitos Fundamentais

O **OAuth 2.0** é um framework de autorização que permite que aplicações obtenham acesso limitado a contas de usuários em serviços de terceiros (como Google, Facebook ou GitHub) sem expor as credenciais do usuário. Quando implementado incorretamente, ele permite que atacantes sequestrem contas ou obtenham tokens de acesso de alto privilégio.

## 🏗️ O Fluxo OAuth 2.0

O fluxo mais comum é o **Authorization Code Grant**:

1. **Request:** O usuário clica em "Login com Google".
2. **Autorização:** O usuário autoriza a aplicação no servidor do Google.
3. **Código:** O Google redireciona o usuário para a aplicação com um `code`.
4. **Troca:** A aplicação troca o `code` de back-end para back-end por um `access_token`.
5. **Acesso:** A aplicação usa o token para acessar dados do usuário.

## ⚔️ Tipos de Ataques

### 1. Falhas no Redirect URI (Vazamento de Código)

O servidor de autorização deve validar se o `redirect_uri` enviado na requisição corresponde exatamente ao cadastrado.

* **Ataque:** O atacante altera o `redirect_uri` para um servidor que ele controla: `?redirect_uri=https://attacker.com/callback`.
* **Impacto:** O código de autorização é enviado para o atacante, que pode usá-lo para logar na conta da vítima.

### 2. Falha de CSRF (Falta do parâmetro `state`)

O parâmetro `state` deve ser um valor aleatório único gerado pela aplicação para cada sessão.

* **Ataque:** Se não houver `state`, o atacante pode iniciar o fluxo OAuth em sua própria conta, interceptar o `code` e forçar a vítima a carregar o link com o `code` do atacante.
* **Impacto:** A conta da aplicação da vítima fica vinculada à identidade social do atacante (Account Linking Attack).

### 3. Exploração de Escopo (Scope Grabbing)

O atacante tenta solicitar escopos de acesso maiores do que o necessário ou permitidos para a aplicação.

* **Payload:** Adicionar `scope=admin,email,profile` na requisição inicial.

## 🔧 Técnicas de Exploração

### 1. Bypass de Validação de Redirect URI

Tente variações para enganar o parser do servidor:

* Subdomínios: `https://attacker.site.com`
* Regex Falha: `https://site.com.attacker.com`
* Open Redirect no site original: `https://site.com/redirect?url=https://attacker.com`

### 2. Roubo de Token via Fragmento (#)

No fluxo **Implicit Grant**, o token é enviado na URL após o `#`.

```http
https://site.com/callback#access_token=SECRET_TOKEN
```

O atacante pode usar um XSS ou um Open Redirect para ler o conteúdo após o fragmento via JavaScript (`location.hash`).

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

### Cenário A: Account Takeover via Redirect URI

A aplicação aceita domínios arbitrários no redirecionamento. O atacante envia um link de login para a vítima. Após a vítima clicar em "Autorizar", o código de login é enviado para o site do atacante. O atacante usa o código no site real e entra na conta da vítima.

### Cenário B: Pre-Account Takeover

O atacante cria uma conta usando o e-mail da vítima através do fluxo OAuth (se a aplicação não exigir verificação de e-mail). Quando a vítima tentar se cadastrar no futuro, o atacante já terá acesso à conta vinculada.

## 🔍 Detecção e Ferramentas

### 1. Burp Suite

Observe todas as requisições que contêm `client_id`, `redirect_uri` e `response_type`. Tente alterar o `redirect_uri`.

### 2. OAuth Migrator

Extensão do Burp que ajuda a testar diferentes fluxos e configurações de OAuth automaticamente.

### 3. Teste de State

Remova o parâmetro `state` da requisição e veja se o fluxo ainda funciona. Se funcionar, a aplicação está vulnerável a CSRF.

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

### 1. Strict Redirect URI Validation

Utilize uma lista branca (**allowlist**) exata. Não aceite curingas (`*`) ou subdomínios dinâmicos no redirecionamento.

### 2. Implementar o parâmetro `state`

Sempre use um token `state` único, imprevisível e vinculado à sessão do usuário. Valide-o no retorno do servidor de autorização.

### 3. Usar PKCE (Proof Key for Code Exchange)

O PKCE é uma extensão do OAuth 2.0 que protege contra a interceptação do código de autorização, sendo essencial para aplicações mobile e de página única (SPA).

{% hint style="danger" %}
O OAuth não é um protocolo de autenticação por si só, mas sim de autorização. Usá-lo para autenticação sem camadas adicionais (como OpenID Connect) é um erro comum que leva a muitas das falhas descritas acima.
{% 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/autenticacao/oauth-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.
