
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



그러나 애플리케이션은 파일 내용에 대해 아무 작업도 수행하지 않습니다.
취약한 명명된 파이프 "FortiSslvpnNamedPipe"에 조작된 트래픽 (즉, "\x00\x00\x00\x00\x18\x00"에 대상 경로를 연결)을 전송하여 연산 코드 24를 트리거하고 프로세스 "FortiSSLVPNdaemon.exe"가 SYSTEM 권한으로 CreateFileA를 호출하도록 강제할 수 있습니다. 따라서 UNC 경로 (예: "\\<원격 IP>\<파일 경로>")를 제출하여 서버가 원격 파일에 연결하도록 하거나 로컬 명명된 파이프 (예: "\\127.0.0.1\pipe\<명명된 파이프>")에 연결하도록 강제할 수 있습니다.
원격 인증되지 않은 사용자로 Windows 호스트가 다른 머신에 인증하도록 강제하려면 다음 단계를 따르면 됩니다:

"SeImpersonatePrivilege" (예: "nt authority\network service")를 가진 로컬 사용자가 SYSTEM으로 권한 상승을 수행하려면 다음 단계를 따르면 됩니다:
ImpersonateNamedPipeClient()를 호출하여 SYSTEM 권한을 가장합니다.