Статья CVE-2026-35616 FortiClient EMS: разбор уязвимости, вектор атаки и методы обнаружения

Открытый стальной замок лежит на тёмном антистатическом коврике рядом с зелёным сетевым кабелем. Тёплый свет лампы освещает гравировку на корпусе замка, тени насыщены глубоким углём.


Когда я впервые увидел 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 через легитимный канал
  • Доступ к учётным данным и телеметрии со всех подключённых устройств
  • Манипуляция политиками - открытие портов, отключение правил фильтрации
CVSS 9.8 здесь полностью оправдана - компрометация EMS тянет за собой каскадное падение всей endpoint security инфраструктуры.

Анализ 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-35616CVE-2026-21643
ТипImproper Access Control (CWE-284)SQL Injection (CWE-89)
CVSS9.89.8
Затронутые версии7.4.5–7.4.67.4.4
АутентификацияНе требуетсяНе требуется
ВекторCrafted API requestsHTTP-запросы через заголовок 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.
На уровне Windows Event Log мониторьте Sysmon Event ID 1 (Process Creation) для дочерних процессов сервиса EMS. Если процесс веб-сервера FortiClient EMS порождает cmd.exe или powershell.exe - это почти гарантированный индикатор компрометации. В штатном режиме EMS так себя не ведёт.

Сетевые сигнатуры для Suricata/Snort​

Для FortiClient EMS обнаружение атаки на сетевом уровне предполагает мониторинг HTTP-трафика к порту управления EMS (по умолчанию 443 или 8013). На что обращать внимание:
  • HTTP-запросы к API-эндпоинтам EMS без стандартных заголовков аутентификации, но с аномальным телом запроса
  • Ответы сервера с маркерами успешного выполнения команд в ответ на запросы без аутентификации
  • Большие объёмы исходящего трафика от EMS-сервера к нехарактерным внешним IP после серии запросов к API
Концептуальное правило для Suricata ориентировано на HTTP-запросы к известным API-путям FortiClient EMS, в которых отсутствуют стандартные authentication headers, но присутствуют характерные для эксплойта паттерны в теле запроса.

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
Срабатывает, когда служба FortiClient EMS порождает интерпретатор команд - нехарактерное поведение для штатной работы. Имена процессов (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, при котором компрометация одного компонента не роняет всю инфраструктуру каскадом.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab