
# Funktionierender DoS-Exploit für CVE-2021-32675 in Redis, der überdimensionierte Bulk-String-Header ausnutzt, um eine Speichererschöpfung auszulösen. Enthält Nutzungsanweisungen und eine Docker-basierte Testumgebung.
Dieses Repository enthält einen funktionsfähigen Exploit für CVE-2021-32675, eine Denial-of-Service-Schwachstelle (DoS) in Redis. Der Fehler ermöglicht es nicht authentifizierten Remote-Angreifern, massive Speichervorabzuweisungen auf dem Redis-Server auszulösen, indem sie übergroße Bulk-String-Header senden, ohne Argumentdaten bereitzustellen, was zu Speichererschöpfung und Dienstabsturz führt.
CVE-2021-32675 ist eine Schwachstelle in der Verarbeitung des Redis-Abfragepuffers. Beim Parsen eingehender Befehle im RESP-Protokoll (REdis Serialization Protocol) liest Redis die deklarierte Länge eines Bulk-String-Arguments ($<length>\r\n) und weist sofort einen SDS-Puffer (Simple Dynamic String) im Speicher vorab zu, um die Nutzlast zu empfangen, bevor irgendwelche Argumentbytes gelesen werden.
Da diese Vorabzuweisung vor dem Empfang der Argumentnutzlast erfolgt, kann ein nicht authentifizierter Client die maximal zulässige Bulk-String-Größe deklarieren (standardmäßig beträgt proto-max-bulk-len 512 MB) und die Verbindung unbegrenzt offen halten, ohne die tatsächlichen Daten zu übertragen. Redis behält den vorab zugewiesenen Speicher für jede aktive Verbindung bei, wodurch ein Verstärkungsverhältnis von ungefähr 32.000.000× entsteht (~16 Bytes Netzwerkverkehr führen zu einer Speicherreservierung von 512 MB).
Das Öffnen mehrerer gleichzeitiger Verbindungen mit dieser Header-only-Technik erschöpft schnell den verfügbaren Serverspeicher und verursacht:
maxmemory-Richtlinie aktiv ist.OOM command not allowed).Die Schwachstelle betrifft Redis-Versionen vor:
Redis-Instanzen, die ohne Authentifizierung (requirepass nicht konfiguriert) oder mit standardmäßigem proto-max-bulk-len (512 MB) laufen, sind anfällig für diesen Exploit. Gepatchte Versionen erzwingen ein striktes 16-KB-Protokollpufferlimit für nicht authentifizierte Clients, bevor die Vorabzuweisung stattfindet.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Python 3.8+
Anfällige Redis-Instanz (Versionen vor 6.2.6 / 6.0.16 oder nicht authentifizierte Instanzen)
python3 exploit.py --host <IP> --port <PORT> [Optionen]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
--host | str | Erforderlich | Ziel-Redis-Hostname oder IP-Adresse |
--port | int | 6379 | Portnummer |
--connections | int | 10 | Anzahl der zu öffnenden bösartigen Verbindungen |
--size | int | 512 | Deklarierte Bulk-String-Puffergröße in MB |
--hold | int | 5 | Sekunden, die Verbindungen vor der Bereinigung offen gehalten werden |
--password, --auth | str | None | Passwort für die Redis-Authentifizierung (falls erforderlich) |
python3 exploit.py --host 127.0.0.1 --port 6379 --connections 10 --size 512 --hold 5
Sie können ein lokales Testlabor mit der enthaltenen Docker-Compose-Konfiguration starten:
# Anfälliges Redis (Port 6380) und abgeschwächtes Redis (Port 6381) starten
docker compose -f conf/docker-compose.yml up -d
# Gegen die anfällige Instanz testen
python3 exploit.py --host 127.0.0.1 --port 6380 --connections 10 --size 512
# Gegen die abgeschwächte Instanz testen
python3 exploit.py --host 127.0.0.1 --port 6381 --password "L4bS3cur3!2024" --connections 10 --size 512
# Container stoppen
docker compose -f conf/docker-compose.yml down
Dieser Proof of Concept dient ausschließlich Bildungs-, Forschungs- und Sicherheitsüberprüfungszwecken. Der Autor ist nicht verantwortlich für Missbrauch, Schäden oder unbefugte Tests gegen Systeme ohne ausdrückliche Genehmigung.