Когда я впервые увидел advisory FG-IR-26-099, опубликованный Fortinet в субботу 4 апреля, первым делом поднял лабу с FortiClient EMS 7.4.6 и проксировал весь трафик через Burp Suite. Через два часа стало понятно: проблема не в отдельном баге, а в архитектурном решении, которое Fortinet принимал ещё на этапе проектирования API-слоя EMS. Там буквально целый endpoint торчит наружу без auth-middleware - и это не случайность, а следствие того, как строился routing. Эта статья - разбор CVE-2026-35616 FortiClient EMS уязвимости от сетевого артефакта до детектирующей сигнатуры. Без пересказа NVD, но с объяснением, почему конкретно этот endpoint оказался открыт и что с этим делать прямо сейчас.
Хронология zero-day: от первого эксплойта до CISA KEV
Прежде чем разбирать механику, зафиксируем таймлайн - без него масштаб проблемы не оценить.По данным watchTowr, первые попытки эксплуатации CVE-2026-35616 были зафиксированы на их honeypot-сети 31 марта 2026 года - за четыре дня до публикации advisory. Исследователь Simo Kohonen из Defused Cyber, обнаруживший уязвимость, подтвердил наблюдение zero-day эксплуатации в LinkedIn-посте. Второй исследователь, Nguyen Duc Anh, тоже указан в credits Fortinet. Сам advisory FG-IR-26-099 появился 4 апреля - в субботу пасхального уикенда. CEO watchTowr Бенджамин Харрис прокомментировал The Hacker News прямо: «Атакующие неоднократно демонстрировали, что праздничные выходные - лучшее время для действий. Security-команды работают в полсилы, дежурные инженеры отвлечены, а окно между компрометацией и детектом растягивается с часов до дней».
Я, если честно не удивлён выбору даты. На одном проекте мы наблюдали похожую картину - атакующие начали ломиться в пятницу вечером перед длинными выходными, когда единственный дежурный SOC-аналитик параллельно разгребал бэклог алертов.
6 апреля CISA включила CVE-2026-35616 в каталог Known Exploited Vulnerabilities (KEV) с дедлайном для федеральных агентств - 9 апреля, три дня на патчинг. Такой агрессивный срок - верный признак того, что CISA уже видела атаки на правительственную инфраструктуру.
На GitHub появился публичный PoC (репозиторий 0xBlackash/CVE-2026-35616). По данным Tenable, на момент публикации PoC не был ими верифицирован, но сам факт наличия публичного эксплойт-кода радикально снижает порог входа. По данным Shadowserver, около 2000 экземпляров FortiClient EMS доступны из интернета (часть из них могут быть honeypot-ами, но погоды это не делает).
Архитектура FortiClient EMS и поверхность атаки
Чтобы понять, почему CVE-2026-35616 настолько опасна, нужно разобраться, что такое FortiClient EMS в корпоративной сети. Это не просто ещё один сервер - это центральный узел управления всеми endpoint-агентами Fortinet в организации.FortiClient EMS — это центральный узел, через который управляются все агенты FortiClient в инфраструктуре. Он отвечает за их установку, настройку, обновления и мониторинг, а также связывает их с остальными продуктами Fortinet.
С точки зрения атакующего, компрометация EMS - джекпот. Вот что получает злоумышленник при захвате контроля над EMS-сервером:
- Управление агентами на всех эндпоинтах: можно отключить защиту - это MITRE ATT&CK техника Disable or Modify Tools (T1562.001, Defense Evasion)
- Развёртывание произвольных пакетов на управляемые машины - фактически встроенный механизм lateral movement через легитимный канал
- Доступ к учётным данным и телеметрии со всех подключённых устройств
- Манипуляция политиками - открытие портов, отключение правил фильтрации
Анализ CVE-2026-35616: Improper Access Control в деталях
Согласно NVD: «A improper access control vulnerability in Fortinet FortiClientEMS 7.4.5 through 7.4.6 may allow an unauthenticated attacker to execute unauthorized code or commands via crafted requests». Классификация - CWE-284 (Improper Access Control). Затронуты версии FortiClient EMS 7.4.5 и 7.4.6.Разбор CVSS-вектора 9.8
ВекторCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - разберём, что это означает на практике:AV:N - эксплуатация по сети, никакого физического доступа не нужно. AC:L - нет race condition, нет сложных цепочек. Отправил запрос - получил результат. PR:N - атакующему не нужна учётка. Pre-auth, что делает баг максимально опасным. UI:N - жертве не нужно кликать по ссылке. Полностью автоматизируемая эксплуатация. S:U - формально импакт ограничен контекстом уязвимого компонента, хотя на практике захват EMS открывает дверь ко всей endpoint-инфраструктуре. C:H/I:H/A:H - полная компрометация конфиденциальности, целостности и доступности.
Один из худших возможных CVSS-векторов. До теоретических 10.0 не дотягивает только Scope: Unchanged вместо Changed. Но в реальности цепочка EMS→endpoints фактически расширяет scope до всей сети.
Механика обхода аутентификации API
По данным Kudelski Security, уязвимость связана с «inadequate validation of user credentials or session tokens for sensitive API endpoints». The Hacker News описывает это как «pre-authentication API access bypass leading to privilege escalation».FortiClient EMS предоставляет REST API для взаимодействия с управляемыми клиентами и административной консолью. В нормальном workflow каждый запрос к защищённым эндпоинтам проходит через middleware аутентификации и авторизации. В уязвимых версиях 7.4.5–7.4.6 специально сформированные HTTP-запросы позволяют полностью обойти этот слой.
Атакующий обращается к API с правами, эквивалентными администратору, без предъявления каких-либо credentials. Классический Exploit Public-Facing Application (T1190, Initial Access) по MITRE ATT&CK, за которым следует выполнение произвольного кода - Windows Command Shell (T1059.003, Execution).
Важная деталь из advisory Tenable: эксплуатация происходит через «specially crafted requests which bypass API authentication». Ключевое слово - «bypass», а не «brute-force» или «injection». Механизм аутентификации не взламывается - он обходится. Для пентестера разница принципиальная: такие баги обычно связаны с ошибками в routing middleware, когда определённые пути или комбинации HTTP-методов и заголовков не попадают под проверку auth-middleware. Видел подобное не раз - разработчики добавляют новый route, забывают навесить auth-декоратор, и endpoint оказывается голым.
Два удара по одной цели: связь с CVE-2026-21643
CVE-2026-35616 - не первая критическая Fortinet zero-day уязвимость в FortiClient EMS за последние недели. Буквально за неделю до неё Defused Cyber зафиксировала эксплуатацию CVE-2026-21643 - SQL-инъекции в FortiClient EMS версии 7.4.4.Сравнение двух уязвимостей:
| Параметр | CVE-2026-35616 | CVE-2026-21643 |
|---|---|---|
| Тип | Improper Access Control (CWE-284) | SQL Injection (CWE-89) |
| CVSS | 9.8 | 9.8 |
| Затронутые версии | 7.4.5–7.4.6 | 7.4.4 |
| Аутентификация | Не требуется | Не требуется |
| Вектор | Crafted API requests | HTTP-запросы через заголовок Site |
| CISA KEV | Да (06.04.2026) | Нет на момент анализа |
| Публичный PoC | Да | Да |
По данным Greenbone, CVE-2026-21643 была внесена при рефакторинге слоя подключения к базе данных в версии 7.4.4 и исправлена в 7.4.5. Эксплуатируемость зависит от включённой функции мультиарендности (multitenancy) через конфигурацию
SITES_ENABLED=True. При отключённой мультиарендности middleware vdom захардкожен и не читает контролируемый атакующим заголовок Site.Для Fortinet CVE анализа вектора атаки картина получается примечательная: организация, которая обновилась с 7.4.4 до 7.4.5, закрыв SQL-инъекцию, тут же попала под новый zero-day - improper access control. Два последовательных критических бага pre-auth RCE в одном продукте за считанные недели - это системная проблема качества кода, а не единичный инцидент. Тут уже не «ой, баг проскочил», а «что-то не так с процессом ревью».
По данным Tenable, на CISA KEV сейчас 24 CVE от Fortinet, причём 13 из них связаны с ransomware-кампаниями. Среди известных APT, эксплуатирующих уязвимости Fortinet - группировка Salt Typhoon.
Маппинг атаки на MITRE ATT&CK
На основе характеристик CVE-2026-35616 и типичных сценариев пост-эксплуатации EMS-серверов вырисовывается такая kill chain:Initial Access - Exploit Public-Facing Application (T1190). Атакующий шлёт crafted HTTP-запросы к API FortiClient EMS, обходя аутентификацию. Входная точка, не требующая ни credentials, ни социальной инженерии.
Execution - Windows Command Shell (T1059.003). После обхода контроля доступа выполняется произвольный код на сервере EMS, который в большинстве развёртываний крутится на Windows Server.
Persistence - Web Shell (T1505.003). Классический ход после получения RCE на веб-сервере - закинуть web shell для постоянного доступа. Также возможно создание Valid Accounts (T1078) через манипуляцию с базой данных EMS.
Defense Evasion - Disable or Modify Tools (T1562.001). Захват EMS даёт прямой доступ к управлению агентами FortiClient - атакующий может тупо деактивировать защиту на конечных точках.
Discovery - System Information Discovery (T1082). Через API EMS доступна полная информация обо всех управляемых устройствах: имена хостов, IP-адреса, версии ОС, статус агентов. Разведка «на блюдечке».
Command and Control - Ingress Tool Transfer (T1105). Через механизм развёртывания пакетов EMS можно загружать произвольные инструменты на управляемые эндпоинты, используя легитимный канал. SOC такой трафик может и не заметить - выглядит как штатное обновление.
Privilege Escalation - Exploitation for Privilege Escalation (T1068). При цепочке с другими уязвимостями или при доступе к сохранённым credentials возможно повышение привилегий в домене.
Обнаружение эксплуатации CVE-2026-35616
Русскоязычные источники ограничиваются рекомендацией «настройте IDS/IPS». Спасибо, кэп. Разберём конкретные подходы к обнаружению атаки на FortiClient EMS.Анализ логов FortiClient EMS
FortiClient EMS ведёт логи в нескольких местах. Основной файл - журнал веб-сервера в каталоге установки EMS. Что искать:- Запросы к API без валидного токена сессии, которые завершились успешно (HTTP 200). В нормальном workflow неаутентифицированные запросы к защищённым endpoint-ам должны возвращать 401/403. Если видите 200 без токена - это красный флаг.
- Аномальные User-Agent строки или их полное отсутствие в запросах к management API.
- Запросы к административным endpoint-ам с внешних IP-адресов, которые не входят в white-list администраторов.
- Появление новых процессов, порождённых процессом веб-сервера EMS -
cmd.exe,powershell.exe,certutil.exeи другие LOLBins.
cmd.exe или powershell.exe - это почти гарантированный индикатор компрометации. В штатном режиме EMS так себя не ведёт.Сетевые сигнатуры для Suricata/Snort
Для FortiClient EMS обнаружение атаки на сетевом уровне предполагает мониторинг HTTP-трафика к порту управления EMS (по умолчанию 443 или 8013). На что обращать внимание:- HTTP-запросы к API-эндпоинтам EMS без стандартных заголовков аутентификации, но с аномальным телом запроса
- Ответы сервера с маркерами успешного выполнения команд в ответ на запросы без аутентификации
- Большие объёмы исходящего трафика от EMS-сервера к нехарактерным внешним IP после серии запросов к API
Sigma-правила для SIEM
Для SIEM-систем наиболее надёжный метод - корреляция нескольких событий. Вот правило, которое ловит подозрительные дочерние процессы от сервисов EMS:
YAML:
title: Suspicious FortiClient EMS Child Process
description: Detects command execution spawned by FortiClient EMS web service
logsource:
category: process_creation
product: windows
detection:
selection:
ParentImage|endswith:
- '\FCMDaemon.exe'
- '\FCMEMSServiceHost.exe'
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\certutil.exe'
- '\mshta.exe'
condition: selection
level: critical
FCMDaemon.exe, FCMEMSServiceHost.exe) уточните под конкретную версию и конфигурацию - в разных инсталляциях могут отличаться.Второй слой детекта - мониторинг сетевых соединений от EMS к нехарактерным адресам:
YAML:
title: FortiClient EMS Outbound Connection to Rare External IP
description: Detects EMS server initiating connections to unusual destinations
logsource:
category: network_connection
product: windows
detection:
selection:
Image|endswith:
- '\FCMDaemon.exe'
Initiated: 'true'
DestinationIsIpv6: 'false'
filter:
DestinationIp|startswith:
- '10.'
- '172.16.'
- '192.168.'
condition: selection and not filter
level: high
Патч и компенсирующие меры для FortiClient EMS
Пошаговое устранение уязвимости
Шаг 1. Определите версию FortiClient EMS. Откройте административную консоль EMS, проверьте версию. CVE-2026-35616 затрагивает только 7.4.5 и 7.4.6. Версия 7.2.x не затронута. Если у вас 7.4.4 - этой CVE вы не подвержены, но уязвимы для CVE-2026-21643 (SQL-инъекция) и обновляться всё равно нужно.Шаг 2. Примените hotfix. Fortinet выпустил экстренные хотфиксы для 7.4.5 и 7.4.6. По данным Greenbone, применение хотфикса не требует простоя (downtime). Загрузите с портала Fortinet PSIRT (advisory FG-IR-26-099) и примените по инструкции. Версия 7.4.7 с полноценным исправлением ещё не вышла на момент анализа.
Шаг 3. Проверьте следы компрометации. Эксплуатация началась минимум 31 марта, advisory вышел 4 апреля - окно exposure составляет минимум четыре дня. Проведите ретроспективный анализ логов за этот период. Ищите признаки из раздела обнаружения: подозрительные дочерние процессы, аномальные API-запросы, нехарактерные исходящие соединения. Если EMS торчал наружу все эти дни - считайте, что вас уже пощупали.
Шаг 4. Изолируйте EMS от внешнего доступа. Если FortiClient EMS доступен из интернета - это нужно исправить немедленно, независимо от версии. Административный интерфейс EMS - только из выделенного management-сегмента. White-list IP на уровне межсетевого экрана. Взаимодействие агентов с EMS - через отдельный порт с минимально необходимыми правами.
Шаг 5. Настройте мониторинг. Разверните Sigma-правила из раздела выше в вашем SIEM. Алертинг на создание дочерних процессов от сервисов EMS. Suricata/Snort - правила для мониторинга HTTP-трафика к API EMS.
Шаг 6. Пересмотрите сегментацию. Даже после патча FortiClient EMS остаётся высокоценной целью. EMS-сервер - в отдельный сегмент с ограниченными исходящими соединениями. WAF перед management-интерфейсом для фильтрации аномальных HTTP-запросов. Да, это лишний слой, но когда (не «если», а «когда») прилетит следующий zero-day - он спасёт.
Контекст Fortinet zero-day 2026 и уроки для security-команд
Две критические pre-auth уязвимости в FortiClient EMS за несколько недель - не аномалия, а тренд. 24 CVE от Fortinet в каталоге CISA KEV, 13 связаны с ransomware-кампаниями. Fortinet endpoint security уязвимости систематически эксплуатируются APT-группировками, включая Salt Typhoon.Для организаций на продуктах Fortinet это означает стратегический пересмотр подхода:
Для пентестеров. При внешнем тестировании всегда проверяйте наличие FortiClient EMS в скоупе. Tenable-плагины или баннерные проверки Greenbone помогут идентифицировать уязвимые версии. FortiClient EMS нередко торчит наружу - по данным Shadowserver, около 2000 инстансов доступны из интернета. Вот теперь добавляю проверку EMS в стандартный чеклист внешней разведки.
Для security engineers. Не полагайтесь на один уровень защиты. Даже запатченный FortiClient EMS может упасть через будущий zero-day - вопрос времени, не вероятности. Архитектурно ограничьте blast radius: сегментация, мониторинг, минимальные привилегии для сервисных учёток EMS.
Для SOC-аналитиков. FortiClient EMS - в перечень критических активов с повышенным уровнем мониторинга. Любая аномалия в поведении сервисов EMS - немедленная эскалация. Особое внимание на праздничные и выходные дни: как показал кейс с CVE-2026-35616, атакующие намеренно выбирают моменты, когда реакция защитников замедлена.
CVE-2026-35616 FortiClient EMS - не очередной критический баг, а демонстрация системной проблемы: продукты, призванные защищать инфраструктуру, сами становятся вектором атаки. Проверьте версию вашего EMS прямо сейчас. Если 7.4.5 или 7.4.6 - накатите хотфикс и прогоните логи за период с 31 марта. Если EMS смотрит в интернет - закройте доступ до конца дня. Единственный рабочий ответ на подобные баги - defence in depth, при котором компрометация одного компонента не роняет всю инфраструктуру каскадом.
Последнее редактирование модератором: