
Windows - Armamento di scritture di file privilegiate con il servizio Update Session Orchestrator
⚠️ Aggiornamento 2020-06-06: questo trucco non funziona più sulle ultime build di Windows 10 Insider Preview. Ciò significa che, sebbene funzioni ancora sulla versione mainstream di Windows 10, dovresti aspettarti che venga corretto nei prossimi mesi.
Questo PoC mostra una tecnica che può essere utilizzata per armare vulnerabilità di scrittura privilegiata di file su Windows. Fornisce un'alternativa all'"exploit" di caricamento DLL di DiagHub scoperto da James Forshaw (alias @tiraniddo), che è stato corretto da Microsoft a partire dalla build 1903.
A partire da Windows 10, Microsoft ha introdotto il servizio Update Session Orchestrator. Come utente normale, puoi interagire con questo servizio usando COM e avviare una "scansione degli aggiornamenti" (cioè verificare se sono disponibili aggiornamenti) o avviare il download degli aggiornamenti in sospeso, per esempio. Esiste anche uno strumento integrato non documentato chiamato usoclient.exe, che serve a questo scopo.
Dal punto di vista di un attaccante, questo servizio è interessante perché viene eseguito come NT AUTHORITY\System e tenta di caricare una DLL inesistente (windowscoredeviceinfo.dll) ogni volta che viene creata una sessione di aggiornamento.
Ciò significa che, se trovassimo una vulnerabilità di scrittura privilegiata di file in Windows o in qualche software di terze parti, potremmo copiare la nostra versione di windowscoredeviceinfo.dll in C:\Windows\Sytem32\ e poi farla caricare dal servizio USO per ottenere l'esecuzione di codice arbitrario come NT AUTHORITY\System.
Per maggiori informazioni:
Parte 1 - https://itm4n.github.io/usodllloader-part1/
Parte 2 - https://itm4n.github.io/usodllloader-part2/
Questa soluzione è composta da due progetti: WindowsCoreDeviceInfo e UsoDllLoader.
Fornisce una DLL PoC che avvierà una bind shell sulla porta 1337 (solo localhost), ogni volta che viene chiamata la funzione QueryDeviceInformation(). Questo è il nome della funzione utilizzata dai worker USO.
È una versione ridotta di usoclient.exe. Può essere eseguito come utente normale per interagire con il servizio USO e fargli caricare windowscoredeviceinfo.dll. Poi, tenterà di connettersi alla bind shell. In caso di errori, leggi la sezione "Problemi noti".
La soluzione è già preconfigurata, quindi la compilazione dovrebbe essere facile. Sto usando Visual Studio 2019. Potrebbe non funzionare con versioni precedenti.
Release e l'architettura x64..\x64\Release\WindowsCoreDeviceInfo.dll e il loader .\x64\Release\UsoDllLoader.exe.A scopo di test, puoi:
WindowsCoreDeviceInfo.dll in C:\Windows\System32\.NT AUTHORITY\SYSTEM.Se UsoDllLoader.exe fallisce, puoi eseguire la procedura sopra manualmente.
WindowsCoreDeviceInfo.dll in C:\Windows\System32\.usoclient StartInteractiveScan come utente normale. Nota che non riceverai alcun feedback dal comando.nc.exe 127.0.0.1 1337 per connetterti alla bind shell.Questo metodo probabilmente fallirà se uno o più aggiornamenti sono in attesa di essere installati, o se gli aggiornamenti sono in corso di installazione.
A seconda della versione di Windows, UsoDllLoader.exe potrebbe fallire con vari codici di errore. Non ho approfondito troppo questi problemi. Il motivo è che è solo un PoC, che ho sviluppato per comodità. Ciò che conta di più è la DLL, non il loader. Vedi "Utilizzo 2" per maggiori dettagli.