Fortinet FortiNAC CVE-2022-39952简要分析

介绍

2022 年 2 月 16 日星期四,Fortinet 发布了PSIRT,其中详细说明了 CVE-2022-39952,这是一个影响其 FortiNAC 产品的严重漏洞。此漏洞由 Fortinet 的 Gwendal Guégniaud 发现,允许未经身份验证的攻击者在系统上写入任意文件,从而在 root 用户的上下文中获得远程代码执行。

提取系统

从设备中提取文件系统很简单,首先从 vmdk 中列出可挂载的文件系统路径:

sudo virt-filesystems --filesystems -a fortinac-9.4.1.0726.vmdk

接下来,我们将文件系统挂载到我们创建的目录中:
sudo guestmount -a fortinac-9.4.1.0726.vmdk -m /dev/centos/root --ro /tmp/fnac941

漏洞

从易受攻击的和已打补丁的 vmdk 中提取两个文件系统后,很明显该文件/bsc/campusMgr/ui/ROOT/configWizard/keyUpload.jsp已在补丁中删除,并且与公告中提到的 servlet 的名称相匹配。

检查 keyUpload.jsp 的内容,我们看到未经身份验证的节点将解析在参数中提供文件的请求key,如果找到,则将其写入/bsc/campusMgr/config.applianceKey

成功写入文件后,调用Runtime().Exec()执行位于/bsc/campusMgr/bin/configApplianceXml

bash 脚本对刚刚写入的文件调用解压缩。立即,看到对攻击者控制的文件的调用让我们回想起我们最近看到的一些滥用存档解包的漏洞。虽然我们最初的想法是围绕目录遍历问题,但 unzip 有助于剥离相对路径并防止遍历。

这个问题其实要简单得多,不需要遍历。就在调用解压缩之前,bash 脚本调用cd /. 解压缩将允许将文件放置在任何路径中,只要它们不遍历当前工作目录之上。因为工作目录是/,所以 bash 脚本内部的调用unzip允许写入任意文件。

武器化问题

类似于之前允许任意文件写入的存档漏洞问题的武器化,我们利用这个漏洞将一个 cron 作业写入/etc/cron.d/payload. 此 cron 作业每分钟触发一次,并向攻击者启动反向 shell。

我们首先创建一个包含文件的 zip 文件,并指定我们希望将其解压缩的路径。然后,我们将恶意 zip 文件发送到现场的易受攻击端点key。一分钟之内,我们以 root 用户获得了一个反向 shell。我们的概念证明漏洞利用自动化这可以在我们的GitHub上找到。

POC

不幸的是,除非已添加许可证密钥,否则 FortiNAC 设备不允许访问 GUI,因此没有本机 GUI 日志可用于检查指标。但是,在位于/bsc/logs/output.masterRunning configApplianceXml具体来说,只要攻击者没有清除此日志文件,您就可以检查该行。

可以通过多种方式滥用任意文件写入漏洞来获取远程代码执行。在这种情况下,我们将 cron 作业写入/etc/cron.d/,但攻击者还可以在定期执行的系统上覆盖二进制文件或将 SSH 密钥写入用户配置文件。

POC验证代码:https://github.com/horizon3ai/CVE-2022-39952

本文来源于Lonely Blog -全球网络安全资讯平台, 转载请注明出处: https://blog.wuhao13.xin/4282.html

标签