[脆弱性の再発] VmwarevCenterはファイルRCEを許可しません

0x00 VmwarevCenter情報

vSphereそれはされてVMware含まれ、仮想化プラットフォームキット導入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.0U1cより前のバージョン7.0
  • 6.7U3lより前のバージョン6.7
  • 6.5U3nより前のバージョン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修理の提案

  • vCenterServer7.0バージョンから7.0.U1cにアップグレードします
  • vCenter Server6.7バージョンから6.7.U3lにアップグレードします
  • vCenterServer6.5から6.5U3nにアップグレードします

次のことを示してください:Adminxeのブログ »  [脆弱性の再現] VmwarevCenterはファイルRCEを許可しません

 

おすすめ

転載: blog.csdn.net/Adminxe/article/details/114242269