于我

【漏洞分析】CVE-2022-35405 漏洞分析

2022/8/20
漏洞详情

近期,ZOHO官方发布公告,修复了一个存在于ManageEngine PAM360、PMP 和 Access Manager Plus 的远程执行代码漏洞,漏洞编号为CVE-2022-35405。该漏洞可能允许远程攻击者在受影响的 Password Manager Pro、PAM360 和 Access Manager Plus 上执行任意代码。在PMP和PAM360产品中利用此漏洞不需要身份验证。

以下产品版本受此次漏洞的影响:

Access Manager Plus < 4302

Password Manager Pro < 12100

PAM360 < 5500

危害等级:超危

CVSS评分:9.8

背景知识

RPC(Remote Procedure Call)就是相当于提供了一种“远程接口”来供外部系统调用,常用于不同平台、不同架构的系统之间互相调用。

XML-RPC是一个远程过程调用(RPC)协议,它使用XML对其调用进行编码,并使用HTTP作为传输机制。它是一种标准规范,并提供了现成的实现方式,允许运行在不同的操作系统和环境中。在XML-RPC中,客户机通过向实现XML-RPC并接收HTTP响应的服务器发送HTTP请求来执行RPC。

通俗理解就是xml-rpc服务器可以接收外部发送的xml数据,然后进行解析,如果外部发送的xml数据中包含恶意数据(如恶意反序列化数据),xml-rpc服务器在解析恶意数据时就有可能导致任意命令执行。

环境搭建

官网下载漏洞环境,链接如下:

https://archives2.manageengine.com/passwordmanagerpro/12100/ManageEngine_PMP_64bit.exe,

安装成功后访问本机环境7272端口,会显示如下界面:

在conf/wrapper.conf文件中取消jdpa debug的注释

使用如下命令首先关闭服务后再次开启服务:

bin\wrapper.exe -p ..\conf\wrapper.conf //关闭服务

bin\wrapper.exe -t ..\conf\wrapper.conf //开启服务

本地成功连接远程debug:

漏洞分析

该漏洞与Apache Ofbiz XMLRPC(CVE-2020-9496)命令执行漏洞原因相同,均是由XmlRpcRequestParser解析xml时,xml中有恶意反序列化数据,刚好环境中包含存在反序列化漏洞的包(Commons-beautils.jar),导致触发反序列化命令执行。

研究XmlRpcRequestParser类会发现该类主要有startElement()和endElement()两个函数,是用来解析xml标签。

startElement()会依次匹配请求中的xml标签,包括methodCall、methodName、params、param和value,

匹配value标签时,会执行startValueTag()函数,将inValueTag变量赋值为true,typeParser变量赋值为null,

如果value标签中还有其他子标签,就会执行super.startElement()函数

函数内容如下,其中会使用factory.getParser()函数判断value中的子标签是否可以匹配已有的解析类。

发送如下测试请求,跟进到factory.getParser()函数中

xml value中的子标签可以识别如下:nili1i2i8floatdombigdecimalbigintegerserializabledateTimeintbooleandoubledateTime.iso8601arraystructbase64string。

我们重点关注serializable,SerializableParser类中只有一个getResult()函数,ois.readObject()处可以执行反序列化,漏洞触发点就是这里。

getResult()函数只有RecursiveTypeParserImpl.envValueTag()处调用了。

endValueTag()只有在MapParser和ObjectArrayParser处进行了调用。

所以只要按照MapParser或ObjectArrayParser解析类的解析格式发送恶意请求,就可以调用ois.readObject()执行反序列化。

以ObjectArrayParser解析类触发的调用链如下:

XMLDocumentFragmentScannerImpl&FragmentContentDispatcher.dispatch()中是解析xml标签的流程。以ObjectArrayParser解析类触发漏洞为例,xml请求大概如下:

整个xml解析的流程大概如下:

XMLDocumentFragmentScannerImpl&FragmentContentDispatcher.dispatch()匹配<、/等方式循环调用XmlRpcRequestParser.startElement()和XmlRpcRequestParser.endElement(),

在XmlRpcRequestParser中解析methodCallmethodNameparamsparam和value,value中的子标签array等则交给XmlRpcRequestParser的父类RecursiveTypeParserImpl,由RecursiveTypeParserImpl根据子标签的标签名寻找对应的解析类,array标签对应的是ObjectArrayParser解析类,接着由ObjectArrayParser解析接下来的arraydata和value,serializable标签ObjectArrayParser解析不了,又交给父类RecursiveTypeParserImpl,RecursiveTypeParserImpl根据serializable名字找到SerializableParser解析类,而SerializableParser没有startElement()函数,又调用父类ByteArrayParser.startElement(),对反序列化数据进行base64解密,

然后dispatch开始调用endElement()函数,在解析/value时,ObjectArrayParser.endElement()会调用endValueTag()函数,

endValueTag()函数就会调用typeParser.getResult(),最终调用SerializableParser.getResult()。

缓解措施

官方已经发布了针对此次漏洞的补丁,链接为:

https://archives2.manageengine.com/passwordmanagerpro/12101/ManageEngine_PasswordManager_Pro_12100_to_12101.ppm

补丁中SerializableParser.getResult()关闭了反序列化。

参考链接

https://cert.360.cn/report/detail?id=ba5eeaf8536ba73611dd4abd198c4eb9

https://y4er.com/post/cve-2022-35405-zoho-password-manager-pro-xml-rpc-rce/

上一篇:Rust C2框架LINK分析
下一篇:【漏洞分析】CVE-2022-41852 Apache Commons JXPath 远程命令执行漏洞

开始免费试用灰度产品

申请试用