
Prova de Conceito (PoC) para CVE-2026-49975 – ataque de exaustão de memória do servidor HTTP/2 aproveitando amplificação HPACK e retenção de conexão (HTTP/2 Slowloris).
Uma prova de conceito de negação de serviço (DoS) direcionada a servidores HTTP/2. Ao combinar amplificação HPACK com retenção de streams, uma única máquina com uma conexão de rede modesta pode tornar um servidor vulnerável indisponível em segundos.
CVE-2026-49975mod_http2 do Apache HTTP Server permite um ataque de negação de serviço através de requisições HTTP especialmente criadas.O exploit procede através de vários estágios, conforme ilustrado por seus logs de execução:
Estabelecimento de Conexão TCP/TLS
Múltiplas conexões TCP/TLS simultâneas são abertas para o servidor alvo.
Negociação HTTP/2
O cliente detecta o número máximo de streams simultâneas permitido pelo servidor (tipicamente 100 ou 128).
Preparação HPACK
Cabeçalhos HTTP cuidadosamente criados são enviados para forçar o servidor a alocar tabelas de compressão HPACK excessivamente grandes, aumentando rapidamente o consumo de memória.
Retenção de Conexão
Uma vez que os streams foram abertos, as conexões permanecem ativas indefinidamente, impedindo que a memória alocada seja liberada e eventualmente exaurindo a RAM disponível do servidor.
Os testes foram realizados contra vários servidores web usando suas configurações padrão.
h2.exceptions.TooManyStreamsErrorOcorre quando o valor fornecido para --streams excede o máximo de streams simultâneas suportado pelo servidor.
Solução: Teste o limite de streams do servidor antes de iniciar o ataque.
NameError: name 'SettingsAcknowledued' is not definedUm simples erro tipográfico no código-fonte do PoC.
Solução: Substitua:
SettingsAcknowledued
por:
SettingsAcknowledged
[SSL] unknown errorNormalmente indica que o alvo não suporta HTTP/2 sobre TLS ou está rejeitando conexões de entrada.
EOF occurred in violation of protocolO servidor remoto fechou a conexão inesperadamente.
Isso ocorre comumente quando o servidor começa a exaurir seus recursos e passa a recusar novas conexões.
Invalid input ConnectionInputs.SEND_HEADERSO servidor fechou a conexão HTTP/2 antes que todos os cabeçalhos da requisição pudessem ser transmitidos.
A prova de conceito é implementada como um script Python.
git clone https://github.com/califio/http2-bomb.git
cd http2-bomb
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Ataque básico usando 10 conexões e 100 streams:
python bomb.py example.com --streams 100 --connections 10
(Requer que o alvo permita pelo menos 100 streams simultâneas por conexão.)
Detecção automática do limite de streams:
python bomb.py example.com --connections 10
Ataque em larga escala:
python bomb.py target.example.com --connections 50
Teste de conexão de alto volume:
python h2bomb.py -t target.example.com:443 -c 1000
Teste de conexão de volume muito alto:
python h2bomb.py -t example.com -c 20000
Este software é fornecido exclusivamente para pesquisa de segurança, fins educacionais e teste de sistemas para os quais você possui autorização explícita.
O uso não autorizado desta ferramenta contra sistemas que você não possui ou não tem permissão para testar pode violar leis e regulamentos aplicáveis. Os autores e colaboradores não assumem nenhuma responsabilidade por qualquer uso indevido ou danos resultantes do uso deste software.
| Servidor Web | Versão Testada | RAM | Exaustão de Memória | Comportamento Observado |
|---|
| Envoy | 1.37.2 | 32 GB | ~10 segundos | Exauriu a memória com sucesso muito rapidamente. |
| Apache HTTP Server | 2.4.67 | 32 GB | ~18 segundos | Limite de stream tipicamente 100. Progressão padrão do ataque através de preparação HPACK e retenção indefinida de conexão. |
| nginx | 1.29.7 | 32 GB | ~45 segundos | Limite de stream tipicamente 128. O ataque é bem-sucedido, mas requer mais tempo para consumir a memória disponível. |
| Microsoft IIS | Não especificado | 64 GB | ~45 segundos | Pode anunciar limites de stream excepcionalmente grandes, como 4294967297. |
| Alvos Não Vulneráveis | Vários | - | - | Falhas TLS imediatas ou TooManyStreamsError ao tentar exceder o limite de streams configurado do servidor. |