Попытки реализации подобных атак позволяют:
- Раскрыть пользовательские и системные данные (T1005);
- Уничтожить информацию в базах данных (T1485);
- Доставить инструменты для получения привилегированного доступа к системе и дальнейшего развития атаки (T1105).
Коротко о продукте:
FortiWeb – межсетевой экран уровня веб-приложений, предназначенный для защиты от эксплуатации уязвимостей.
Описание уязвимости:
CVE-2025-25257 оценена в 9.8 баллов из 10 по шкале CVSSv3.1. Высокая критичность вызвана низкими требованиями для эксплуатации и значительной результативностью – от первоначального воздействия на базу данных до получения полного контроля над системой. Участие пользователя устройства или аутентификационные данные при этом не нужны.
Описание механизма эксплуатации уязвимости:
Слабым звеном продукта является компонент Fabric Connector, отвечающий за обмен информацией между FortiWeb и другими решениями экосистемы Fortinet. Функция fabric_access_check считывает значение токена аутентифицикации из HTTP-заголовка «Authorization», имеющего вид: Authorization: Bearer user_token
После чего user_token используется в функции get_fabric_user_by_token для выполнения SQL-запроса:
select id from fabric_user.user_table where token='user_token'
В результате использование пользовательских данных без фильтрации делает возможным внедрение SQL-инъекции. Для этого злоумышленник должен отправить HTTP-запрос с полезной нагрузкой в заголовке «Authorization» к одному из конечных адресов системы:
/api/fabric/device/status
/api/v[0-9]/fabric/widget/[a-z]+
/api/v[0-9]/fabric/widget
Также стоит отметить, что полезная нагрузка не должна содержать пробелы, поскольку функция чтения токена считывает строку user_token до первого пробела. Вместо пробелов следует использовать конструкцию /**/. Кроме того, длина user_token ограничена 128 символами.
Пример эксплуатации:
С помощью последовательности HTTP-запросов злоумышленник может добавить в существующую таблицу программный код инструмента, затем объединить фрагменты в один файл и осуществить его запуск. Доставка кода инструмента реализуется несколькими запросами с заголовками, содержащими полезную нагрузку. Например:
Authorization: Bearer '/**/;UPDATE/**/fabric_user.user_table/**/SET/**/token=UNHEX('696d706f72');SELECT/**/'1'
Authorization: Bearer '/**/;UPDATE/**/fabric_user.user_table/**/SET/**/token=CONCAT(token,UNHEX('74206f733b'));SELECT/**/'1'
Для извлечения кода инструмента из столбца таблицы и записи в отдельный файл применяется заголовок:
Authorization: Bearer '/**/UNION/**/SELECT/**/token/**/from/**/fabric_user.user_table/**/into/**/outfile/**/'../../lib/python3.10/site-packages/x.pth
Для запуска загруженного инструмента используется запрос к конечному адресу:
/cgi-bin/ml-draw.py
В базах решающих правил AM Rules ПМ доступны способы защиты для описанной CVE. Правило и его описание можно посмотреть на AM TIP.