
CVE-2024-40586 のエクスプロイト: 脆弱なFortiClientの名前付きパイプを介してWindowsホストに認証を強制し、リレー攻撃によるSYSTEMへの権限昇格または横方向の移動を可能にします。
Windows システムにおいて、FortiClient (アプリバージョン 7.0.8.0427) は、FortiSSLVPNdaemon サービスが担当する名前付きパイプを介して、リモートの非特権ユーザーが Windows ホストに他のマシンへの認証を強制することを許可することが判明しました。
名前付きパイプ "FortiSslvpnNamedPipe" があらゆるユーザーからの読み取りと書き込みを許可していることが観測されました。

アプリは名前付きパイプからバッファの5バイト目を op コード PipeBuffer+4 として読み取ります

op コードが 24 (すなわち 0x18) の場合、アプリがファイルを読み取ることが観測されました。
コードフロー: Case 24 => LABEL_26 => strncpy でペイロードを変数 Buffer にコピー => sub_7FF60C3EAC20 にペイロードを渡す => CreateFileA の呼び出し => ReadFile



しかし、アプリケーションはファイルの内容については何も行いません。
脆弱な名前付きパイプ "FortiSslvpnNamedPipe" に対して、細工したトラフィック(すなわち、"\x00\x00\x00\x00\x18\x00" に対象パスを連結したもの)を送信することで、op コード 24 をトリガーし、プロセス "FortiSSLVPNdaemon.exe" に SYSTEM 特権で CreateFileA を呼び出させることができます。したがって、UNC パス(例: "\\<リモートIP>\<ファイルパス>")を送信してサーバーにリモートファイルに接続させるか、ローカルの名前付きパイプ(例: "\\127.0.0.1\pipe\<名前付きパイプ>")に接続させることができます。
リモートの非認証ユーザーを使用して Windows ホストに他のマシンへの認証を強制するには、次の手順に従います。

ローカルユーザー("SeImpersonatePrivilege" を持つもの、例:"nt authority\network service")から SYSTEM への権限昇格を実行するには、次の手順に従います。
ImpersonateNamedPipeClient() を呼び出して SYSTEM 特権を偽装する。