
CVE-2024-21762 هو ثغرة أمنية خطيرة في منتجات FortiOS وFortiProxy من شركة Fortinet، وتوجد في مكوّن SSL VPN الخاص بها.
CVE-2024-21762 هو ثغرة أمنية خطيرة في منتجات FortiOS وFortiProxy من شركة Fortinet، وتوجد في مكوّن SSL VPN الخاص بها. تسمح هذه الثغرة لمهاجم عن بُعد غير مصادَق بتنفيذ كود أو أوامر عشوائية على النظام المستهدف عبر طلبات HTTP مُعدّة خصيصًا، مما قد يؤدي إلى السيطرة الكاملة على النظام.
الضرر: بسبب وجود هذه الثغرة، يمكن للمهاجم تنفيذ كود عشوائي عن بُعد دون الحاجة إلى أي مصادقة، وبالتالي السيطرة الكاملة على الأجهزة المتأثرة. قد يؤدي ذلك إلى تسريب بيانات حساسة، وانقطاع الخدمات، وحتى هجمات شبكية إضافية.
طريقة الهجوم: الوسيلة الرئيسية التي يستخدمها المهاجم لاستغلال هذه الثغرة هي إرسال طلبات HTTP مُعدّة خصيصًا لتفعيل ثغرة الكتابة خارج الحدود (Out-of-Bounds Write) في مكوّن SSL VPN. على وجه التحديد، يمكن للمهاجم من خلال طلبات مُصمّمة بعناية التلاعب بالبيانات في الذاكرة، مما يؤدي في النهاية إلى تنفيذ كود عن بُعد.
إجراءات الحماية: للحماية من الهجمات التي تستغل هذه الثغرة، يُنصح بترقية FortiOS وFortiProxy فورًا إلى أحدث الإصدارات الأمنية الرسمية المتوفرة. بالإضافة إلى ذلك، يُعد تعطيل ميزة SSL VPN إجراءً وقائيًا مؤقتًا.
CVE-2024-21762 هي ثغرة عالية الخطورة في Fortinet FortiOS SSL VPN، وتصنّف ضمن ثغرات الكتابة خارج الحدود غير المصرح بها. قد تُستخدم هذه الثغرة لتنفيذ كود عن بُعد (RCE)، مما يشكل تهديدًا لأمن الشبكات المؤسسية.
أصدرت FortiGate تحديثًا في فبراير 2024 لإصلاح العديد من الثغرات متوسطة وعالية الخطورة. من بينها، يركز هذا المقال على تحليل عملية استغلال CVE-2024-21762، بما في ذلك كيفية استخدام هذه الثغرة لتحقيق تنفيذ كود عن بُعد.
كود PoC التالي مقدم من assetnote، ويعرض الخطوات الأساسية لاستغلال هذه الثغرة.
# مقتطف كود استغلال مبسط
ssl_do_handshake_ptr = b"%60%ce%42%00%00%00%00%00" # مؤشر SSL handshake
getcwd_ptr = b"%70%62%2c%04%00%00%00%00" # مؤشر دالة getcwd
pivot_1 = b"%52%f7%fd%00%00%00%00%00" # مجموعة تعليمات pivot 1
pivot_2 = b"%ac%c9%ab%02%00%00%00%00" # مجموعة تعليمات pivot 2
rop = b"" # سلسلة ROP
rop += b"%c6%e2%46%00%00%00%00%00"
rop += b"%19%6f%4d%01%00%00%00%00"
# ... باقي محتوى سلسلة ROP محذوف
# بيانات الطلب المزيف
body = (b"B"*1808 + b"=" + b"B"*1024 + b"&") * 20
data = b"POST /remote/hostcheck_validate HTTP/1.1\r\n"
data += b"Host: 192.168.1.229\r\n"
data += f"Content-Length: {len(body)}\r\n".encode("utf-8")
data += b"\r\n" + body
# إرسال الطلب المزيف
ssock1 = make_sock(TARGET, PORT)
ssock1.sendall(data)
من خلال مقارنة الملفات الثنائية لـ FortiOS 7.4.2 و7.4.3، يقع الكود المُصلَح في الدالة sub_18F4980. يتركّز الإصلاح على النقطتين التاليتين:
chunk، تمت إضافة التحقق من طول chunk. إذا تجاوز الطول المُفكَّك 16، يُعتبر غير قانوني.chunk trailer لمنع الكتابة خارج الحدود لـ \r\n.تفعيل الكتابة خارج الحدود:
chunk، إذا كان حقل الطول يُفكَّك إلى 0، يتم تفعيل قراءة chunk trailer.chunk trailer، يتم كتابة \r\n إلى المكدس (Stack) بناءً على حقل الطول.\r\n خارج الحدود بالقرب من عنوان العودة (Return Address).تجاوز المكدس والاستيلاء على التحكم:
chunk مُصمّمة بعناية، يمكن الكتابة فوق عنوان العودة في المكدس، بهدف الاستيلاء على تدفق التحكم في البرنامج.على الرغم من إمكانية الاستيلاء على التحكم عبر سلسلة ROP، إلا أن البرنامج الرئيسي لـ FortiGate لا يمتلك القدرة على تنفيذ الأوامر مباشرة عبر /bin/sh، لذلك يلزم البحث عن دوال أخرى قابلة للاستغلال. على سبيل المثال، من خلال تزوير مؤشرات الهياكل (Struct Pointers)، يمكن استخدام SSL_do_handshake لمزيد من الهجمات.
حتى في الإعدادات الافتراضية (مع تعطيل وضع الويب)، لا تزال هذه الثغرة قابلة للاستغلال.

CVE-2024-21762 هي ثغرة ذات تعقيد عالٍ، وتتطلب عملية استغلالها فهمًا عميقًا لمنطق كود FortiOS وتخطيط ذاكرته. مقارنةً بمسائل CTF التقليدية، يتطلب استغلال الثغرات الحقيقية تحليلًا أكثر تعقيدًا للسياق والبنية.
قدّم المؤلف مقالًا تحليليًا أكثر تفصيلًا باللغة الصينية، يمكن الرجوع إليه عبر: الرابط الأصلي