Análisis y explotación de vulnerabilidades 0day en el sistema Windows de Microsoft
Recientemente, un parche de seguridad publicado por Microsoft ha solucionado una vulnerabilidad de escalada de privilegios en win32k que está siendo activamente explotada. Esta vulnerabilidad afecta principalmente a versiones anteriores del sistema operativo Windows, y parece no poder ser desencadenada en Windows 11. Este artículo analizará cómo los atacantes podrían seguir aprovechando este tipo de vulnerabilidades en el actual entorno de seguridad. El siguiente análisis se llevó a cabo en un entorno de Windows Server 2016.
Antecedentes de la vulnerabilidad
Las vulnerabilidades 0day se refieren a fallos de seguridad que no han sido divulgados ni reparados, similares al concepto de transacciones T+0 en los mercados financieros. Este tipo de vulnerabilidades, una vez explotadas maliciosamente, pueden causar daños graves. La vulnerabilidad 0day descubierta en el sistema Windows permite a los atacantes obtener el control total del sistema, lo que les permite llevar a cabo ataques como el robo de información, la destrucción del sistema y la inserción de malware. Desde la perspectiva de Web3, esto podría llevar al robo de claves privadas, la transferencia de activos digitales e incluso amenazar todo el ecosistema Web3 basado en la infraestructura de Web2.
Análisis de parches
El análisis del código del parche revela que se corrigió principalmente un problema relacionado con el manejo del conteo de referencias de objetos. Junto con los comentarios del código fuente de win32k de etapas anteriores, se puede entender que el código original solo bloqueaba el objeto de la ventana, sin bloquear el objeto del menú dentro de la ventana, lo que podría causar una referencia incorrecta al objeto del menú.
Prueba de concepto de explotación de vulnerabilidades ( PoC )
El análisis revela que el MenuItemState en la función xxxEnableMenuItem puede devolver el menú principal de la ventana o un submenú. Hemos construido una estructura de menú especial de cuatro niveles que incluye las siguientes características:
El ID del menú de nivel más bajo D debe ser del tipo de menú del sistema.
El menú superior A también debe ser un menú del sistema, pero se deben eliminar los elementos con el mismo ID que el menú D.
Eliminar la referencia del menú C en el menú B.
La existencia del menú B parece ayudar en el lanzamiento del menú C.
Al activar la vulnerabilidad, se elimina la asociación del menú C y B al devolver la capa de usuario en xxxRedrawTitle, liberando el menú C. Esto provoca que la referencia posterior al objeto de menú C en la función xxxEnableMenuItem sea inválida.
Explotación de vulnerabilidades ( Exp ) implementación
Enfoque general
Considerar dos posibles direcciones de uso:
Ejecutar shellcode: referencia a vulnerabilidades anteriores como CVE-2017-0263, pero en las versiones más recientes de Windows puede enfrentar muchos obstáculos.
Utilizando primitivas de lectura y escritura para modificar el token: en los últimos años todavía hay experiencias públicas que se pueden consultar, principalmente se necesita resolver el problema de cómo controlar por primera vez el valor de cbwndextra.
Adoptamos la segunda opción, dividiendo exp en dos pasos: controlar el valor de cbwndextra y establecer un primitivo de lectura/escritura estable.
primera escritura de datos
Utilizar el objeto de nombre de la clase de ventana WNDClass para ocupar y liberar la memoria del objeto del menú. En la función xxxRedrawWindow, encontrar la ubicación donde se pueden escribir datos, controlando los datos de memoria del objeto anterior para satisfacer la verificación de banderas en la función.
diseño de memoria estable
Diseñar la disposición de memoria de tres objetos HWND de 0x250 bytes en continuo, liberar el objeto intermedio y ocuparlo con un objeto HWNDClass. Los objetos HWND en los extremos se utilizan para verificar a través de funciones e implementar primitivas de lectura y escritura. Localizar con precisión la disposición de objetos a través de la filtración de la dirección del manejador del núcleo.
Implementación de primitivas de lectura y escritura
Cualquier lectura usa la función GetMenuBarInfo, cualquier escritura usa la función SetClassLongPtr. Aparte de la escritura de TOKEN, todas las demás operaciones de escritura se completan a través del objeto de clase del primer objeto de ventana.
Conclusión
Microsoft está utilizando Rust para reestructurar el código win32k, lo que podría resolver completamente este tipo de vulnerabilidades en el futuro.
La explotación de este tipo de vulnerabilidades depende principalmente de la filtración de la dirección del manejador de la pila de escritorio, lo que aún representa un riesgo de seguridad para los sistemas antiguos.
El descubrimiento de esta vulnerabilidad puede deberse a una mejor detección de la cobertura del código.
La monitorización de la disposición de memoria anómala y la lectura/escritura de datos de ventana ayuda a detectar vulnerabilidades similares.
Ver originales
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
11 me gusta
Recompensa
11
6
Compartir
Comentar
0/400
TestnetNomad
· hace14h
¿Qué estás diciendo sobre Rust?
Ver originalesResponder0
StealthDeployer
· hace14h
Ya he cambiado a Linux, es una decisión inteligente.
Ver originalesResponder0
CryptoMotivator
· hace14h
Otra vez haciendo de las suyas, este bug de Microsoft realmente es una tradición antigua.
Análisis de vulnerabilidades 0day en sistemas Windows: desde la elevación de privilegios en win32k hasta los riesgos de seguridad en Web3
Análisis y explotación de vulnerabilidades 0day en el sistema Windows de Microsoft
Recientemente, un parche de seguridad publicado por Microsoft ha solucionado una vulnerabilidad de escalada de privilegios en win32k que está siendo activamente explotada. Esta vulnerabilidad afecta principalmente a versiones anteriores del sistema operativo Windows, y parece no poder ser desencadenada en Windows 11. Este artículo analizará cómo los atacantes podrían seguir aprovechando este tipo de vulnerabilidades en el actual entorno de seguridad. El siguiente análisis se llevó a cabo en un entorno de Windows Server 2016.
Antecedentes de la vulnerabilidad
Las vulnerabilidades 0day se refieren a fallos de seguridad que no han sido divulgados ni reparados, similares al concepto de transacciones T+0 en los mercados financieros. Este tipo de vulnerabilidades, una vez explotadas maliciosamente, pueden causar daños graves. La vulnerabilidad 0day descubierta en el sistema Windows permite a los atacantes obtener el control total del sistema, lo que les permite llevar a cabo ataques como el robo de información, la destrucción del sistema y la inserción de malware. Desde la perspectiva de Web3, esto podría llevar al robo de claves privadas, la transferencia de activos digitales e incluso amenazar todo el ecosistema Web3 basado en la infraestructura de Web2.
Análisis de parches
El análisis del código del parche revela que se corrigió principalmente un problema relacionado con el manejo del conteo de referencias de objetos. Junto con los comentarios del código fuente de win32k de etapas anteriores, se puede entender que el código original solo bloqueaba el objeto de la ventana, sin bloquear el objeto del menú dentro de la ventana, lo que podría causar una referencia incorrecta al objeto del menú.
Prueba de concepto de explotación de vulnerabilidades ( PoC )
El análisis revela que el MenuItemState en la función xxxEnableMenuItem puede devolver el menú principal de la ventana o un submenú. Hemos construido una estructura de menú especial de cuatro niveles que incluye las siguientes características:
Al activar la vulnerabilidad, se elimina la asociación del menú C y B al devolver la capa de usuario en xxxRedrawTitle, liberando el menú C. Esto provoca que la referencia posterior al objeto de menú C en la función xxxEnableMenuItem sea inválida.
Explotación de vulnerabilidades ( Exp ) implementación
Enfoque general
Considerar dos posibles direcciones de uso:
Ejecutar shellcode: referencia a vulnerabilidades anteriores como CVE-2017-0263, pero en las versiones más recientes de Windows puede enfrentar muchos obstáculos.
Utilizando primitivas de lectura y escritura para modificar el token: en los últimos años todavía hay experiencias públicas que se pueden consultar, principalmente se necesita resolver el problema de cómo controlar por primera vez el valor de cbwndextra.
Adoptamos la segunda opción, dividiendo exp en dos pasos: controlar el valor de cbwndextra y establecer un primitivo de lectura/escritura estable.
primera escritura de datos
Utilizar el objeto de nombre de la clase de ventana WNDClass para ocupar y liberar la memoria del objeto del menú. En la función xxxRedrawWindow, encontrar la ubicación donde se pueden escribir datos, controlando los datos de memoria del objeto anterior para satisfacer la verificación de banderas en la función.
diseño de memoria estable
Diseñar la disposición de memoria de tres objetos HWND de 0x250 bytes en continuo, liberar el objeto intermedio y ocuparlo con un objeto HWNDClass. Los objetos HWND en los extremos se utilizan para verificar a través de funciones e implementar primitivas de lectura y escritura. Localizar con precisión la disposición de objetos a través de la filtración de la dirección del manejador del núcleo.
Implementación de primitivas de lectura y escritura
Cualquier lectura usa la función GetMenuBarInfo, cualquier escritura usa la función SetClassLongPtr. Aparte de la escritura de TOKEN, todas las demás operaciones de escritura se completan a través del objeto de clase del primer objeto de ventana.
Conclusión
Microsoft está utilizando Rust para reestructurar el código win32k, lo que podría resolver completamente este tipo de vulnerabilidades en el futuro.
La explotación de este tipo de vulnerabilidades depende principalmente de la filtración de la dirección del manejador de la pila de escritorio, lo que aún representa un riesgo de seguridad para los sistemas antiguos.
El descubrimiento de esta vulnerabilidad puede deberse a una mejor detección de la cobertura del código.
La monitorización de la disposición de memoria anómala y la lectura/escritura de datos de ventana ayuda a detectar vulnerabilidades similares.
Comentario del artículo:
¿Rust puede salvar a Windows? Me hizo reír.