Admin Protection Bypasses via UIAccess
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Oorsig
- Windows AppInfo stel
RAiLaunchAdminProcessbeskikbaar om UIAccess-processen te spawn (bedoel vir toegankelijkheid). UIAccess omseil die meeste User Interface Privilege Isolation (UIPI) boodskapfiltrering sodat toegankelijkheidsagteware hoër-IL UI kan bestuur. - UIAccess aktiveer direk vereis
NtSetInformationToken(TokenUIAccess)met SeTcbPrivilege, dus lae-privilege oproepers vertrou op die diens. Die diens voer drie kontroles op die teiken-binary uit voordat UIAccess gestel word: - Embedded manifest bevat
uiAccess="true". - Signed deur enige sertifikaat wat deur die Local Machine root store vertrou word (geen EKU/Microsoft vereiste nie).
- Geleë in ’n administrator-only pad op die stelselry (bv.
C:\Windows,C:\Windows\System32,C:\Program Files, uitgesonderd spesifieke skryfbare subpaaie). RAiLaunchAdminProcessvoer geen consent prompt uit vir UIAccess launches nie (anders sou toegankelijkheidstoerusting nie die prompt kon bestuur nie).
Token shaping and integrity levels
- As die kontroles slaag, AppInfo kopieer die caller token, skakel UIAccess aan, en verhoog die Integrity Level (IL):
- Limited admin user (user is in Administrators maar draai gefiltreer) ➜ High IL.
- Non-admin user ➜ IL verhoog met +16 levels tot ’n High kap (System IL word nooit toegewys nie).
- As die caller token reeds UIAccess het, bly IL onveranderd.
- “Ratchet” trick: ’n UIAccess-proses kan UIAccess op sigself deaktiveer, weerlanseer via
RAiLaunchAdminProcess, en nog ’n +16 IL verhoging kry. Medium➜High neem 255 herlanserings (noisy, maar werk).
Why UIAccess enables an Admin Protection escape
- UIAccess laat ’n laer-IL proses toe om window messages na hoër-IL vensters te stuur (omseil UIPI-filters). By gelyke IL, laat klassieke UI-primitiewe soos
SetWindowsHookExtoe dat kode-inspuiting/DLL-lading in enige proses wat ’n venster besit (insluitend message-only windows wat deur COM gebruik word) plaasvind. - Admin Protection lanseer die UIAccess-proses onder die limited user’s identity maar by High IL, stilletjies. Sodra arbitrêre kode binne daardie High-IL UIAccess-proses loop, kan die aanvaller in ander High-IL prosesse op die desktop inspuit (selfs dié van verskillende gebruikers), wat die beoogde skeiding breek.
HWND-to-process handle primitive (GetProcessHandleFromHwnd / NtUserGetWindowProcessHandle)
- Op Windows 10 1803+ het die API na Win32k beweeg (
NtUserGetWindowProcessHandle) en kan ’n proses-handle open met ’n caller-gespesifiseerdeDesiredAccess. Die kernelpad gebruikObOpenObjectByPointer(..., KernelMode, ...), wat normale user-mode toegangskontroles omseil. - Praktiese voorwaardes: die teiken-venster moet op dieselfde desktop wees, en UIPI-kontroles moet slaag. Histories kon ’n caller met UIAccess UIPI-faling omseil en steeds ’n kernel-mode handle kry (gefikseer as CVE-2023-41772).
- Impak: ’n window-handle word ’n capability om ’n kragtige proses-handle te bekom (gereeld
PROCESS_DUP_HANDLE,PROCESS_VM_READ,PROCESS_VM_WRITE,PROCESS_VM_OPERATION) wat die caller normaalweg nie kon open nie. Dit maak cross-sandbox toegang moontlik en kan Protected Process / PPL-grense breek as die teiken enige venster blootstel (insluitend message-only windows). - Praktiese misbruikvloei: enumereer of lokaliseer HWNDs (bv.
EnumWindows/FindWindowEx), los die eienaar PID op (GetWindowThreadProcessId), roepGetProcessHandleFromHwndaan, en gebruik dan die teruggegewe handle vir geheue lees/skryf of kode-hyjack primitiewe. - Na-fix gedrag: UIAccess verleen nie meer kernel-mode opens op UIPI-faling nie en toegestane toegangregte is beperk tot die legacy hook stel; Windows 11 24H2 voeg proces-beskermingskontroles en feature-flagged veiliger paaie by. Deaktiveer UIPI stelselwyd (
EnforceUIPI=0) verswak hierdie beskermings.
Secure-directory validation weaknesses (AppInfo AiCheckSecureApplicationDirectory)
AppInfo los die verskafde pad op via GetFinalPathNameByHandle en pas dan string allow/deny checks toe teen hardcoded roots/uitsluitings. Meervoudige omseilklasses spruit uit daardie simplistiese validasie:
- Directory named streams: Uitgeslote skryfbare directories (bv.
C:\Windows\tracing) kan omseil word met ’n named stream op die directory self, bv.C:\Windows\tracing:file.exe. Die stringkontroles sienC:\Windows\en mis die uitgeslote subpad. - Writable file/directory inside an allowed root:
CreateProcessAsUservereis nie ’n.exeextension nie. Oorskryf enige skryfbare lêer onder ’n toegelate root met ’n uitvoerbare payload werk, of kopieer ’n signeduiAccess="true"EXE in enige skryfbare subdirectory (bv. update leftovers soosTasks_Migratedas dit bestaan) laat dit die secure-path check slaag. - MSIX into
C:\Program Files\WindowsApps(fixed): Non-admins kon signed MSIX packages installeer wat inWindowsAppsbeland het, wat nie uitgesluit was nie. Pak ’n UIAccess-binary in die MSIX en lanseer dit viaRAiLaunchAdminProcesshet ’n promptless High-IL UIAccess process gegee. Microsoft het dit versag deur hierdie pad uit te sluit; dieuiAccessbeperkte MSIX capability self vereis reeds admin install.
Attack workflow (High IL without a prompt)
- Verkry/bou ’n signed UIAccess binary (manifest
uiAccess="true"). - Plaas dit waar AppInfo se allowlist dit aanvaar (of misbruik ’n pad-validasie edge case/skryfbare artefak soos hierbo).
- Roep
RAiLaunchAdminProcessom dit stilletjies met UIAccess + verhoogde IL te spawn. - Vanaf daardie High-IL foothold, teiken ’n ander High-IL proses op die desktop met behulp van window hooks/DLL injection of ander same-IL primitiewe om die admin-konteks volledig te kompromitteer.
Enumerating candidate writable paths
Voer die PowerShell-helper uit om skryfbare/oor-skryfbare voorwerpe binne nominale secure roots te ontdek vanaf die perspektief van ’n gekose token:
$paths = "C:\\Windows","C:\\Program Files","C:\\Program Files (x86)"
Get-AccessibleFile -Win32Path $paths -Access Execute,WriteData `
-DirectoryAccess AddFile -Recurse -ProcessId <PID>
- Voer as Administrator uit vir groter sigbaarheid; stel
-ProcessIdop ’n low-priv proses om daardie token se toegang te spiegel. - Filtreer handmatig om bekende nie-toegelate subgidse uit te sluit voordat u kandidate met
RAiLaunchAdminProcessgebruik.
Verwysings
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


