
صُمم هذا السكربت لكشف الثغرة CVE-2024-23113، وهي ثغرة في سلسلة التنسيق (format string) في خدمة FGFM الخاصة بـ FortiGate (بروتوكول التواصل بين FortiGate وFortiManager) والتي تعمل على منفذ TCP رقم 541. تحدث الثغرة لأن المهاجم يمكنه التحكم في سلسلة التنسيق، مما قد يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) أو سلوكيات غير مقصودة أخرى. تتيح خدمة FGFM التواصل بين أجهزة FortiGate وFortiManager لإدارة التكوين، والإصدار غير المحدّث لديه معالجة غير سليمة للإدخال، مما يجعله عرضة لاستغلال سلسلة التنسيق. كيف يعمل السكربت
إعداد الاتصال بالشبكة:
يقوم السكربت أولاً بإعداد اتصال SSL/TLS بالهدف على المنفذ 541.
يستخدم كائن ssl.SSLContext مع تعطيل التحقق من الشهادة لإنشاء الاتصال، وذلك لأن الجهاز قد يحتوي على شهادات موقّعة ذاتيًا.
بناء الحمولة (Payload):
بمجرد الاتصال، يقوم السكربت بإنشاء حمولة خبيثة باستخدام استغلال سلسلة التنسيق (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 قيد التشغيل على الجهاز الهدف.