
CVE-2026-35616 के लिए गैर-विनाशकारी स्कैनर, FortiClient EMS में एक प्री-ऑथेंटिकेशन API बायपास। HTTP प्रतिक्रियाओं की तुलना करके, बिना और साथ में स्पूफ किए गए SSL हेडर के, केवल Python मानक लाइब्रेरी का उपयोग करके भेद्यता का पता लगाता है।
सुरक्षित रूप से पता लगाएं कि क्या कोई FortiClient EMS सर्वर CVE-2026-35616 के प्रति संवेदनशील है, बिना किसी व्यवधान के। पूर्ण लेख देखें बिशप फॉक्स ब्लॉग पर।
CVE-2026-35616 FortiClient EMS 7.4.5 और 7.4.6 में एक पूर्व-प्रमाणीकरण API बाईपास है जो दूरस्थ, अप्रमाणित हमलावरों को HTTP हेडर स्पूफिंग के माध्यम से प्रमाणपत्र-आधारित प्रमाणीकरण को बायपास करने की अनुमति देता है। Django एप्लिकेशन उपयोगकर्ता-नियंत्रणीय HTTP हेडर (X-SSL-CLIENT-VERIFY, X-SSL-CLIENT-CERT) को Apache mod_ssl WSGI पर्यावरण चर के समतुल्य मानता है, और Apache कॉन्फ़िगरेशन उन्हें कभी नहीं हटाता। प्रमाणपत्र श्रृंखला सत्यापन के साथ मिलकर जो केवल विशिष्ट नाम स्ट्रिंग मिलान करता है (कोई क्रिप्टोग्राफिक हस्ताक्षर सत्यापन नहीं), एक हमलावर प्रमाणपत्र जाली बना सकता है और प्रमाणित API पहुँच प्राप्त कर सकता है। Fortinet ने जंगली में शोषण की पुष्टि की है।
यह उपकरण निम्नलिखित द्वारा गैर-विनाशकारी भेद्यता परीक्षण करता है:
/api/v1/fabric_device_auth/fortigate/init पर एक बेसलाइन POST भेजनाX-SSL-CLIENT-VERIFY: SUCCESS के साथ लेकिन बिना प्रमाणपत्र डेटा के भेजनाबिना प्रमाणपत्र PEM डेटा के वेरिफाई हेडर भेजने से डिटेक्शन पथ ट्रिगर होता है लेकिन प्रमाणित नहीं कर सकता क्योंकि कोई प्रमाणपत्र श्रृंखला प्रदान नहीं की गई है। सर्वर स्थिर रहता है और कनेक्शन को संभालना जारी रख सकता है।
contains_certificate() गेट पास करता है लेकिन validate_cert_chain() लापता PEM डेटा पर क्रैश हो जाता है।RequestHeader unset निर्देश जोड़ता है जो Django तक पहुँचने से पहले स्पूफ हेडर को हटा देते हैं।INCONCLUSIVE परिणाम रिपोर्ट करता है।git clone https://github.com/BishopFox/CVE-2026-35616-check
cd CVE-2026-35616-check
कोई बाहरी निर्भरता नहीं। स्कैनर केवल Python मानक पुस्तकालय मॉड्यूल का उपयोग करता है।
<TARGET>:<PORT> पर एक FortiClient EMS सर्वर का परीक्षण करें। डिफ़ॉल्ट पोर्ट 443/TCP है।
python3 CVE-2026-35616-check.py <TARGET> [PORT]
$ python3 CVE-2026-35616-check.py 192.168.1.1
======================================================================
FortiClient EMS CVE-2026-35616 Vulnerability Scanner
Non-Destructive Detection
======================================================================
[*] Target: 192.168.1.1:443
[*] Testing for CVE-2026-35616 (non-destructive)
[1] Sending baseline POST (no spoof headers)... HTTP 401
[2] Sending POST with X-SSL-CLIENT-VERIFY: SUCCESS... HTTP 500
[*] Analyzing responses...
[+] Baseline: 401 — Certificate not found in request header.
[+] Spoofed: 500 — Server encountered an error, please try again later.
[!] Spoofed header changed server behavior
[!] X-SSL-CLIENT-VERIFY is reaching Django (hotfix not applied)
======================================================================
RESULT: VULNERABLE to CVE-2026-35616
Affected versions: FortiClient EMS 7.4.5 - 7.4.6
Recommendation: Apply Fortinet hotfix or upgrade to 7.4.7+
======================================================================
$ python3 CVE-2026-35616-check.py 192.168.1.1
======================================================================
FortiClient EMS CVE-2026-35616 Vulnerability Scanner
Non-Destructive Detection
======================================================================
[*] Target: 192.168.1.1:443
[*] Testing for CVE-2026-35616 (non-destructive)
[1] Sending baseline POST (no spoof headers)... HTTP 401
[2] Sending POST with X-SSL-CLIENT-VERIFY: SUCCESS... HTTP 401
[*] Analyzing responses...
[+] Baseline: 401 — Certificate not found in request header.
[+] Spoofed: 401 — Certificate not found in request header.
[-] Responses identical (header stripped by Apache)
======================================================================
RESULT: NOT VULNERABLE (hotfix applied)
Apache is stripping X-SSL-CLIENT-VERIFY before it reaches Django
======================================================================
उपकरण केवल तभी भेद्यता का पता लगा सकता है यदि निम्नलिखित शर्तें पूरी हों:
/api/v1/fabric_device_auth/fortigate/init एंडपॉइंट मौजूद हो और cert_chain_approved प्रमाणीकरण का उपयोग करता होयदि कोई भी शर्त पूरी नहीं होती है, तो उपकरण INCONCLUSIVE परिणाम रिपोर्ट करेगा।
यह कोड MIT लाइसेंस के अंतर्गत वितरित किया जाता है।
इस उपकरण का उपयोग पूर्व आपसी सहमति के बिना लक्ष्यों पर हमला करने के लिए अवैध है। सभी लागू स्थानीय, राज्य और संघीय कानूनों का पालन करना अंतिम उपयोगकर्ता की जिम्मेदारी है। डेवलपर्स कोई देयता नहीं मानते हैं और इस प्रोग्राम के कारण होने वाले किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं हैं।