CVE-2022-22954 VMware Workspace ONE Access SSTI漏洞

声明

出品|且听安全(ID: QCyber)

以下内容,来自且听安全的QCyber作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

漏洞信息

VMware Workspace ONE Access(以前称为VMware Identity Manager)旨在通过多因素身份验证、条件访问和单点登录,让您的员工更快地访问SaaS、Web和本机移动应用程序。

近日VMware官网发布了VMware Workspace ONE Access存在多个漏洞:

图片

受影响版本如下:

  • VMware Workspace ONE Access Appliance (版本号:20.10.0.0 ,20.10.0.1 ,21.08.0.0 ,21.08.0.1 )

  • VMware Identity Manager Appliance (版本号:3.3.3 , 3.3.4 , 3.3.5 ,3.3.6)

  • VMware Realize Automation (版本号:7.6)

其中的CVE-2022-22954是一个匿名服务器模板注入漏洞,未经身份验证的攻击者可以利用此漏洞进行远程任意代码执行。

环境搭建

下载存在漏洞的VMware Workspace ONE Access OVA文件,利用ESXI完成安装,需要注意的是主机名需要设置为域名,否则在配置数据库的过程中将会报错。最终完成配置后启动成功:

图片

通过证书免密登录和挂载修改`shadow`文件的方式可以拿到底层ROOT权限,启动脚本位于

`/opt/vmware/horizon/workspace/bin`,`init.d.sh`文件用于控制启动状态,`setenv.sh`可以配置远程调试:

图片

重启服务后将开启远程调试。

补丁分析

从补丁分析入手。漏洞爆出后,官方给出了一个修复脚本`HW-154129-applyWorkaround.py`:

图片

既然是模板渲染漏洞,那么我们首先关注对模板的修改。脚本删除了

`endusercatalog-ui-1.0-SNAPSHOT-classes.jar`中自带的模板

`customError.ftl`:

图片

在`customError.ftl`模板中调用了freemarker引擎的`eval`函数来渲染`errObj`:

图片

查看freemarker官方文档:

图片

可以判断`customError.ftl`在模板渲染过程中导致出现了漏洞。

漏洞分析

找到渲染`customError.ftl`模板的相关代码位于

`com.vmware.endusercatalog.ui.web.UiErrorController#handleGenericError`:

图片

搜索调用关系:

图片

图片

继续寻找`/ui/view/error`的调用,因为这是一个API接口,所以直接构造URL请求当然可以达到,但是这样无法从请求中提取`javax.servlet.error.message`,导致目标渲染的内容不可控。

通过搜索找到另一处调用位于

`UiApplicationExceptionResolver#resolveException`:

图片

存在`javax.servlet.error.message`赋值过程。

继续搜索`resolveException`调用:

图片

如下图所示,

`handleHttpMediaTypeNotAcceptableException`和

`handleAnyGenericException`对应的都是全局异常的处理过程:

图片

图片

显然`handleAnyGenericException`适配的异常更加通用。

`UiApplicationExceptionResolver`类限定了全局异常处理适用的类型范围为`UIController`、`HubUIController`和

`WorkspaceOauth2CodeVerificationController`:

图片

分析到这里之后,经过不断尝试,但是一直也没有实现对变量`errObj`的完全控制。在深入分析其中的一些基础性定义之后,最终找到一个完美实现内容可控的利用方式。获取的`errorObj`变量如下:

图片

最终通过freemarker模板渲染实现RCE:

图片

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值