
# تحليل تقني وإثبات مفهوم لتجاوز CVE-2023-33668 في برنامج مراقبة الاختبارات DigiExam، مع إظهار ضعف كشف الأجهزة الافتراضية وفحوصات سلامة الوحدات الأصلية.
DigiExam هو برنامج مراقبة للامتحانات والإشراف عليها. يُثبَّت البرنامج على أجهزة المدارس (أو أجهزة الطلاب). عند انضمام الطالب إلى امتحان، سيقوم DigiExam بما يلي: التأكد من أنه لا يعمل داخل جهاز افتراضي (Virtual Machine)، وإنهاء جميع التطبيقات، وتفعيل وضع ملء الشاشة، ومنع المستخدم من الانتقال إلى أي شيء آخر غير نافذة DigiExam.
لقد تبيّن أن آليات الكشف الأمني ضعيفة ويمكن تجاوزها بسهولة بمجرد استبدال ملف (يملكه المستخدم) في نظام الملفات. تم تأكيد نجاح هذا الأسلوب في DigiExam الإصدار v14.0.2 ولم يتم اختباره مرة أخرى منذ ذلك الحين (لقد اجتزت امتحاني :)).
الثغرة: يقوم DigiExam (وهو تطبيق Electron) بإسناد كشف الأجهزة الافتراضية (مع معظم الميزات الأمنية) إلى وحدة أصلية تُسمى dx-sec. إن غياب التحقق من السلامة (integrity check) على وحدة dx-sec يسمح باستبدال الوحدة بنسخة معدّلة (patched). يمكن للتعديل تغيير أي ميزات موجودة داخل dx-sec، بما في ذلك كشف الأجهزة الافتراضية (وغيرها، مثل القائمة البيضاء للعمليات غير القانونية، وما إلى ذلك).
عند أول إقلاع له، يقوم تطبيق DigiExam بتنزيل الوحدات الأصلية في %localappdata%\DigiExam\app-14.0.2\resources\app.asar.unpacked\node_modules\%modulename%\build\Release\%modulename.node%. ملفات الـ .node هذه هي (كما يوضح أمر file) PE32 executable (DLL) (GUI) Intel 80386, for MS Windows.
فتح ملف dx-sec في Ghidra والبحث عن النص "Virtual Machine" يعطي الكثير من النتائج ويقود إلى FUN_10020370 - والتي أُعيدت تسميتها إلى detect_virtual_machine (وهذا يعطي رؤى مثيرة للاهتمام حول ما يتم فحصه للكشف عن الأجهزة الافتراضية).

لدى detect_virtual_machine مرجع تقاطعي واحد (xref) إلى FUN_10007ab0 - والتي أُعيدت تسميتها إلى detect_virtual_machine_node_handler - والتي تبدو كنقطة دخول المكتبة لأمور Node (منشئ ومدمِّر حول دالة 'main' الخاصة بنا detect_virtual_machine).

يمكن تعديل detect_virtual_machine بحيث تعود (return) فوراً. الجانب الأيمن من لقطة الشاشة هو النسخة المعدّلة.

سيؤدي هذا إلى تجاوز منطق كشف الأجهزة الافتراضية بالكامل.
كما ذُكر في المقدمة، غالباً ما يُثبَّت DigiExam على أجهزة المدارس المشتركة. بدلاً من تعديل منطق كشف الأجهزة الافتراضية، يمكن للمهاجم استغلال ذلك لتنفيذ كود (code execution) في جلسة أي طالب بمجرد دخوله الامتحان، مما يسمح بهجمات أكثر تدميراً على مستندات الطلاب ومعلوماتهم. تظل الاستمرارية (Persistence) قائمة حتى يتم تحديث DigiExam.