← back
CVE-2019-8394highunder attackCWE-434

CVE-2019-8394

98Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 7.5epss 63%
from disclosure to weapon1 days
Published on NVDFeb 17
1st PoC+1d
metasploitAug 20
CISA KEV+990d
exploitation probability
63%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
2 public exploit(s)
Action required by CISAfederal deadline: 2022-05-03

Apply updates per vendor instructions.

Summary

Falha de upload de arquivo arbitrário no ManageEngine ServiceDesk Plus (SDP) que permite depositar um webshell JSP no servidor através da funcionalidade de personalização da página de login. Está no catálogo KEV da CISA desde novembro de 2021, tem exploit público desde o dia seguinte à divulgação e módulo Metasploit — ou seja, é trivial de operacionalizar por qualquer atacante com as condições de acesso certas.

Technical detail

A vulnerabilidade (CWE-434, Unrestricted Upload of File with Dangerous Type) está no endpoint /common/FileAttachment.jsp. Segundo a análise do pesquisador que publicou o PoC, na linha 332 desse arquivo a validação de extensão de upload só é aplicada quando o parâmetro 'module' da requisição é igual a 'SSP', 'DashBoard' ou 'HomePage'. Quando o atacante define module=CustomLogin — o fluxo usado para personalizar a página de login com logo, HTML etc. — essa checagem é completamente pulada.

Com module=CustomLogin, o arquivo enviado é gravado diretamente na pasta /custom/login/ do servidor, sem qualquer filtro de extensão ou de conteúdo. Como essa pasta é servida publicamente pela aplicação web, um arquivo .jsp depositado ali fica acessível e executável via host:porta/custom/login/nomedoarquivo — dando execução de código no contexto do servidor de aplicação.

O atacante controla três coisas: o valor do campo 'module' na requisição multipart, o nome do arquivo (extensão .jsp) e o conteúdo do arquivo — que pode ser um webshell completo. Não há sanitização de path nem de tipo MIME nesse fluxo específico, apenas nos outros três valores de 'module' listados.

How it’s exploited

O PoC público envia uma requisição POST multipart para /common/FileAttachment.jsp com module=CustomLogin e um arquivo com extensão .jsp anexado, seguida do acesso direto à URL resultante para executar o webshell. Isso dá execução remota de código sobre o servidor onde o SDP está instalado.

Aqui está o ponto que a manchete e o CVSS (PR:N) escondem: a descrição técnica do próprio autor do exploit afirma que é necessário um usuário autenticado, mesmo que com permissão mínima (o exemplo dado é 'guest'). Isso é uma exigência real de pré-condição que o vetor CVSS 3.1 publicado (AV:N/AC:L/PR:N/UI:N) não reflete adequadamente — divergência entre o que o CVSS registra e o que o pesquisador demonstrou. Em instalações que permitem auto-registro de usuários, contas de convidado padrão, ou portal de autoatendimento aberto, a barreira de autenticação praticamente desaparece.

A presença no catálogo KEV da CISA confirma exploração ativa em campanhas reais, embora a CISA não detalhe atores ou volume. A combinação de PoC público, módulo Metasploit disponível e exposição comum do SDP à internet (é uma ferramenta de service desk frequentemente publicada para acesso externo de técnicos e usuários) torna a barra de exploração baixa para quem já tem qualquer credencial válida no sistema.

Versions

Affected
ManageEngine ServiceDesk Plus (SDP) versão 9.4 e 10.0 em builds anteriores à 10.0 build 10012, segundo o exploit publicado. A descrição oficial do CVE cita apenas 'before 10.0 build 10012'.
Fixed in
10.0 build 10012 e versões posteriores. Não foi possível confirmar nas fontes consultadas builds específicas de correção além dessa referência.

How to protect

A correção do fornecedor é atualizar para a build 10012 da série 10.0 do ServiceDesk Plus ou posterior — a numeração exata de builds subsequentes não foi confirmada nas fontes consultadas, então a orientação prática é aplicar a versão mais recente disponível no canal oficial de atualizações do produto e confirmar que a build instalada é igual ou superior a 10.0.10012. A entrada no KEV da CISA recomenda genericamente 'aplicar atualizações conforme instruções do fornecedor', sem detalhar versão-alvo.

Se a atualização imediata não for viável, um controle compensatório é restringir ou desabilitar a funcionalidade de personalização da página de login (CustomLogin) até a atualização, e bloquear via proxy/WAF requisições POST para /common/FileAttachment.jsp que contenham module=CustomLogin com anexos de extensão .jsp/.jspx/.war. Também vale auditar e remover manualmente qualquer arquivo inesperado em custom/login/ no servidor.

O que não funciona como mitigação: restringir apenas o acesso de usuários administrativos, já que o vetor documentado funciona com contas de permissão mínima (guest). Também não basta bloquear a extensão .jsp no upload via frontend, pois a falha está na ausência de validação no lado servidor — qualquer controle precisa atuar na própria requisição HTTP recebida pelo endpoint.

How to detect

Procurar em logs de acesso web por requisições POST para /common/FileAttachment.jsp contendo o parâmetro module=CustomLogin acompanhadas de upload de arquivo com extensão .jsp, .jspx ou .war — esse padrão é o indicador mais direto de tentativa de exploração, replicando exatamente a estrutura do PoC público. Complementarmente, verificar a pasta custom/login/ no servidor por arquivos com extensões de script (.jsp, .jspx) que não correspondam a assets legítimos de personalização (imagens, CSS, HTML estático).

Não há assinatura de rede canônica publicada pelo fornecedor para essa falha; a detecção depende de logging de aplicação e da inspeção do diretório de upload, já que o tráfego HTTP em si (multipart POST) não difere estruturalmente de um upload de logo legítimo além do nome/extensão do arquivo e do valor do parâmetro module.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
Zoho ManageEngine ServiceDesk Plus (SDP) before 10.0 build 10012 allows remote attackers to upload arbitrary files via login page customization.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
Affected products
n/a · n/a
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.