ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

【漏洞复现】Vmware vcenter未授权任意文件RCE

2021-02-28 23:57:30  阅读:360  来源: 互联网

标签:tmp new Vmware File entry RCE vcenter logger dir


0x00 Vmware vcenter信息

vSphereVMware推出的虚拟化平台套件,包含ESXivCenter Server等一系列的软件。其中vCenter Server ESXi的控制中心,可从单一控制点统一管理数据中心的所有vSphere主机和虚拟机,使得IT管理员能够提高控制能力,简化入场任务,并降低IT环境的管理复杂性与成本。

vSphere Client(HTML5)vCenter Server插件中存在一个远程执行代码漏洞。未授权的攻击者可以通过开放443端口的服务器向vCenter Server发送精心构造的请求,从而在服务器上写入webshell,最终造成远程任意代码执行。

fofa查询

语法:

title="+ ID_VC_Welcome +"

app=”vmware-ESX”||app=”vmware-VirtualCenter”||app=”vmware-vCenter”

0x01 影响版本

  •  
  • 7.0 U1c 之前的 7.0 版本
  • 6.7 U3l 之前的 6.7 版本
  • 6.5 U3n 之前的 6.5 版本

0x02 代码分析

vCenter ServervROPS插件的API未经过鉴权,存在一些敏感接口。其中 uploadova 接口存在一个上传 OVA 文件的功能:

   @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 var14) {
         var14.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();
               String[] var9 = entries;
               int var10 = entries.length;
               for(int var11 = 0; var11 < var10; ++var11) {
                  String entry = var9[var11];
                  File currentFile = new File(dir.getPath(), entry);
                  currentFile.delete();
               }
               logger.info("Successfully cleaned : /tmp/unicorn_ova_dir");
            }
            TarArchiveInputStream in = new TarArchiveInputStream(inputStream);
            TarArchiveEntry entry = in.getNextTarEntry();
            ArrayList result = new ArrayList();
            while(entry != null) {
               if (entry.isDirectory()) {
                  entry = in.getNextTarEntry();
               } else {
                  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(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 var15) {
            logger.error("Unable to upload OVA file :" + var15);
            returnStatus = "FAILED";
         }
      }
      wr.write(returnStatus);
      wr.flush();
      wr.close();
   }

代码逻辑是将TAR文件解压后上传到 /tmp/unicorn_ova_dir 目录。注意到如下代码:

                while(entry != null) {
                    if (entry.isDirectory()) {
                        entry = in.getNextTarEntry();
                    } else {
                        File curfile = new File("/tmp/unicorn_ova_dir", entry.getName());
                        File parent = curfile.getParentFile();
                        if (!parent.exists()) {
                            parent.mkdirs();

直接将TAR的文件名与 /tmp/unicorn_ova_dir 拼接并写入文件。如果文件名内存在 ../ 即可实现目录遍历。

0x03 漏洞复现

利用代码(Sp4ce )https://github.com/NS-Sp4ce/CVE-2021-21972

 

0x04 修复建议

  • vCenter Server7.0版本升级到7.0.U1c
  • vCenter Server6.7版本升级到6.7.U3l
  • vCenter Server6.5版本升级到6.5 U3n

转载请注明:Adminxe's Blog » 【漏洞复现】Vmware vcenter未授权任意文件RCE

 

标签:tmp,new,Vmware,File,entry,RCE,vcenter,logger,dir
来源: https://blog.csdn.net/Adminxe/article/details/114242269

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有