
إثبات المفهوم لـ CVE-2024-43018: حقن SQL في Piwigo 13.8.0 عبر معلمات max_level و min_register غير المعقمة، مما يتيح كشف المعلومات واحتمال تنفيذ التعليمات البرمجية.
أثناء البحث الخاص بالأطروحة https://hdl.handle.net/10316/118126 وhttps://hdl.handle.net/10316/118059، تم اكتشاف ثغرة أمنية جديدة في تطبيق Piwigo. تنبع هذه الثغرة من عدم تعقيم بعض المعاملات في بحث مُصفّى من النقطة التالية، HOST/admin.php?page=user_list.
وبشكل أكثر تحديداً، فإن الإصدار Piwigo 13.8.0 وما يسبقه عرضة لحقن SQL في المعاملين max_level وmin_register. تُستخدم هذه المعاملات في الدالة ws_user_gerList من الملف include\ws_functions\pwg.users.php، ويمكن استخدام هذه الدالة نفسها (التي يتم استدعاؤها من ملف ws.php في مرحلة ما) للبحث عن المستخدمين بطريقة متقدمة في /admin.php?page=user_list. قد يؤدي هذا إلى عدة عواقب مثل "تنفيذ الكود" و"كشف المعلومات" من خلال التلاعب باستعلامات SQL، لذا يجب تعقيم هذه المعاملات قبل استخدامها في أي استعلامات SQL. يؤثر هذا على الإصدار 12.2.0 وقد يؤثر على الإصدارات المستقبلية، حيث توجد ثغرة مشابهة لهذه مُبلَّغ عنها في الإصدار 13.8.0.
يتم تجميع المعاملين المذكورين (max_level وmin_register) في متغير يستخدمهما في تنفيذ استعلام SQL:

أولاً، ادخل إلى الصفحة HOST/admin.php?page=user_list

بمتابعة الطلب المرسل عبر Firefox، يمكننا أن نرى أن هناك عدة معاملات

إذا قمنا بالتلاعب بالمعاملين 'max_level' و'min_register' لتضمين علامة اقتباس ثم أعدنا إرسال الطلب، فسيظهر خطأ MYSQL (حتى مع عرض استعلام SQL المنفَّذ)، مما يثبت وجود ثغرة حقن SQL في كلا الحقلين.
'max_level'

'min_register'

حتى الآن، وضع المطوّرون إصلاحاً لهذه المشكلة، وهو ببساطة نهج القائمة البيضاء (white list)، كما ذُكر في: https://github.com/Piwigo/Piwigo/issues/2197. هذا بالطبع ليس الحل الأفضل، إذ كان من الأفضل إضافة استعلامات مُعلمة (parameterized queries)، ولكن نظراً لعدم إمكانية ذلك (بسبب مخاوف لوجستية ذكرها المطوّرون) فمن المستحسن استخدام جدار حماية تطبيقات الويب (WAF) لإضافة طبقة حماية إضافية.