
نص تشخيصي ومعالجة لخمس ثغرات أمنية في Redis، يوفر فحصًا وتخفيفًا قائمًا على ACL وإرشادات لتقوية الإعدادات لثغرات تنفيذ الأكواد عن بُعد (RCE) الموثّقة.
تاريخ الإصدار: 2026-05-08 المؤلف: TonyCao ([email protected]) المصدر: Redis Security Advisory
في 05/05/2026، نشرت Redis Ltd. نشرة أمنية حول 5 ثغرات أمنية خطيرة تؤثر على جميع إصدارات Redis OSS/CE. جميع هذه الثغرات يمكن أن تؤدي إلى تنفيذ كود عن بُعد (RCE) إذا تم استغلالها بنجاح.
| # | كود CVE | CVSS | المستوى | نوع الخلل | شروط الاستغلال |
|---|---|---|---|---|---|
| 1 | CVE-2026-23479 | 7.7 | HIGH | Use-After-Free | مصادق عليه، لديه صلاحية تشغيل أوامر الحظر |
| 2 | CVE-2026-25243 | 7.7 | HIGH | وصول غير صالح للذاكرة | مصادق عليه، لديه صلاحية تشغيل RESTORE |
| 3 | CVE-2026-25588 | 7.7 | HIGH | وصول غير صالح للذاكرة | مصادق عليه، لديه صلاحية RESTORE + وحدة RedisTimeSeries |
| 4 | CVE-2026-25589 | 7.7 | HIGH | وصول غير صالح للذاكرة | مصادق عليه، لديه صلاحية RESTORE + وحدة RedisBloom |
| 5 | CVE-2026-23631 | 6.1 | MEDIUM | Use-After-Free | مصادق عليه، replica مع replica-read-only = معطل |
النقطة المشتركة: جميع الثغرات تتطلب أن يكون المهاجم مصادقًا (authenticated) على مثيل Redis. CVE-2026-23631 تؤثر فقط على replica مع إعداد
replica-read-only disabled.
| سلسلة الإصدارات | الإصدار المُصحح (الحد الأدنى) |
|---|---|
| 6.2.x | 6.2.22 |
| 7.2.x | 7.2.14 |
| 7.4.x | 7.4.9 |
| 8.2.x | 8.2.6 |
| 8.4.x | 8.4.3 |
| 8.6.x | 8.6.3 |
| الوحدة | الحد الأدنى للإصدار |
|---|---|
| RedisTimeSeries | 1.12.14 / 1.10.24 / 1.8.23 |
| RedisBloom | 2.8.20 / 2.6.28 / 2.4.23 |
| الإصدار | التصحيح |
|---|---|
| 8.0.6 | 8.0.10-64 |
| 7.22.2 | 7.22.2-79 |
| 7.8.6 | 7.8.6-253 |
| 7.4.6 | 7.4.6-279 |
| 7.2.4 | 7.2.4-153 |
جميع عمليات نشر Redis Cloud تم تصحيحها تلقائيًا في وقت نشر النشرة الأمنية.
| الخاصية | القيمة |
|---|---|
| العنوان | Use-After-Free في Unblock Client Flow |
| CVSS 4.0 | 7.7 (HIGH) |
| CWE | CWE-416 (Use After Free) |
| المتجه | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| الشروط | مهاجم مصادق عليه، لديه صلاحية تنفيذ أوامر الحظر |
| النطاق | جميع Redis OSS/CE، Redis Software <= 8.0.6 |
عندما يكون العميل محظورًا (blocked) — على سبيل المثال في انتظار BLPOP — ويتم إخلاؤه (evict) أثناء إعادة تنفيذ الأمر المحظور، قد ترجع الدالة processCommandAndResetClient خطأً. الكود الحالي لا يعالج هذه الحالة بشكل صحيح، مما يؤدي إلى مؤشر يشير إلى منطقة ذاكرة تم تحريرها (use-after-free). يمكن للمهاجم استغلال UAF لتنفيذ كود عن بُعد (RCE).
unblock client، processCommandAndResetClientredis-server تنفذ أوامر غير معروفةBLPOP, BRPOP, BRPOPLPUSH, BLMOVE, BLMPOP, BZPOPMIN, BZPOPMAX, BZMPOP, WAIT, WAITAOF, XREAD, XREADGROUP
#### طريقة المعالجة (بدون ترقية)
**الطريقة 1 — الحظر عبر ACL (موصى به):**```bash
# Chặn toàn bộ nhóm lệnh blocking
redis-cli ACL SETUSER default -@blocking
# Hoặc chặn từng lệnh cụ thể
redis-cli ACL SETUSER default -BLPOP -BRPOP -BRPOPLPUSH -BLMOVE -BLMPOP \
-BZPOPMIN -BZPOPMAX -BZMPOP \
-WAIT -WAITAOF \
-XREAD -XREADGROUP
# Lưu ACL
redis-cli ACL SAVE
الطريقة 2 — التعطيل عبر rename-command (يتطلب إعادة تشغيل Redis):```bash
rename-command BLPOP "" rename-command BRPOP "" rename-command BRPOPLPUSH "" rename-command BLMOVE "" rename-command BLMPOP "" rename-command BZPOPMIN "" rename-command BZPOPMAX "" rename-command BZMPOP "" rename-command WAIT "" rename-command WAITAOF "" rename-command XREAD "" rename-command XREADGROUP ""
**الطريقة 3 — تفعيل الوضع المحمي وتقييد الاتصالات:**```bash
redis-cli CONFIG SET protected-mode yes
# Trong redis.conf:
protected-mode yes
bind 127.0.0.1
| الخاصية | القيمة |
|---|---|
| العنوان | وصول غير صالح للذاكرة في أمر RESTORE |
| CVSS 4.0 | 7.7 (عالٍ) |
| CWE | CWE-20 (تحقق غير صحيح من الإدخال) + CWE-122 (تجاوز سعة الكومة) |
| المتجه | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| الشروط | مهاجم مُصادق عليه، لديه صلاحية تنفيذ RESTORE |
| النطاق | جميع إصدارات Redis OSS/CE، وRedis Software <= 8.0.6 |
تتضمن الثغرة مشكلتين فرعيتين:
يقوم مهاجم مُصادق عليه بإرسال حمولة RESTORE مصممة خصيصًا لاستغلال الأخطاء المذكورة أعلاه، مما قد يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) في سياق عملية redis-server.
الطريقة 1 — حظر RESTORE عبر ACL (موصى به):```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SETUSER default -@dangerous
redis-cli ACL SAVE
**الطريقة 2 — تعطيل RESTORE (يتطلب إعادة تشغيل Redis):**```bash
# Thêm vào redis.conf:
rename-command RESTORE ""
الطريقة 3 — إنشاء ACL مستخدم خاص بالتطبيق:```bash
redis-cli ACL SETUSER app_user on >StrongPass123 ~*
+@read +@write
-@dangerous
-@admin
-@scripting
-@blocking
-restore
-debug
redis-cli ACL SAVE
---
### CVE-2026-25588