# DOM based Vulnerabilities

## Conceitos Fundamentais

As **vulnerabilidades baseadas em DOM** ocorrem inteiramente dentro do navegador do usuário. Diferente das falhas de servidor, aqui o servidor pode ser totalmente seguro, mas o código JavaScript do front-end processa dados de uma **fonte** (Source) insegura e os envia para um **destino** (Sink) perigoso de forma inapropriada.

## O que é uma Vulnerabilidade Baseada em DOM?

O ataque acontece quando um script executa dados controlados pelo atacante.

* **Source (Fonte):** Onde o dado malicioso entra (ex: `location.hash`, `location.search`, `document.referrer`).
* **Sink (Destino):** Onde o dado é executado ou renderizado (ex: `eval()`, `innerHTML`, `location.href`).

## Principais Tipos de Vulnerabilidades

### 1. DOM-based Open Redirect

Ocorre quando um script usa dados da URL para redirecionar o usuário.

* **Código Vulnerável:** `let url = new URLSearchParams(window.location.search).get('next'); window.location.href = url;`
* **Payload:** `https://site.com/#next=https://attacker.com`

### 2. DOM-based Cookie Manipulation

Permite que um atacante escreva cookies arbitrários no navegador da vítima via JS.

* **Sink:** `document.cookie`.
* **Impacto:** Pode levar ao **Session Fixation**.

### 3. DOM-based Link Manipulation

O atacante altera o destino de um link ou botão na página.

* **Impacto:** Induz a vítima a baixar um arquivo malicioso ou enviar dados para um domínio externo.

### 4. DOM-based Web Message Manipulation (postMessage)

Ocorre quando um script aceita mensagens via `window.postMessage` sem validar a origem (`event.origin`).

* **Impacto:** Permite que sites externos injetem dados ou comandos no site vulnerável se ele estiver em um iframe.

## Técnicas de Exploração

### 1. Identificando Sources e Sinks

Use as ferramentas de desenvolvedor do navegador (F12) para buscar por:

* `location.hash`, `window.name`
* `innerHTML`, `document.write`, `setTimeout`, `setInterval`

### 2. Exploração de Client-side Logic

Muitas vezes, sites modernos (SPA - React/Angular) usam a URL para definir o estado da página. Manipular esses estados pode revelar informações ou pular verificações de segurança apenas mudando o hash (`#admin=true`).

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

### Cenário A: Redirecionamento Pós-Login

O site usa `window.location.search` para saber para onde enviar o usuário após o login. O atacante envia um link de login com `?redirect=javascript:alert(1)`. Ao logar, a vítima executa o script (XSS via Open Redirect).

## Detecção e Ferramentas

### 1. Burp Suite Professional (DOM Invader)

O **DOM Invader** é uma das melhores ferramentas atuais. Ele injeta "canários" em todas as sources conhecidas e monitora se eles chegam a algum sink perigoso em tempo real.

### 2. Mantra / LinkFinder

Ferramentas que analisam arquivos JavaScript em busca de fontes de dados e links ocultos.

## Mitigação e Prevenção

### 1. Evite Sinks Perigosos

* Use `.textContent` em vez de `.innerHTML`.
* Evite `eval()`, `setTimeout(string)`, e `new Function()`.

### 2. Validação de Origem (postMessage)

Sempre verifique `event.origin` antes de processar qualquer mensagem recebida via `window.addEventListener('message', ...)`.

### 3. Content Security Policy (CSP)

Um CSP bem configurado pode mitigar o impacto de XSS baseado em DOM, impedindo a execução de scripts não autorizados.

{% hint style="info" %}
Vulnerabilidades baseadas em DOM são silenciosas porque os dados maliciosos muitas vezes nem chegam ao servidor (especialmente quando usados após o `#`), tornando-as invisíveis para WAFs tradicionais.
{% 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/front-end/dom-based-vulnerabilities.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.
