网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
利用范围
- VMware Workspace ONE Access 21.08.0.1, 21.08.0.0,20.10.0.1, 20.10.0.0
- VMware Identity Manager(vIDM) 3.3.6, 3.3.5, 3.3.4, 3.3.3
- VMware vRealize Automation(vIDM) 7.6
- VMware Cloud Foundation (vIDM) 4.x
漏洞分析
根据freemarker官网文档(https://freemarker.apache.org/docs/ref_builtins_expert.html#ref_builtin_eval)中给出了安全问题的提示。
使用内置函数将字符串计算为 FTL 表达式,FTL 表达式可以访问变量,并调用 Java 方法,例如 “1+2”?eval将返回数字
3,所以?eval
前的字符串因来自不受信任的来源,可能就会成为攻击媒介。
在Vmware中的endusercatalog-
ui-1.0-SNAPSHOT-
classes.jar自带的模板customError.ftl就调用了freemarker引擎的eval函数来渲染errObj,这就导致了本次SSTI注入漏洞。
环境搭建
可参考CVE-2022-22972 VMware Workspace ONE Access
身份认证绕过漏洞分析。
本次漏洞分析源码所在位置:/opt/vmware/horizon/workspace/webapps/catalog-portal/WEB-INF/lib。
动态调式
已经定位到安全问题所在,接下来寻找渲染customError.ftl模板的相关代码。
在com.vmware.endusercatalog.ui.web.UiErrorController#handleGenericError函数中。
errorObj由参数传入。
查找handleGenericError函数的被调用关系发现。
handleGenericError函数受如上图所示的两个requestMapping所在的控制器UiErrorController调用。
跟进其中出现的getErrorPage函数,位于com.vmware.endusercatalog.ui.web.UiErrorController#getErrorPage。
除了直接用handleGenericError函数拿到需要渲染的模板,还存在handleUnauthorizedError函数通过条件判断,只有一个分支进入handleGenericError
如何构造参数?
在两个requestMapping中,其中的/ui/view/error为API接口,直接访问无法从请求中提取javax.servlet.error.message,从而无法控制errorObj。
寻找/ui/view/error的其他调用,位于com.vmware.endusercatalog.ui.web.UiApplicationExceptionResolver#resolveException函数。
存在对javax.servlet.error.message赋值的过程。
查看resolveException函数的被调用关系,受上方handleAnyGenericException函数调用。
其中@ExceptionHandler表明,该处为异常处理器,当程序直接抛出Exception类型的异常时会进入handleAnyGenericException,再通过调用resolveException函数,进行赋值,最终都会返回/ui/view/error。
而在 handleAnyGenericException 中,进入 resolveException 时会根据异常的类型传入不同的参数,如果异常类不是
LocalizationParamValueException 子类的话则传入
uiRequest.getRequestId(),所以我们需要构造参数可控的地方还需要抛出 LocalizationParamValueException
异常类或其子类异常,这样errorObj所需Attribute
errorJson来自LocalizationParamValueException异常的getArgs。
在LocalizationParamValueException函数,如果可以控制抛出异常的参数,就可以把payload传入errorObj。
在endusercatalog-
auth-1.0-SNAPSHOT.jar中com.vmware.endusercatalog.auth.InvalidAuthContextException,存在一个InvalidAuthContextException异常,继承于LocalizationParamValueException。
在com.vmware.endusercatalog.auth.AuthContext构造函数中抛出异常。
生成 AuthContext对象的地方在AuthContextPopulationInterceptor
拦截器中,而且各项参数均是从请求中获取,这里可构造注入点。
但正常情况下,在 endusercatalog-auth-1.0-SNAPSHOT.jar 中的拦截器类无法访问到类。
但在com.vmware.endusercatalog.ui.UiApplication,使用 @ComponentScan
注解声明自动将com.vmware.endusercatalog.auth包的类装配进bean容器。
在包中com.endusercatalog.ui.config.WebConfig可查找到。
可进行构造的url。
通过如上分析,可构造payload,进行命令执行。
漏洞复现
修复建议
参考漏洞影响范围进行排查,目前官方已发布修复补丁:
https://kb.vmware.com/s/article/88099
网络安全学习路线&资源
【----帮助网安学习,以下所有学习资料免费领!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
03网络安全的知识多而杂,怎么科学合理安排?
下面给大家总结了一套适用于网安零基础的学习路线,应届生和转行人员都适用,学完保底6k!就算你底子差,如果能趁着网安良好的发展势头不断学习,日后跳槽大厂、拿到百万年薪也不是不可能!
初级网工
1、网络安全理论知识(2天)
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网络安全面试题
绿盟护网行动
还有大家最喜欢的黑客技术
网络安全源码合集+工具包
所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!