CVE-2024-40586 的漏洞利用程序:通过易受攻击的 FortiClient 命名管道强制 Windows 主机进行身份验证,从而能够通过中继攻击将权限提升至 SYSTEM 或进行横向移动。
在 Windows 系统上,发现 FortiClient(应用版本 7.0.8.0427)允许远程非特权用户通过一个与 FortiSSLVPNdaemon 服务相关的命名管道,强制 Windows 主机向其他计算机进行身份验证。
观察到命名管道 "FortiSslvpnNamedPipe" 允许任何用户进行读取和写入。

该应用从命名管道中将缓冲区第 5 个字节读取为操作码 PipeBuffer+4

观察到当操作码等于 24(即 0x18)时,该应用将读取文件。
代码流程:Case 24 => LABEL_26 => strncpy 将载荷复制到变量 Buffer => 将载荷传递给 sub_7FF60C3EAC20 => 调用 CreateFileA => ReadFile



然而,该应用不会对文件内容进行任何处理。
我们可以发送特制流量(即 "\x00\x00\x00\x00\x18\x00" 与目标路径拼接)到存在漏洞的命名管道 "FortiSslvpnNamedPipe",以触发操作码 24,并强制进程 "FortiSSLVPNdaemon.exe" 以 SYSTEM 权限调用 CreateFileA。因此,我们可以通过提交 UNC 路径(例如 "\\<remote ip>\<file path>")来强制服务器连接远程文件,或连接本地命名管道(例如 "\\127.0.0.1\pipe\<named pipe>")
要利用远程未认证用户强制 Windows 主机向其他计算机进行身份验证,可按照以下步骤操作:

若要从具有 "SeImpersonatePrivilege" 权限的本地用户(例如 "nt authority\network service")提升至 SYSTEM,可按照以下步骤操作:
ImpersonateNamedPipeClient() 来模拟 SYSTEM 权限。