Уязвимость в FortiWeb Fabric Connector позволяет злоумышленникам выполнять удаленные команды без аутентификации

vulnerability

Исследователи кибербезопасности обнаружили критическую уязвимость типа SQL-инъекции в компоненте FortiWeb Fabric Connector от компании Fortinet. Проблема, получившая идентификатор CVE-2025-25257, позволяет неавторизованным злоумышленникам выполнять произвольные SQL-запросы, а в некоторых случаях даже добиваться удаленного выполнения кода на уязвимых системах. Эта уязвимость затрагивает широкий спектр версий FortiWeb, включая 7.6.0 - 7.6.3, 7.4.0 - 7.4.7, 7.2.0 - 7.2.10 и 7.0.0 - 7.0.10. Fortinet уже выпустила исправления в более новых версиях программного обеспечения, и пользователям настоятельно рекомендуется их установить.

FortiWeb Fabric Connector представляет собой промежуточное программное обеспечение, предназначенное для интеграции между брандмауэрами веб-приложений FortiWeb и другими продуктами экосистемы Fortinet. Он обеспечивает динамическое обновление политик безопасности на основе изменений инфраструктуры и данных об угрозах в реальном времени. Однако именно в этом компоненте была обнаружена уязвимость, связанная с недостаточной фильтрацией входных данных.

Технические подробности уязвимости SQL-инъекции

Проблема кроется в функции get_fabric_user_by_token, которая используется в механизме аутентификации FortiWeb. Исследователи выяснили, что эта функция напрямую включает пользовательские данные из HTTP-заголовка Authorization в SQL-запросы без должной валидации или экранирования. Уязвимый код использует форматирование строк, где SQL-запросы формируются по шаблону select id from fabric_user.user_table where token='%s', где %s подставляется из данных, переданных в заголовке Authorization Bearer.

CVE-2025-25257

Хотя функция sscanf ограничивает длину токена 128 символами и прекращает обработку при обнаружении пробела, злоумышленники могут обойти это ограничение, используя синтаксис MySQL-комментариев /\*\*/ вместо пробелов. Это позволяет проводить сложные SQL-инъекции даже при ограничении на длину строки.

В исправленных версиях Fortinet заменила уязвимый код с форматированием строк на подготовленные SQL-запросы с использованием функции mysql_stmt_prepare. Теперь запросы выполняются с параметризованными подстановками (SELECT id FROM fabric_user.user_table WHERE token = ?), что исключает возможность внедрения вредоносного кода.

Но самое тревожное в этой уязвимости - это возможность эскалации до полного удаленного выполнения кода. Эксперты показали, как злоумышленники могут использовать SQL-инъекцию для записи произвольных файлов на сервер с помощью оператора INTO OUTFILE в MySQL, а затем задействовать механизмы Python для выполнения кода.

Атака состоит из нескольких этапов. Сначала злоумышленники внедряют вредоносный .pth-файл в директорию site-packages Python, используя функции MySQL вроде UNHEX() для обхода ограничений на символы. Затем код записывается в базу данных и выгружается через INTO OUTFILE с относительными путями. После этого активируется выполнение кода через скрипт /cgi-bin/ml-draw.py, который загружает вредоносный .pth-файл при запуске.

Меры обнаружения и немедленного реагирования

Для обнаружения попыток эксплуатации уязвимости специалисты рекомендуют мониторить HTTP-запросы к API-эндпоинтам, связанным с Fabric Connector, таким как /api/fabric/device/status, /api/fabric/authenticate и /api/v[0-9]/fabric/widget. Особое внимание следует уделять заголовкам Authorization, содержащим индикаторы SQL-инъекций: одинарные кавычки, MySQL-комментарии (/\*\*/) или логические конструкции вроде 'or'1'='1.

Успешные атаки обычно приводят к HTTP-ответу 200 с JSON-данными о системе, в то время как неудачные попытки на исправленных системах возвращают 401 Unauthorized.

Fortinet выпустила обновления для всех уязвимых версий: 7.6.4 и выше, 7.4.8 и выше, 7.2.11 и выше, 7.0.11 и выше. В качестве временной меры до установки патчей можно ограничить доступ к API-интерфейсам Fabric Connector, но это может нарушить работу интеграции с другими продуктами Fortinet.

Комментарии: 0