SandboxEscaper / PoC-LPE: ¿qué hay dentro?


En un habr ya hay noticias sobre esta vulnerabilidad , pero, desafortunadamente, sin detalles técnicos. Le sugiero que mire dentro del archivo publicado (autor - SandboxEscaper ).

Debajo del cortador se encuentra la traducción del documento de descripción en el archivo.

Descripción de la vulnerabilidad


El servicio del Programador de tareas tiene una interfaz RPC (accesible a través del transporte ALPC) que admite el método SchRpcSetSecurity.

Este es el prototipo de este método:

long _SchRpcSetSecurity( [in][string] wchar_t* arg_1, //Task name [in][string] wchar_t* arg_2, //Security Descriptor string [in]long arg_3); 

Las tareas creadas por el planificador de tareas crean el directorio / archivo correspondiente en c: \ windows \ system32 \ tareas. Probablemente, este método está destinado a registrar tareas DACL'a ubicadas allí. Pero la grabación ocurrirá después de la suplantación. Sin embargo, por alguna razón, la implementación del método también verifica la presencia de un archivo .job en c: \ windows \ tareas y escribe un DACL sin suplantación . Dado que el usuario (incluso el usuario del grupo de invitados) puede crear archivos en este directorio, simplemente podemos crear un enlace a cualquier otro archivo que podamos leer. Al usar dicho enlace rígido, podemos forzar al servicio del planificador (que se ejecuta con privilegios de SYSTEM) a escribir una DACL arbitraria (consulte el segundo parámetro SchRpcSetSecurity) en un archivo de nuestra elección.

Por lo tanto: para cualquier archivo que se pueda leer, puede cambiar el DACL, lo que le permite sobrescribirlo por completo.

Explotación de vulnerabilidad


¡Esta vulnerabilidad nos da una primitiva realmente fuerte! El problema principal es que después de la instalación (por defecto), muchos usuarios importantes solo pueden ser modificados por el usuario TrustedInstaller (pero no por el usuario SYSTEM).

El archivo contiene una secuencia de comandos de PowerShell para enumerar archivos que puede controlar. Solo corre:
./enumerate.ps1 >output.txt

El sistema tiene muchos objetivos. Puede controlar los archivos de programa, y ​​si un administrador u otro usuario utiliza su archivo de destino, los archivos que ha sobrescrito se pueden iniciar con los privilegios necesarios.

El segundo problema es que, aunque podemos obtener el control de muchos archivos, escribir en ellos a menudo es imposible, porque estas DLL ya están cargadas en algún lugar para su ejecución. Intentar escribir un DACL para un archivo cargado para su ejecución causará un error de acceso compartido. Pero la vulnerabilidad se puede usar para otros tipos de archivos, que pueden ser un mejor objetivo que una DLL.

Para la operación, se seleccionó el archivo C: \ Windows \ System32 \ DriverStore \ FileRepository \ prnms003.inf_amd64_4592475aca2acf83 \ Amd64 \ printconfig.dll (el nombre del directorio puede variar, esto se tiene en cuenta en PoC). Parece que este archivo pertenece a la impresora XPS y no está cargado en el servicio de impresión de forma predeterminada (puede suceder que el archivo ya esté cargado ... pero más a menudo no lo está).

Y cuando comenzamos el trabajo de impresión con la impresora XPS, el servicio cargará esta DLL, que podemos reescribir de antemano. Tal vector de ataque (secuestro) se puede aplicar fácilmente para algo mejor. Puedo intentar encontrar las mejores opciones ... solo házmelo saber.

Nota : en una computadora portátil antigua, donde Windows 10 se ejecuta desde hace varios años, hay dos directorios prnms003.inf_amd64_ *. La nueva versión no elimina la anterior, lo que significa que no hay garantía de que FindFirstFile (usado en PoC) encuentre el directorio actual. Por lo tanto, puede expandir el código sobrescribiendo todos los printconfig.dll encontrados o verificar el atributo del último registro en el archivo y seleccionar uno más nuevo.

Demo


También puede encontrar un video con una demostración en el archivo:
Texto oculto

Source: https://habr.com/ru/post/es421593/


All Articles