O analista de segurança da Tempest, Silton Santos, descobriu recentemente uma vulnerabilidade nos softwares Trend Micro Premium Security, Maximum Security, Internet Security e Antivirus + Security em suas versões para o Windows; a falha está relacionada com uma má implementação na função CreateProcess a partir da execução da funcionalidade PC Health Checkup presente nestes softwares e pode, caso explorada, levar à obtenção de privilégios elevados.

Responsável pela criação de novos processos, a função CreateProcess é representada pelo seguinte código:

    BOOL CreateProcessA(

    LPCSTR lpApplicationName,

    LPSTR lpCommandLine,

    LPSECURITY_ATTRIBUTES lpProcessAttributes,

    LPSECURITY_ATTRIBUTES lpThreadAttributes,

    BOOL bInheritHandles,

    DWORD dwCreationFlags,

    LPVOID lpEnvironment,

    LPCSTR lpCurrentDirectory,

    LPSTARTUPINFOA lpStartupInfo,

    LPPROCESS_INFORMATION lpProcessInformation

    );

Para implementar essa função, um dos parâmetros requeridos é o lpApplicationName, no qual é fornecido o nome ou caminho do módulo a ser executado; no entanto, de acordo com documentação da Microsoft, caso o valor inserido neste parâmetro contenha espaços, será necessário o uso de aspas (“) para indicar o ponto onde termina o nome do arquivo e onde iniciam os argumentos para a sua execução.

Isso significa que, durante a criação de um processo hipotético, um diretório C:\Program Files\Diretorio abc\Diretorio def\exemplo.exe seria interpretado na ordem a seguir, até um executável válido ser encontrado

• C:\Program.exe

• C:\Program Files\Diretorio.exe

• C:\Program Files\Diretorio abc\Diretorio.exe

• C:\Program Files\Diretorio abc\Diretorio def\exemplo.exe

Esta recursividade se deve à falta das aspas (“) no caminho definido no referido parâmetro, o que levará o sistema operacional a tentar definir o início do caminho do arquivo a ser executado e quais são os argumentos deste arquivo. Isso se dá ao executar a ferramenta PC Health Checkup, uma das funcionalidades das soluções de segurança.

Ao executar a ferramenta, o processo coreServiceShell tenta carregar o executável PwmConsole de forma recursiva. Na imagem 01 é possível observar que o coreServiceShell tenta executar os arquivos C:\Program.exe e C:\Program Files\Trend.exe antes de executar o C:\Program Files\Trend\TMIDS\PwmConsole.exe. Observa-se também que essas tentativas de execução são realizadas por um processo do usuário NT AUTHORITY\SYSTEM.

Imagem 01 — Captura com Procmon, durante o monitoramento das operações com arquivos.

Paralelamente a esta execução, a DLL plugServiceBundle.dll foi carregada pelo processo coreServiceShell (Imagem 02); entre as funções desta DLL está a função CreateProcessW (Imagem 03).

Imagem 02 — DLL plugServiceBundle.dll carregada no processo coreServiceShell

Imagem 03 — Função CreateProcessW instanciada na DLL plugServiceBundle.dll

Partindo do pressuposto que um atacante possui permissão de escrita em C:\ ou em C:\Program Files\, ele poderia inserir um executável arbitrário chamado de Program.exe ou Trend.exe e esses seriam executados pelo processo coreServiceShell, herdando seu privilégio de usuário NT AUTHORITY\SYSTEM.

Para provar o conceito, foi desenvolvido um executável malicioso que posteriormente foi copiado no caminho C:\Program.exe, conforme ilustrado na Imagem 04:

Imagem 04 — Arquivo malicioso em C:\

Ao executar a ferramenta PC Helth Checkup (Imagem 05) um processo é criado com privilégio SYSTEM (Imagem 06) a partir da execução do programa malicioso.

Imagem 05 — Botão Start para iniciar a funcionalidade com a vulnerabilidade
Imagem 06 — Program.exe em execução

O sucesso da exploração pode ser verificado a partir do servidor externo que aguardava a shell reversa, conforme demonstrado na imagem 7.

Imagem 07: Shell reversa com permissão System

A vulnerabilidade foi reconhecida e registrada pela própria Trend Micro através do CVE-2019–14685. Segundo o boletim de segurança liberado no último dia 14, patches de correção já foram liberados e devem ser instalados através da ferramenta ActiveUpdate.

Report Timeline

  • 24/04/2019 — Início do Responsible Disclosure com a Trend;
  • 25/04/2019 — Trend iniciou a análise da issue;
  • 10/05/2019 — Trend solicitou mais informações sobre a PoC realizada. E-mail enviado com as informações solicitadas;
  • 22/05/2019 — Trend enviou um update e solicitou um teste de correção;
  • 27/05/2019 — Respondido e-mail dizendo que o update solucionado o problema;
  • 28/05/2019 — Trend agradeceu a confirmação e avisou que estava providenciando o release público e após a finalização, iria providenciar o CVE, liberar a divulgação pública e inserir o nome na sessão de Acknowledgment na página de Vulnerability Responses;
  • 04/06/2019 — Trend comunica que o release está previsto para ser liberado em Julho e somente após o lançamento do release seria fornecido o CVE;
  • 31/07/2019 — Vendor comunica que existe um release público e solicita a validação da correção novamente. E-mail enviado confirmando a validação e solicitando o CVE;
  • 13/08/2019 — Foi reservado o CVE e a URL para o security advisory (a publicação ocorreu no dia seguinte [14/08])