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.
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).
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:
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.
O sucesso da exploração pode ser verificado a partir do servidor externo que aguardava a shell reversa, conforme demonstrado na imagem 7.
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])