作者:水泡泡@知道创宇404积极防御实验室
日期:2021年3月5日

0x01 漏洞描述

View Planner是VMware官方推出的一款针对view桌面的测试工具,通过这个测试工具可以估算出在指定的应用环境下可以发布多少个view桌面。

View Planner 的logupload端点缺乏输入验证,导致具有查看View Planner Harness网络访问权限的未经授权的攻击者可以上载和执行精心编制的文件,从而导致在logupload容器中执行远程代码。

影响范围:VMware View Planner <=4.6.0

0x02 环境安装

下载镜像:

https://my.vmware.com/group/vmware/downloads/details?downloadGroup=VIEW-PLAN-460&productId=1067&rPId=53394 (选择View Planner Harness )

下载需要注册一个账号且下载需要审核,需要等待一段时间,这里分享我已经下载好的:

链接: https://pan.baidu.com/s/1aeNW1HUyCkZze1bs7vplzg
提取码: vv42

使用VMware直接加载ova文件,安装过程中按照提示初始化 ssh root账号的初始密码,成功搭建。

0x03 漏洞复现

按照twitter上公开的POC,向logupload端点构造请求包(路径使用相对路径即可)。

其中上传的文件内容是log_upload_wsgi.py的源文件,但添加了执行命令的代码,在上传成功之后,再请求一次logupload端点,收到curl请求,命令执行成功。

至此漏洞复现成功。

0x04漏洞分析

在分析之前,先简单讲一下View Planner的部署架构。

View Planner 的web服务由docker搭建提供,其中80,443端口的内容由appacheServer容器提供,而8081由crossbar容器提供,为ws服务,主要处理登陆后的后端交互逻辑。

ssh 到 viewplanner虚拟机,scp将/root/viewplanner 源码拉出来,全局搜索logupload。

可以看到apache 配置文件配置了logupload端点的指向文件为/etc/httpd/html/wsgi_log_upload/log_upload_wsgi.py

其路径/etc/httpd/html/ 实际是容器内的路径,对应宿主机的/root/viewplanner/httpd

定位到/root/viewplanner/httpd/wsgi_log_upload/log_upload_wsgi.py 文件。

代码很简单,从cgi中获取logfilelogMetaData两个参数数据,如果logMetaData参数传入了json数据,则从json数据中获取itrLogPathlogFileType两个键值,随之将itrLogPathlogFileTyperesultBasePath 进行路径拼接,判断路径是否存在,不存在则创建,

之后判断logfile是否为上传文件,上传了文件,如果logFileType参数的值不等于workloadLogsZipFile 则直接将resultBasePathitrLogPathlogFileType三个参数的值进行路径拼接,并进行文件写入。

由于缺少路径规范过滤,只需要稍微构造一下数据包即可上传恶意文件到任意路径,从而可以覆盖log_upload_wsgi.py 文件,达到远程代码执行的效果。

0x05 补丁分析

至此漏洞分析完毕,下载官方补丁进行对比分析(左补丁):

加入了个password参数也就是使用loguplaod这个端点需要密码才可以访问,但取的secret_key来自于wsgi.config,硬编码值为:vmware-viewplanner-ca$hc0w,有点掩耳盗铃的味道;

不过后面代码,对拼接后的路径使用normpath进行路径规范化,并用startswith限制写入的文件必须在 /etc/httpd/html/vpresults目录下,也就没法再跨路径上传文件,至此此漏洞算是修复完成了。

0x06 总结

此系统暴露在外网的IP非常少,大多数在内网,漏洞简单但危害严重,建议广大管理员赶快升级,避免在即将到来的行动中失分。


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1495/