
Bypass UAC su Windows 8.1 e 10 abusando di WinSxS in "dccw.exe".
Questo exploit sfrutta il modo in cui "WinSxS" viene gestito da "dccw.exe", tramite un metodo derivato dal "Bypass UAC" di Leo Davidson, al fine di ottenere una shell di amministratore senza richiedere il consenso. Supporta le architetture "x86" e "x64". Inoltre, è stato testato con successo su Windows 8.1 9600, Windows 10 14393, Windows 10 15031 e Windows 10 15062.
Se vuoi vedere come eseguire lo script, dai un'occhiata alla sezione utilizzo. Inoltre, puoi eseguirlo in Metasploit e ottenere una sessione Meterpreter con diritti di amministratore.
Per sviluppare un nuovo bypass UAC, dobbiamo prima trovare una vulnerabilità nel sistema e, per essere più precisi, una vulnerabilità in un processo ad auto-elevazione. Per ottenere un elenco di tali processi abbiamo usato lo strumento Sysinternals chiamato Strings. Dopo di che, abbiamo potuto vedere alcuni processi ad auto-elevazione come "sysprep.exe", "cliconfig.exe", "inetmgr.exe", "consent.exe" o "CompMgmtLauncher.exe" che avevano (alcuni di essi hanno ancora) vulnerabilità che consentono l'esecuzione di un "bypass UAC". Quindi, abbiamo iniziato a studiare come funzionavano altri processi ad auto-elevazione con l'applicazione Sysinternals chiamata Process Monitor (ProcMon), concentrandoci però sul processo "dccw.exe".
Tuttavia, prima di iniziare con ProcMon, abbiamo controllato il manifest di tali applicazioni con un'altra applicazione Sysinternals chiamata Sigcheck e, ovviamente, nel nostro caso "dccw.exe" è un processo ad auto-elevazione.
Poi, abbiamo potuto iniziare a seguire il flusso di esecuzione di "dccw.exe" con ProcMon per vedere se accadeva qualcosa di strano, cosa che abbiamo verificato immediatamente. A un certo punto, se abbiamo eseguito "dccw.exe" come processo a 64 bit su una macchina Windows a 64 bit, esso cerca la directory "C:\Windows\System32\dccw.exe.Local\" per caricare una DLL specifica chiamata "GdiPlus.dll", come farebbe se fosse eseguito su una macchina Windows a 32 bit, mentre se lo eseguiamo come processo a 32 bit sulla stessa macchina, il processo cercherà la directory "C:\Windows\SysWOW64\dccw.exe.Local\". Quindi, poiché essa non esiste, il processo cerca sempre una cartella nel percorso "C:\Windows\WinSxS\" per ottenere la DLL desiderata; questa cartella ha un nome con la seguente struttura:
[architecture]_microsoft.windows.gdiplus_[sequencial_code]_[Windows_version]_none_[sequencial_number]
Se diamo un'occhiata alla directory "WinSxS", possiamo vedere più di una cartella che corrisponde a questa struttura; questo significa che "dccw.exe" può caricare la DLL desiderata da una qualsiasi di queste cartelle. L'unica cosa di cui siamo certi è che se l'applicazione viene richiamata come processo x86, il nome della cartella inizierà con la stringa "x86", mentre se la eseguiamo come processo x64, il suo nome inizierà con la stringa "amd64".
Questa situazione può essere sfruttata per eseguire un DLL hijacking e poi eseguire codice con integrità elevata senza richiedere il consenso.
Una volta trovato un errore durante l'esecuzione di un processo ad auto-elevazione, dobbiamo verificare se esso può essere sfruttato o meno. Per fare questo, abbiamo semplicemente creato la cartella "dccw.exe.Local" nel percorso desiderato e, all'interno di quella cartella, abbiamo creato le cartelle situate in "WinSxS" che potevano essere richiamate dal processo per caricare "GdiPlus.dll", ma senza tale DLL.
Ora, se eseguiamo "dccw.exe" vedremo che il processo ha trovato la cartella "dccw.exe.Local" e una delle cartelle di "WinSxS", ma non la DLL desiderata, il che genera un errore. Questo è ciò che ci aspettavamo, poiché tale situazione può essere sfruttata da un attaccante come abbiamo menzionato in precedenza.
A questo punto, sappiamo già che possiamo eseguire un bypass UAC su Windows 10 sfruttando "dccw.exe", ma come?
Il metodo più utilizzato per bypassare UAC è quello sviluppato da Leo Davidson. Tuttavia, esso esegue un'iniezione di processo per richiamare l'oggetto COM IFileOperation, che può essere rilevata da alcuni software antivirus, quindi un approccio migliore da utilizzare è quello chiamato Masquerade PEB usato da Cn33liz nel suo bypass UAC.
Inoltre, dobbiamo modificare il modo in cui IFileOperation viene richiamato nelle versioni più recenti di Windows 10, poiché il metodo di Leo Davidson attiva UAC a partire dalla build 15002. Quindi, il modo in cui dobbiamo richiamare tale operazione è lo stesso dell'originale, ma senza i flag "FOF_SILENT", "FOFX_SHOWELEVATIONPROMPT" e "FOF_NOERRORUI".
Prima di eseguire l'exploit, è importante controllare alcuni aspetti per non eseguirlo senza successo e quindi far scattare alcuni allarmi. La prima cosa che controlliamo è la versione della build di Windows, poiché alcune versioni non sono vulnerabili al nostro exploit (quelle con una build inferiore a 7600). Dopo di che, verifichiamo di non avere ancora diritti di amministratore; se così non fosse, non ci sarebbe motivo di eseguire lo script. Quindi, controlliamo le impostazioni UAC per confermare che non sia impostato su "Notifica sempre", poiché se fosse impostato su quel valore, il nostro exploit sarebbe inutile. Infine, verifichiamo se l'utente appartiene al gruppo degli amministratori, perché, in caso contrario, l'exploit non avrebbe successo.