
Уязвимость BDU:2025-05439 (CVE-2025-32756) в продуктах Fortinet
Уязвимость BDU:2025-05439 (CVE-2025-32756) представляет собой критическое переполнение стекового буфера в обработчике HTTP-запросов компонента hostcheck_validate
продуктов Fortinet (FortiVoice, FortiMail, FortiNDR, FortiRecorder, FortiCamera). Она возникает из-за отсутствия проверки границ при декодировании параметра AuthHash
(или enc
). Злоумышленник может отправлять специально сформированные запросы с переполнением буфера, что приводит к выполнению произвольного кода без аутентификации.
Анализ уязвимости
Уровень опасности: 9.8 CRITICAL (CVSS v3.1)
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
-
Attack Vector (AV):N — Сетевая атака (удалённо через интернет).
-
Attack Complexity (AC):L — Низкая сложность эксплуатации (не требует специальных условий).
-
Privileges Required (PR):N — Не нужны привилегии.
-
User Interaction (UI):N — Взаимодействие пользователя не требуется.
-
Scope (S):U — Уязвимость не затрагивает другие компоненты.
-
Confidentiality (C):H — Полное нарушение конфиденциальности.
-
Integrity (I):H — Полное нарушение целостности.
-
Availability (A):H — Полное нарушение доступности.
Условия эксплуатации
-
Доступ к веб-интерфейсу устройства на порту 443/TCP (публично доступен в большинстве сценариев).
-
Использование уязвимых версий ПО.
Уязвимые версии ПО
- FortiNDR (Network Detection and Response) 1.5
- FortiNDR (Network Detection and Response) 1.4
- FortiNDR (Network Detection and Response) 1.3
- FortiNDR (Network Detection and Response) 1.2
- FortiNDR (Network Detection and Response) 1.1
- FortiNDR (Network Detection and Response) 7.1
- FortiCamera от 2.1.0 до 2.1.4
- FortiCamera 2.0
- FortiCamera 1.1
- FortiMail от 7.6.0 до 7.6.3
- FortiMail от 7.0.0 до 7.0.9
- FortiMail от 7.4.0 до 7.4.5
- FortiMail от 7.2.0 до 7.2.8
- FortiNDR (Network Detection and Response) до 7.6.1
- FortiNDR (Network Detection and Response) от 7.4.0 до 7.4.8
- FortiNDR (Network Detection and Response) от 7.2.0 до 7.2.5
- FortiNDR (Network Detection and Response) от 7.0.0 до 7.0.7
- FortiRecorder от 7.2.0 до 7.2.4
- FortiRecorder от 7.0.0 до 7.0.6
- FortiRecorder от 6.4.0 до 6.4.6
- FortiVoice до 7.2.1
- FortiVoice от 7.0.0 до 7.0.7
- FortiVoice от 6.4.0 до 6.4.11
Технический анализ эксплоита
Анализируемый PoC-код к CVE-2025-32756 демонстрирует двухэтапную атаку:
1. Подготовка буфера и вычисление соли
Эксплоит извлекает соль (seed) через запрос к /remote/info
, необходимую для генерации keystream:
def get_salt(self): response = self.session.get(f"{self.base_url}/remote/info", timeout=10) self.salt = "e0b638ac" # Пример статической соли (в реальности парсится из ответа)
Зачем? Соль участвует в создании MD5-хеша для шифрования payload.
2. Генерация вредоносного payload
Payload конструируется из:
-
seed
(фиксированное значение00690000
). -
enc_length
— длина данных, провоцирующая переполнение (5000 байт). -
encrypted_data
— шеллкод, зашифрованный через XOR с keystream:
def compute_keystream(self, initial_state, length): keystream = "" current = initial_state while len(keystream) < length: current = hashlib.md5(bytes.fromhex(current)).hexdigest() keystream += current return keystream[:length]
3. Отправка эксплуатации
Эксплоит отправляет два запроса:
-
Первый (
payload1
) подготавливает память (устанавливает NULL-байт). -
Второй (
payload2
) перезаписывает адрес возврата в стеке:
def send_exploit(self, payload): url = f"{self.base_url}/remote/hostcheck_validate" data = f"enc={urllib.parse.quote(payload)}" self.session.post(url, data=data, headers=headers)
Как достигается RCE? Переполнение перезаписывает адрес возврата функции, перенаправляя выполнение на шеллкод в encrypted_data
. В архитектуре x86 стек растёт вниз, поэтому данные записываются поверх управляющих структур.
Защитные меры
1. Патчинг (приоритетно)
Обновить уязвимые продукты до версий:
-
FortiVoice: 7.2.1+, 7.0.7+, 6.4.11+
-
FortiCamera: 2.1.4+
-
FortiMail: 7.6.3+
2. Сегментация сети
-
Изолировать устройства Fortinet в отдельном VLAN.
-
Запретить прямой доступ к веб-интерфейсам из интернета (только через VPN).
3. Правила для Suricata/IPS
Добавить сигнатуры, блокирующие:
-
Попытки переполнения буфера через параметр
enc
:
alert http any any -> $HOME_NET 443 ( msg:"Fortinet CVE-2025-32756 Exploit Attempt"; flow:to_server; http.uri; content:"/remote/hostcheck_validate"; http.method; content:"POST"; http.request_body; content:"enc="; pcre:"/enc=[0-9a-f]{500,}/"; sid:202532756; rev:1; )
-
Доступ к
/remote/info
без аутентификации:
alert http any any -> $HOME_NET 443 ( msg:"Fortinet Salt Extraction Attempt"; flow:to_server; http.uri; content:"/remote/info"; http.method; content:"GET"; sid:202532757; )
4. Харденинг веб-сервисов
-
Отключить неиспользуемые сервисы (например,
remote/hostcheck_validate
, если не нужен). -
Принудительная валидация входных данных через WAF:
location ~* "/remote/hostcheck_validate" { if ($arg_enc ~ "^.{500}") { return 403; } }
5. Мониторинг аномалий
-
SIEM-правила для выявления частых запросов к
hostcheck_validate
. -
Алармы на подозрительную активность в логах Forti-устройств (например, многократные сбои декодирования
enc
).
Заключение
Уязвимости класса buffer overflow остаются критически опасными из-за ошибок управления памятью в низкоуровневом коде. BDU:2025-05439 (CVE-2025-32756) демонстрирует необходимость:
-
Автоматизированного тестирования на переполнение буферов (инструменты: AFL, Valgrind).
-
Глубокой защиты (ASLR, DEP) даже в firmware-устройствах.
-
Патч-менеджмента как обязательной практики для embedded-систем.
