
ماسح ضوئي آمن وغير تدخلي يكتشف ثغرة الكتابة خارج الحدود في SSL VPN الخاص بـ FortiOS (CVE-2024-21762) من خلال مقارنة استجابات HTTP POST العادية والمجزأة.
| الحقل | القيمة |
|---|
| CVE | CVE-2024-21762 |
| الإعلان الأمني | FG-IR-24-015 |
| CVSS | 9.8 (حرجة) |
| CWE | CWE-787 (كتابة خارج الحدود) |
| CISA KEV | نعم - تم استغلالها بنشاط في البيئة الحقيقية |
| ناقل الهجوم | شبكة (بدون مصادقة) |
| المكون المتأثر | sslvpnd (خدمة SSL VPN) |
ثغرة كتابة خارج الحدود في FortiOS SSL VPN تسمح لمهاجم عن بعد غير مصادق بتنفيذ تعليمات برمجية أو أوامر عشوائية عبر طلبات HTTP مصممة خصيصًا. توجد الثغرة في محلل ترميز نقل البيانات المجزأة (chunked transfer encoding) داخل sslvpnd. عندما يتلقى الخدمة طلب POST مع Transfer-Encoding: chunked، فإنها تفشل في التحقق من أحجام الأجزاء بشكل صحيح، مما يتسبب في كتابة خارج الحدود في الكومة (heap).
| الفرع | المتأثر | المُصلَح |
|---|---|---|
| FortiOS 7.4 | 7.4.0 - 7.4.2 | 7.4.3 |
| FortiOS 7.2 | 7.2.0 - 7.2.6 | 7.2.7 |
| FortiOS 7.0 | 7.0.0 - 7.0.13 | 7.0.14 |
| FortiOS 6.4 | 6.4.0 - 6.4.14 | 6.4.15 |
| FortiOS 6.2 | 6.2.0 - 6.2.15 | 6.2.16 |
| FortiOS 6.0 | جميع الإصدارات | الترحيل |
يقارن السكريبت استجابة الخادم لطلب POST عادي مقابل طلب POST مع Transfer-Encoding: chunked إلى نفس نقطة النهاية الصالحة (/remote/logincheck).
Content-Length: يعالج الخادم الطلب ويعيد استجابة HTTP (200 OK).Transfer-Encoding: chunked: في الإصدارات المعرضة للخطر، لا يستطيع sslvpnd التعامل مع الترميز المجزأ ويغلق الاتصال دون استجابة (0 بايت).يكشف هذا السلوك التفاضلي عن الثغرة دون تشغيل الكتابة خارج الحدود الفعلية.
Normal POST --> HTTP/1.1 200 OK (N bytes)
Chunked POST --> Connection closed (0 bytes) <-- VULNERABLE (قابلة للاستغلال)
Normal POST --> HTTP/1.1 200 OK (N bytes)
Chunked POST --> HTTP/1.1 200 OK (N bytes) <-- PATCHED (مُصلَحَة)
python cve_2024_21762_safecheck.py <host> <port>
$ python cve_2024_21762_safecheck.py 10.0.0.1 8443
[*] Target: 10.0.0.1:8443
[*] CVE-2024-21762 - Out-of-Bounds Write in sslvpnd (CVSS 9.8)
[*] Method: Compare normal POST vs chunked POST response
[*] Test 1: Normal POST to /remote/logincheck
Response: HTTP/1.1 200 OK
Size: 722 bytes
[*] Test 2: Chunked POST to /remote/logincheck
Response: empty (connection closed by server)
============================================================
[!] VULNERABLE to CVE-2024-21762
Normal POST works but chunked TE causes connection
drop -> sslvpnd cannot handle chunked TE
Severity: CRITICAL (CVSS 9.8)
CISA KEV: Yes (actively exploited in the wild)
============================================================
| النتيجة | المعنى |
|---|---|
VULNERABLE | طلب POST عادي يستجيب، بينما يقطع طلب POST المجزأ الاتصال |
PATCHED | كلا الطلبين يتلقى استجابة HTTP |
INCONCLUSIVE | لم يتلق أي من الطلبين استجابة (قد يكون الحد المعدل نشطًا، أعد المحاولة لاحقًا) |
/remote/logincheck. إذا حصلت على INCONCLUSIVE، انتظر بضع دقائق وأعد المحاولة./remote/VULNCHECK. قد لا يُرجع هذا المسار رمز 403 المتوقع في جميع إصدارات FortiGate، مما يؤدي إلى نتائج غير موثوقة. يستخدم هذا السكريبت /remote/logincheck وهي نقطة نهاية SSL VPN صالحة معروفة.