
صُمم هذا السكربت لكشف الثغرة CVE-2024-23113، وهي ثغرة تنسيق سلسلة (Format String) في خدمة FGFM الخاصة بـ FortiGate (بروتوكول FortiGate إلى FortiManager) التي تعمل على منفذ TCP 541. تنشأ الثغرة لأن المهاجم يمكنه التحكم في سلسلة التنسيق، مما قد يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) أو سلوكيات أخرى غير مقصودة. تتيح خدمة FGFM الاتصال بين أجهزة FortiGate وFortiManager لإدارة التكوينات، والإصدارات غير المحدّثة تتعامل مع الإدخال بشكل غير صحيح، مما يجعلها عرضة لاستغلال تنسيق السلسلة.
كيفية عمل السكربت
إعداد الاتصال بالشبكة:
يقوم السكربت أولاً بإعداد اتصال SSL/TLS بالهدف على المنفذ 541.
يستخدم كائن `ssl.SSLContext` مع تعطيل التحقق من الشهادة لإنشاء الاتصال، حيث قد يكون الجهاز مزودًا بشهادات موقّعة ذاتيًا.
بناء الحمولة:
بمجرد الاتصال، يقوم السكربت ببناء حمولة خبيثة باستخدام استغلال تنسيق السلسلة (`authip=%n`). يطلب توجيه `%n` من النظام كتابة عدد البايتات المُخرجة حتى الآن في متغير، مما قد يؤدي إلى تلف الذاكرة.
يتم إرسال الحمولة المُجهزة إلى الهدف عبر الاتصال المُنشأ.
منطق الكشف:
يتحقق السكربت بعد ذلك من سلوك الهدف استجابةً للحمولة.
إذا تم إنهاء الاتصال فجأة وتم إصدار تنبيه SSL، فهذا يشير إلى أن الهدف هش لأنه فعّل آليات الحماية من ثغرات تنسيق السلسلة (مثل `_FORTIFY_SOURCE` في glibc).
إذا بقي الاتصال مفتوحًا، فمن المحتمل أن الهدف مُحدّث.
تعليمات الاستخدام
تشغيل السكربت:
قم بتشغيل السكربت باستخدام Python 3 عن طريق تنفيذ:
sh
python check_vulnerability.py
أدخل اسم المضيف/عنوان IP:
سيُطلب منك إدخال اسم مضيف أو عنوان IP للتحقق مما إذا كان هشًا.
إذا أردت التوقف، اكتب exit.
الإخراج:
إذا كان الهدف هشًا، سيخرج السكربت:
[!] Warning: is vulnerable!
إذا كان الهدف مُحدّثًا، سيخرج:
[+] <hostname> appears to be patched.
المتطلبات
Python 3 مثبت على الجهاز الذي يشغّل السكربت.
إمكانية الوصول عبر الشبكة إلى الجهاز الهدف، مع التأكد من أن المنفذ 541 مفتوح.
يجب أن تكون خدمة FGFM قيد التشغيل على الجهاز الهدف.