
Isolated lab research writeup for VMware vCenter Server CVE-2021-21972, covering unauthenticated arbitrary file upload to RCE, Nmap-based detection, exploitation chain, and mitigations.
Author: Niranjan Pokhrel
Independent research project reproducing and documenting a critical, publicly disclosed VMware vCenter Server vulnerability in an isolated home lab, to understand the vulnerability class, exploitation path, and defensive mitigations.
| CVE | CVE-2021-21972 |
| CVSSv3 Base Score | 9.8 (Critical) |
| Vendor Advisory | VMSA-2021-0002 |
| Affected Product | VMware vCenter Server 6.5 / 6.7 / 7.0 |
| Vulnerability Class | Unauthenticated arbitrary file upload → Remote Code Execution |
| Status | Patched by VMware (Nov 2020 – Feb 2021). Lab used intentionally outdated, isolated versions for research purposes only. |
vCenter Server is the central management plane for VMware virtualised infrastructure — compromising it can mean compromising an entire virtual data centre. This vulnerability is a textbook example of how a missing authentication check on a single plugin endpoint can escalate to full host takeover. I built this lab to move from reading a CVE advisory to actually understanding the attack surface, the exploitation chain, and — just as importantly — how it should have been prevented and how to detect it defensively.
The vulnerability lives in the vSphere Client (HTML5), specifically a vCenter Server plugin
that exposes a file upload endpoint (/ui/vropspluginui/rest/services/uploadova) without
requiring authentication. An attacker with network access to port 443 can send a crafted
POST request to this endpoint and upload arbitrary files — including a web shell — to a
web-accessible directory on the underlying OS. This gives the attacker code execution with
the privileges of the vCenter service, effectively full control of the appliance.
At a high level, the attack chain is:
Built entirely in an isolated, non-internet-facing virtual network with no production data:
(Specific IP addressing, credentials, and infrastructure details from the original build are intentionally omitted from this public writeup.)
Vulnerability presence can be confirmed defensively (i.e. by a blue team or auditor) using a public Nmap NSE script that checks whether the target's upload endpoint responds in a way consistent with the unpatched vulnerability — this is the same kind of check a vulnerability scanner or internal security team would run to identify exposed, unpatched vCenter instances on their network before an attacker does.
nmap -p443 --script CVE-2021-21972.nse <target-ip>
A vulnerable target flags as VULNERABLE (Exploitable) in the scan output, which is the
trigger to prioritise immediate patching.
A working proof-of-concept exploit for this CVE has been publicly available since 2021 (originally published by security researcher chacka0101, linked in References). In the interest of not distributing a ready-to-run RCE payload from this profile, I'm not reproducing the exploit code here — the point of this writeup is the understanding, not the tooling. In summary, the public exploit automates steps 2–3 above: it packages a JSP web shell into the expected upload format, POSTs it to the vulnerable endpoint, confirms it landed in a web-accessible path, and then uses it to trigger a reverse shell back to the attacker.
This project was conducted in a fully isolated, non-production lab environment for educational and professional development purposes. No unauthorised systems were accessed.