
Обнаруживает уязвимость строки формата CVE-2024-23113 в сервисе FortiGate FGFM через SSL-соединение на порту 541, отправляя специально созданные полезные нагрузки для проверки восприимчивости к RCE.
Скрипт предназначен для обнаружения CVE-2024-23113 — уязвимости форматной строки в сервисе FGFM FortiGate (протокол FortiGate to FortiManager), работающем на TCP-порту 541. Уязвимость возникает из-за того, что атакующий может контролировать форматную строку, что может привести к удаленному выполнению кода (RCE) или другим нежелательным последствиям. Сервис FGFM обеспечивает связь между устройствами FortiGate и FortiManager для управления конфигурациями, а в неисправленной версии некорректно обрабатываются входные данные, что делает его восприимчивым к эксплуатации форматной строки. Как работает скрипт
Настройка сетевого подключения:
Сначала скрипт устанавливает SSL/TLS-соединение с целью на порту 541.
Для установки соединения используется объект ssl.SSLContext с отключенной проверкой сертификата, так как устройство может использовать самоподписанные сертификаты.
Построение полезной нагрузки:
После подключения скрипт формирует вредоносную полезную нагрузку, используя эксплуатацию форматной строки (authip=%n). Директива %n указывает системе записать количество уже выведенных байтов в переменную, что может привести к повреждению памяти.
Сформированная полезная нагрузка отправляется цели через установленное соединение.
Логика обнаружения:
Затем скрипт проверяет поведение цели в ответ на полезную нагрузку.
Если соединение резко разрывается и возникает SSL-оповещение, это указывает на то, что цель уязвима, так как были активированы механизмы защиты от уязвимости форматной строки (например, _FORTIFY_SOURCE в glibc).
Если соединение остается открытым, цель, скорее всего, исправлена.
Инструкция по использованию
Запуск скрипта:
Запустите скрипт с помощью Python 3, выполнив:
sh
python check_vulnerability.py
Ввод имени хоста/IP:
Вам будет предложено ввести имя хоста или IP-адрес для проверки на уязвимость.
Если вы хотите остановиться, введите exit.
Вывод:
Если цель уязвима, скрипт выведет:
[!] Предупреждение: уязвим!
Если цель исправлена, будет выведено:
[+] <hostname> похоже, исправлен.
Требования
Установленный Python 3 на машине, запускающей скрипт.
Сетевой доступ к целевому устройству, гарантирующий, что порт 541 открыт.
На целевом устройстве должен быть запущен сервис FGFM.