OMSA文件读取漏洞CVE-2020-5377的示例分析
OMSA文件读取漏洞CVE-2020-5377的示例分析
小编给大家分享一下OMSA文件读取漏洞CVE-2020-5377的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
OpenManage Server Administrator(OMSA)是什么?
根据OMSA的官方文档描述:
“OpenManage Server Administrator(OMSA)是一个软件代理,它通过两种方式提供全面的一对一系统管理解决方案:即基于Web浏览器的图形用户接口,以及操作系统端的命令行接口。”
换句话说,OMSA可以帮助开发人员对安装了OMSA的服务器进行中央监控。OMSA还支持通过中央Web接口和分布式Web服务器(DWS),以及“管理系统登录”功能来管理远程系统。
OMSA中的身份认证绕过
为了简要概述绕过身份验证的工作方式,OMSA提供了使用中央服务器登录远程系统的功能,以便利用分布式Web服务器(DWS)并通过单个Web界面对远程系统进行管理。默认配置下系统会自动启用该功能。
接下来,我们就可以通过托管一个恶意远程节点来绕过身份验证,该节点响应来自OMSA服务器的身份验证请求并验证登录,从而导致OMSA服务器为用户发出一个Web会话。这个Web会话仅用于在集中式Web界面中呈现来自远程节点的内容。但是,我们发现在OMSA的9.4.0.0和9.4.0.2版本中,此会话将允许用户对底层API进行特权访问。
下图显示的是设置界面中管理系统登录功能的开启和关闭:
下图显示的是OMSA身份认证绕过步骤的流程图:
在第四步中,服务器会发送一个JSESSIONID cookie和一个VID,并授权一个特权会话发送给OMSA Web接口,接下来我们就可以用它直接向OMSA服务器发出后续的特权API请求。
文件读取漏洞细节
OMSA Web接口使用的是Apache Tomcat,通过分析web.xml,我们会发现身份认证servlet会暴露在/DownloadServlet:
<servlet><servlet-name>DownloadServlet</servlet-name><servlet-class>com.dell.oma.servlet.secure.DownloadServlet</servlet-class></servlet>
反编译OMSA.jar文件并分析类文件后,我们发现了一个明显的文件读取漏洞:
stringstr1=paramHttpServletRequest.getParameter("file");<SNIP----->Filefile=newFile(str1);if(false==oMAWPUtil.checkUserRights(paramHttpServletRequest,7)){Stringstr4=file.getCanonicalPath();Stringstr5="apache-tomcat"+File.separator+"temp";OMALogging.getInstance().write(9,"DownloadServlet:Canonicalpath:"+str4);if(!str4.contains(str5)){OMALogging.getInstance().write(9,"DownloadServlet:accessdeniedtofile:"+str1);return;}}<SNIP--->FileInputStreamfileInputStream=null;Stringstr3=getServletContext().getMimeType(str1);paramHttpServletResponse.setContentType(str3);paramHttpServletResponse.setHeader("Content-Disposition","attachment;filename=\""+str2+"\";");paramHttpServletResponse.setContentLength((int)file.length());ServletOutputStreamservletOutputStream=paramHttpServletResponse.getOutputStream();try{fileInputStream=newFileInputStream(str1);intj=0;while((j=fileInputStream.read())!=-1)servletOutputStream.write(j);}
我们可以看到,“file”这个GET参数被设置为了“str1”,并被传递给了FileInputStream,然后读取进了应用程序的响应之中。这里唯一的检测就是我们Web会话的“用户权限”为“7”,这也是通过身份认证绕过获取到的会话所满足的条件,这将允许我们在目标文件系统上读取任何我们想要的路径。
存在漏洞的请求如下:
https://omsa.server/{VID}/DownloadServlet?help=Certificate&app=oma&vid={VID}&file=C:\some\file
戴尔漏洞CVE-2021-21514:安全过滤器绕过
CVE-2020-5377漏洞修复后,开发人员引入了一个安全过滤器,目的就是为了保护DownloadServlet这个servlet免受任意文件读取漏洞的影响,但并没有什么效果。
调用DownloadServlet时,程序会使用过滤器查找传递到DownloadServlet的恶意路径,恶意请求将会被拒绝。
过滤器如下:
<filter-name>PathManipulationFilter</filter-name><filter-class>security.web.PathManipulationFilter</filter-class>
相关的反编译类代码段如下:
publicstaticbooleanisFileHandlerRequest(StringparamString){booleanbool=false;Set<String>set=a.keySet();Iterator<String>iterator=set.iterator();Stringstr=null;while(iterator.hasNext()){str=iterator.next();if(StringUtil.trim(paramString).contains(str)){bool=true;break;}}returnbool;}<SNIP>static{a=newHashMap<>();HashMap<Object,Object>hashMap1=newHashMap<>();hashMap1.put("file_1","oma_\\d+.(log|html|zip)$");hashMap1.put("file_2","\\.*(\\.cer|\\.CER)$");a.put("DownloadServlet",hashMap1);HashMap<Object,Object>hashMap2=newHashMap<>();hashMap2.put("file_1",".*");a.put("UploadServlet",hashMap2);HashMap<Object,Object>hashMap3=newHashMap<>();hashMap3.put("file_1",".*");a.put("UploadCertServlet",hashMap3);HashMap<Object,Object>hashMap4=newHashMap<>();hashMap4.put("path_1","(\\\\|\\/)(oma|upload)(\\\\|\\/)\\d+");hashMap4.put("path_2","(\\\\|\\/)temp");a.put("ViewFile",hashMap4);}
上面的代码显示了过滤器代码的一个片段,每个请求的URL都会被传递给isFileHandlerRequest方法,以测试URL是否包含HashMap “a”中列出的任何字符串。由于“a”只包含文本字符串,因此不用考虑任何类型的编码。只需对URL路径的一部分进行URL编码,即可完全绕过此过滤器,从而导致isFileHandlerRequest方法返回false。
现在的URL如下:
https://omsa.server/{VID}/DownloadServle%74?help=Certificate&app=oma&vid={VID}&file=C:\some\file
其中的t被URL编码后为%74,请求将成功。
漏洞概念验证PoC
为了验证漏洞的有效性,我们创建了一个【漏洞利用PoC】,其中包含一个有效的会话Cookie,并且可以使用这个会话从服务器端读取一个文件。
漏洞缓解
为此,戴尔还是发布了一个漏洞修复方案。但是,们确定使用远程管理登录绕过身份验证是预期的功能。这也就意味着,即使在安装了修复补丁之后,我们仍然可以使用本文所介绍的身份认证人熬过漏洞来获得API的有效会话cookie。如果你不需要使用远程管理登录功能的话,则应该禁用该功能以消除相关攻击面。
我们可以通过以下步骤禁用托管系统登录功能:
在登录屏幕上,单击“管理Web服务器”;
使用系统管理员凭据进行登录;
单击“首选项”;
将“管理系统登录”切换为“禁用”;
总结
利用这种身份认证绕过技术,将为我们提供很多的可能性,比如说利用API来实现一些恶意操作等等,例如本文所介绍的任意文件读取。
一旦获得了有效的会话cookie,就可以访问其他危险的功能。因此,如果您不使用OMSA Web界面访问远程系统,我们强烈建议您禁用“托管系统登录”功能。如果您根本不使用OMSA,则应完全卸载或禁用该服务。如果它正在使用中,当然,我们建议广大用户保持运行OMSA的最新版本,或安装最新的漏洞修复补丁。
看完了这篇文章,相信你对“OMSA文件读取漏洞CVE-2020-5377的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!
推荐阅读
-
洗衣机不脱水了是怎么回事(洗衣机不甩干的处理方法)
洗衣机作为大家日常生活必备的家用电器,其利用率频繁,难免会因为机械磨损、缺乏润滑油、机件老化、弹簧疲劳变形等原因,出现各种不正...
-
电子表格零基础自学教程(小白也能学明白)
可能很多人(包括我)觉得Excel不就是做个表吗,没什么好学的。然而很多大型企业在面试的时候还是会问,“会Excel吗?”“会...
-
笔记本电脑报价大全(联想笔记本多少钱)
(注意:建议在旗舰店、官方旗舰店、官网购买) 一、游戏本设计本、办公本推荐如下: 华为品牌:(全球第一大电信设备商) 1...
-
煲机软件哪个好(让耳机有个思想准备)
《无间道》中陈永仁与刘建明有过一句经典对白&mdash;&mdash;“高音甜、中音准、低音沉,总之一个词通透”。这一句话也一...
-
viewsonic平板电脑(viewsonic平板电脑刷机)
ViewSonic是一个视讯品牌,中文名字:优派。 ViewSonic 一、读音:英[vju:][?s?n?k],美[vj...
-
采访麦克风户外哪款好(讯飞智能无线麦克风C1采访神器)
对于视频创作者、直播工作者、远程培训老师、记者等媒体工作者来说,工作过程中,最让人费心的莫过于如何确保收音纯正、字幕快速生成、...
-
电脑硬件配置怎么查(详述两招快速查看电脑配置参数信息)
大家好,今天跟大家分享两个快速查看电脑配置参数信息的办法。 操作步骤如下: 1右击电脑屏幕最下方任务栏左侧的电脑徽标按钮,...
-
数据线没坏但充不上电怎么办(数据线充不上电处理方法)
苹果充电器突然充不上电是比较尴尬的问题,首先看自己的充电器数据线是不是原装,如果非原装在第一次充电时,苹果手机会提示你是否要适...
-
电脑开机出现黑屏如何处理(电脑不能开机黑屏解决方法)
电脑不能开机或者开机以后黑屏怎么解决?这里收集了所有常见的维修方法,看完秒变维修高手,实在是一篇不能错过的电脑维修教程。简单易...
-
手机宝典怎么搞(小米手机性能优化宝典)
别再总是抱怨手机卡顿,系统臃肿,反应慢,现在看完这篇文章,你会发现你并不了解小米手机,当然,文中许多方法并不是仅仅适用于小米手...