CVE-2021-44515 Zoho ManageEngine Desktop Central Pre-auth RCE
osword 漏洞分析 6032浏览 · 2021-12-13 13:54

漏洞描述

CVE-2021-44515是 ManageEngine Desktop Central 中的身份验证绕过漏洞,可能导致远程代码执行。为了利用,攻击者会向易受攻击的端点发送特制的请求

调试环境

下载地址:https://archives3.manageengine.com/desktop-central/101213702/
windows+ Desktop Central 10.1.2137.2

影响版本

version<10.1.2137.3
version<10.1.2127.18

漏洞分析

Filter限制绕过

/mdm/mdmLogUploader存在未授权上传,但限制了路径穿越符号../,匹配符合文件名logger.txt|logger.zip|mdmlogs.zip|managedprofile_mdmlogs.zip,该限制是在secutiyFilter逻辑中执行

matchPattern:1751, SecurityUtil (com.adventnet.iam.security)
checkForAllowedValueRegex:1463, ParameterRule (com.adventnet.iam.security)
validateParamValue:1397, ParameterRule (com.adventnet.iam.security)
validateParamValue:1349, ParameterRule (com.adventnet.iam.security)
validateParam:1134, ParameterRule (com.adventnet.iam.security)
validate:962, ParameterRule (com.adventnet.iam.security)
validateURLRule:517, URLRule (com.adventnet.iam.security)
doFilter:306, SecurityFilter (com.adventnet.iam.security)
doFilter:138, XSSFilter (com.me.dconpremise.webclient.filter)
.............

​ 反复看了securityFilter安全操作,不能绕过。思路转到XSSFilter逻辑执行能不能跳过Securityilter.doFilter方法执行且正常执行文件上传.

XSSFilter.doFilter中只要路由包含/mdm/条件判断进入else中执行SecurityFilter.doFilter方法

if (!requestURI.contains("/emsapi") && !requestURI.contains("/dcapi") && !requestURI.contains("/mdm/") && !requestURI.contains("/api/v1/mdm") && !requestURI.endsWith(".ec") && !requestURI.endsWith(".pdf") && !requestURI.endsWith(".csv") && !requestURI.endsWith(".xls") && !requestURI.endsWith(".xlsx") && !requestURI.endsWith(".ecu") && !requestURI.contains("/emsapi/osdeployer") && securityFilterConfig.getURLRule(requestURI) == null) {
        ...........
        }else{
            super.doFilter(servletrequest, servletresponse, filterchain);
        }

​ 继续看XSSFilter.doFilter中对requestURI处理流程中当包含.ma时会进行截断即/mdm/mdmLogUploader;.ma -> /mdmLogUploader;.ma,这样就能成功满足IF条件判断,不执行SecurityFilter.doFilter方法.

if (requestURI.contains(".ma")) {
            position = requestURI.indexOf(".");
            position = requestURI.lastIndexOf("/");
            if (position > position) {
                requestURI = requestURI.substring(position, position) + ".ma";
            }
        }

Zip文件利用

服务启动流程中run.jar 执行
    runStandAlone() -> LoadJars() -> getAllJarURLs() -> getNewServerClassInstance()

/mdm/mdmLogUploader能够上传zip文件,10.1.2137.2版本中在启动过程中会执行bin/run.jar,Starte.getAllJarURLs()->Starter.addJars()扫描classPath.conf中的lib路径jar包或zip`包.

Starter.LoadJars方法中会将当前目录的第一个jar作为classLoader进行,所以可以上传名aaa.zip顶替位置.

加载进classloader后,需要考虑如何进行利用getshell,启动流程中会执行Starter.getNewServerClassInstance方法. 使用当前classloader实例化com.zoho.mickey.startup.MEServer. 可以重构该类,在static中插入恶意代码.

漏洞复现

构造com.zoho.mickey.startup.MEServer

可以复制com.zoho.mickey.startup.MEServer进行重构,可能需要修改一些语法错误,将Desktop Central的jar包使用idea导入。利用idea进行编译,使用jar进行打包为aaa.zip.

jar -cvf aaa.zip com/zoho/mickey/startup/MEServer.class

上传aaa.zip

重启服务

重启服务后弹出计算器

补丁修复

删除.zip后缀

结语

​ 可能有不重启就能触发的利用,还未研究

参考链接

https://www.tenable.com/blog/cve-2021-44515-zoho-patches-manageengine-zero-day-exploited-in-the-wild?utm_source=charge&utm_medium=social&utm_campaign=internal-comms

https://www.manageengine.com/products/desktop-central/cve-2021-44515-authentication-bypass-filter-configuration.html

0 条评论
某人
表情
可输入 255