# HTTP2 Attacks

## **📋 Índice**

1. [Conceitos Fundamentais](#-conceitos-fundamentais)
2. [HTTP/2 vs HTTP/1.1](#-http2-vs-http1.1)
3. [Tipos de Ataques (Frames, Multiplexing, etc)](#-tipos-de-ataques-frames-multiplexing-etc)
4. [HTTP/2 Request Smuggling](#-http2-request-smuggling)
5. [DoS em HTTP/2 (Rapid Reset)](#-dos-em-http2-rapid-reset)
6. [Detecção e Ferramentas](#-detecção-e-ferramentas)
7. [Mitigação e Prevenção](#-mitigação-e-prevenção)

***

## **🔍 Conceitos Fundamentais**

O **HTTP/2** foi criado para resolver as limitações de performance do HTTP/1.1, introduzindo recursos como multiplexação, compressão de cabeçalhos (HPACK) e uma estrutura binária em vez de textual. No entanto, essa complexidade trouxe novas superfícies de ataque, muitas vezes explorando a tradução/proxy entre HTTP/2 e HTTP/1.1.

***

## **📂 Diferenças Cruciais**

| Recurso        | HTTP/1.1                            | HTTP/2                                       |
| -------------- | ----------------------------------- | -------------------------------------------- |
| **Formato**    | Textual                             | Binário (Frames)                             |
| **Conexão**    | Uma requisição por vez (Keep-alive) | Multiplexada (Vários streams em uma conexão) |
| **Cabeçalhos** | Texto plano, repetitivo             | Comprimido (HPACK)                           |
| **Prioridade** | Não possui                          | Streams podem ser priorizados                |

***

## **⚔️ Tipos de Ataques**

### **1. HTTP/2 Request Smuggling (H2.CL / H2.TE)**

Ocorre principalmente quando um front-end aceita HTTP/2 e converte para HTTP/1.1 para o back-end (conhecido como **HTTP/2 Downgrading**).

* O atacante pode injetar caracteres de nova linha (`\r\n`) dentro de cabeçalhos HTTP/2 que, ao serem convertidos para texto no HTTP/1.1, criam uma nova requisição "smuggled".

### **2. HPACK Bomb (Header Compression Attack)**

Explora a compressão de cabeçalhos para causar exaustão de memória. O atacante envia cabeçalhos que se expandem para tamanhos gigantescos após serem descomprimidos pelo servidor, similar a uma **Zip Bomb**.

### **3. Stream Multiplexing Abuse**

O atacante abre milhares de streams dentro de uma única conexão TCP e os deixa abertos ou envia dados muito lentamente para consumir todos os slots de processamento do servidor.

***

## **💥 Ataque Recente: HTTP/2 Rapid Reset (CVE-2023-44487)**

Este é um ataque de DoS massivo que utiliza a flag `RST_STREAM`.

1. O atacante abre um stream (Request).
2. Imediatamente envia um pacote `RST_STREAM` (Cancelamento).
3. O servidor ainda gasta recursos processando o início da requisição, mas o atacante pode fazer isso milhares de vezes por segundo em uma única conexão sem atingir o limite de streams simultâneos.

**Impacto:** Permite gerar milhões de requisições por segundo com pouquíssima largura de banda.

***

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

### **Cenário A: Smuggling via Header Injection**

```http
# Pseudo-header HTTP/2
:method: POST
:path: /
:authority: victim.com
foo: bar\r\n
\r\n
POST /admin HTTP/1.1\r\n
Host: victim.com\r\n
...
```

Ao converter para HTTP/1.1, o servidor de back-end verá duas requisições distintas.

***

## **🔍 Detecção e Ferramentas**

### **1. Burp Suite (HTTP/2 Support)**

O Burp agora permite editar frames binários de HTTP/2 diretamente no Inspector. A extensão "HTTP Request Smuggler" também suporta detecção de vulnerabilidades relacionadas ao downgrading de H2.

### **2. H2spec**

Uma ferramenta de conformidade que pode ser usada para encontrar implementações de servidores que não seguem estritamente a RFC do HTTP/2, o que frequentemente indica vulnerabilidades.

### **3. Nghttp2**

Útil para interagir com servidores HTTP/2 via linha de comando e testar o envio de frames customizados.

***

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

### **1. Desabilitar Downgrading Inseguro**

Garantir que o proxy de front-end invalide requisições que contenham caracteres de controle (`\r`, `\n`, `\0`) em cabeçalhos HTTP/2 antes de converter para HTTP/1.1.

### **2. Limitar Configurações de Stream**

Configurar limites rigorosos para:

* `SETTINGS_MAX_CONCURRENT_STREAMS`: Máximo de streams por conexão.
* Taxa de frames `RST_STREAM` permitidos por segundo.

### **3. Atualização de Servidores**

Implementar patches contra ataques conhecidos como o Rapid Reset. Servidores como Nginx, Apache e HAProxy lançaram atualizações críticas para lidar com a gestão de frames.

***

> A complexidade do HTTP/2 torna impossível realizar testes manuais simples como no HTTP/1.1. O uso de ferramentas que entendem o protocolo binário é essencial para identificar falhas de segurança modernas.


---

# 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/rede-and-infraestrutura/http2-attacks.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.
