【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析

渗透技巧 3年前 (2022) admin
740 0 0
漏洞信息


Carbon Black CLoud WorkLoad是Vmware的一套提供云端服务的产品,该设备托管在本地,是组织基础架构与端点保护平 VMware Carbon Black Cloud的重要组件。


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


VMware Carbon Black App Control存在CVE-2021-21998认证绕过漏洞,该漏洞是由于Envoy在处理请求转发时不支持URL编码,导致可以匿名访问API接口获取认证Token。


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


环境搭建及结构分析


安装比较简单,下载`cwp-va-1.0.1.0-${version}_OVF10.ova`虚拟机文件导入后启动即可,cwp密码需要定期修改,忘记密码后修复方法如下。


首先使用linux虚拟机挂载cwp虚拟机磁盘文件:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


登录后通过chroot命令备份并修改cwp根文件系统中的root和admin密码:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


使用新密码登录系统:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


系统启动后,将开启80、443、3030、3010、3020等多个接口,80和443采用envoy服务:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


Envoy 是专为大型现代 SOA(面向服务架构)架构设计的 L7 代理和通信总线,支持进行代理转发。


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


可以把Envoy理解为一个类似于Nginx的反向代理,根据配置文件`/opt/vmware/cwp/appliance-gateway/conf/cwp-appliance-gateway.yaml`梳理出主要代理配置项目:


| cluster名称    | 端口 | 转发地址  | 备注 || -------------- | ---- | --------- | ---- || service_vsw    | 3030 | 127.0.0.1 |      || service_apw    | 3020 | 127.0.0.1 |      || service_acs    | 3010 | 127.0.0.1 |      || service_plugin | 8080 | 127.0.0.1 |      |


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


而后端服务都使用`java`语言编写:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析

补丁对比


对比`cwp-va-1.0.1.0`和`cwp-va-1.0.2.0`版本,在`/vmware/cwp/appliance-worker/bin/run.sh`中添加了HTTP头校验,注意到其中的`http://localhost:3010/acs/api/v1/service-token/apw`开头的URL:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


其中acs即`Access Control Service`,代码和配置位于`/opt/vmwarwe/cwp/access-control-service`:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


查看处理代码,通过`/api/v1/service-token/${servicename}`接口可获取管理员token:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


该URL并不能通过443端口远程访问:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


而本地请求后可以简单返回登录Token:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析

认证绕过漏洞


回来继续看Envoy的使用,使用该框架作为代理时,可使用`Route Discovery API`动态生成URL路由转发规则列表。后端服务使用`io.envoyproxy.envoy.api`包中的`DiscoveryRequest`和其他实体来描述路由的配置,通过`/v2/discovery:routes`接口返回路由信息:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


在`EnvoyXDSServiceImpl`中实现了转发路由的生成规则:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


上传静态编译的`tcpdump`文件捕获本地请求报文,正好可以捕获到本地`/v2/discovery:routes`报文:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


Envoy路由能够精确匹配到协议、地址、端口、URL路径等,可根据指定规则转发和修改请求。根据返回的路由列表,`/acs/api/v1/service-token`开始的接口由`service_vsw`(3030端口)处理,以 `/acs/`开始的接口由acs服务处理,且`/acs/api/v1/service-token`优先级高于`/acs/`:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


远程构造URL请求样例,经过测试情况如下。值得注意的是,如果`/acs/api/v1/service-token`中`/acs/`后面的一个字符串进行URL编码,将会导致`/acs/`规则被匹配,请求被转发到`3010`端口处理,导致功能与设计不一致:


| 远程请求URL                   | 转发端口                    | 转发URL | 备注           || ----------------------------- | --------------------------- | ------- | -------------- || /                             | /awp/login                  | 443     | 返回302        || /acs/api/v1/service-token     | /no_cloud                   | 3030    | 转发至本地端口 || /acs/api/v1/service-token/awp | /no_cloud/awp               | 3030    | 转发至本地端口 || /acs/wp                       | /acs/wp                     | 3010    | 转发至本地端口 || /acs/api/v%31/service-token   | /acs/api/v%31/service-token | 3010    | 转发至本地端口 |


发送`/acs/api/v%31/service-token`请求,便可以未授权获取`TOKEN`了,造成认证绕过问题发生:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


漏洞产生原因


产生的问题原因是`Envoy`框架默认未启用对请求的URL编解码处理。Envoy开发人员建议在使用`RBAC过滤器`时启用`normalize_path_settings`特性,但本次漏洞研究的环境并没有开启:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


而`3010`端口使用spring-boot编写,默认是支持URL编码的:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析

漏洞复现


使用url编码绕过:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


利用token访问API:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


修复方式


首先`X-RREQUEST-TYPE: INTERNAL`请求头来标识本地请求,同时URL路径和转发规则也做了修改:


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析

写在最后


漏洞产生的原因是Envoy在转发时不进行URL编码处理,而CarbonBlack定制路由规则时采用了`/PAT1/API1`和`/PAT1/`两个处理规则,且后台处理代码也不同。通过构造`/PAT1/$URLENCODE(APT1)`的方式可以绕过第一个规则检查,从而按照第二个规则进行转发处理,同时SpringBoot能够处理URL编码,导致未授权获取token。与反向代理模式下认证绕过类似,是不是似曾相似的赶脚?【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析


【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析



由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。

点关注,不迷路!

【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析

关注公众号回复“漏洞”获取研究环境或工具

原文始发于微信公众号(且听安全):【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析

版权声明:admin 发表于 2022年2月28日 上午9:04。
转载请注明:【经典回顾系列】CVE-2021-21988 VMware Carbon Black App Control认证绕过漏洞分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...