O que ataques-específicos-http2 faz?
Manual de ataques específicos do protocolo HTTP/2. Use quando o alvo suportar HTTP/2 e você precisar explorar framing binário, compressão HPACK, contrabando de upgrade h2c, injeção de pseudo-cabeçalhos, abuso de multiplexação de streams ou falhas de tradução de downgrade H2→H1.
Técnicas de Ataque
1. Contrabando de Upgrade h2c
O ataque de contrabando de upgrade h2c explora a capacidade do HTTP/2 em texto claro (h2c) através de um upgrade a partir de HTTP/1.1. Um servidor proxy mal configurado pode ser enganado para aceitar uma conexão HTTP/2 enquanto o backend pensa que ainda está em HTTP/1.1, permitindo dessincronização de requisições.
GET / HTTP/1.1
Host: target.com
Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
Connection: Upgrade, HTTP2-Settings
2. Injeção de Pseudo-Cabeçalhos
Os pseudo-cabeçalhos HTTP/2 (:method, :path, :scheme, :authority) podem ser manipulados para contornar validações de segurança em proxies. Por exemplo, injetar cabeçalhos duplicados ou malformados.
import h2.connection
conn = h2.connection.H2Connection()
conn.initiate_connection()
headers = [
(':method', 'GET'),
(':path', '/admin'),
(':authority', 'target.com'),
('x-forwarded-for', '127.0.0.1'),
]
conn.send_headers(1, headers)
3. Exploração de Compressão HPACK
O HPACK comprime cabeçalhos HTTP usando tabelas estáticas e dinâmicas. Um atacante pode forçar a inclusão de valores sensíveis na tabela dinâmica e depois inferi-los via tamanho de saída ou oracle de compressão.
4. Abuso de Multiplexação de Streams
A multiplexação permite múltiplas streams simultâneas. Ataques incluem:
- Flood de RST_STREAM: Enviar rapidamente frames de reset para exaurir recursos do servidor.
- Manipulação de Prioridades: Usar prioridades de stream para causar starving ou deadlock.
- Head-of-line blocking (H2 específico): Em algumas implementações, streams bloqueadas podem impactar outras.
5. Falhas de Tradução H2→H1
Proxies que convertem HTTP/2 para HTTP/1.1 podem introduzir vulnerabilidades:
- Quebra de cabeçalhos: Cabeçalhos com nomes contendo underscore (
_) ou caracteres especiais podem ser mal interpretados. - Dessincronização de requisições: Usar pseudo-cabeçalhos não padrão ou ordem incorreta pode levar a interpretação divergente.
# Exemplo com curl (simulação)
curl --http2-prior-knowledge -H ":path: /evil" http://target.com
Ferramentas Suportadas
- Burp Suite: Extensão HTTP/2 Inspector para visualizar e modificar frames.
- mitmproxy: Scripts para interceptar e modificar tráfego HTTP/2.
- Python (h2): Biblioteca para interagir diretamente com frames.
- Yaklang: Módulo nativo para construção de payloads HTTP/2 personalizados.