
Win10Pcap ドライバを悪用して、プロセストークンにいくつかの特権を有効化します(ローカル権限昇格)
クレジット
https://twitter.com/R00tkitSMM ([email protected]) telegram username : https://telegram.me/firozi
数日前、win10pcap ドライバに特権昇格につながる脆弱性を発見しました。この脆弱性を報告したところ、現在はバグが修正されています:
それで、サンプルエクスプロイトを公開することにしました
Win10Pcap は、WinPcap ベースの新しい Ethernet パケットキャプチャライブラリです。 オリジナルの WinPcap とは異なり、Win10Pcap は NDIS 6.x ドライバモデルに対応しており、Windows 10 で安定して動作します。また、Win10Pcap は IEEE802.1Q VLAN タグのキャプチャもサポートしています。
Windows 10 に Wireshark をインストールするなら、これが必要です :)
Win10Pcap カーネルモードドライバは、ユーザーモードから渡される仮想アドレスをチェックしておらず、IOCTL は ProbeForWrite による渡されたアドレスの検証なしに Neither Buffered Nor Direct I/O を使用しています。
IOCTL を送信するには、実行時に正確なデバイス名を見つける必要があります。ハードコードされたデバイス名では脆弱なコードに到達しません。
IOCTL ハンドラは渡されたアドレスに文字列を書き込みます。その文字列は "Global\WTCAP_EVENT_3889023063_1" のようなものです。
この脆弱性を悪用する方法はいくつかありましたが、私は _SEP_TOKEN_PRIVILEGES を上書きしてプロセスの TOKEN に特権を設定することにしました。
アドレス 0x034 のトークンを文字列 "Global\WTCAP_EVENT" で上書きすると、敏感なフィールドを壊すことなく SeDebugPrivilege を設定できます。
81687cf8 cc int 3
2: kd> dt nt!_TOken
+0x000 TokenSource : _TOKEN_SOURCE
+0x010 TokenId : _LUID
+0x018 AuthenticationId : _LUID
+0x020 ParentTokenId : _LUID
+0x028 ExpirationTime : _LARGE_INTEGER
+0x030 TokenLock : Ptr32 _ERESOURCE
+0x034 ModifiedId : _LUID
+0x040 Privileges : _SEP_TOKEN_PRIVILEGES
+0x058 AuditPolicy : _SEP_AUDIT_POLICY
