Hola a todos. Hace pocos días fué publicada una vulnerabilidad de XXE relacionada a una funcionalidad de Windows. Esto nos viene como anillo al dedo para continuar con el tema de la entrada anterior
El 20/03, el investigador Nabeel Ahmed publicó una vulnerabilidad de XXE que afecta a la funcionalidad Windows Remote Assistance (CVE-2018-0878).
Qué es Windows Remote Assistance?
Es una herramienta que nos permite darle el control remoto de nuestro equipo a alguien para que nos ayude a solucionar un problema (Esto ya suena bastante feo). Su funcionamiento es el siguiente.
Se ejecuta remote assistance y nos aparece la siguiente ventana:
Si elegimos la opción "Invitar a una persona de confianza para ayudarle" nos pedirá que especifiquemos como queremos invitar a nuestro asistente/ayudante. Esto puede hacerse de tres maneras:
1. Guardar la información en un archivo
2. Usar el correo para enviar la invitación
3. Usar conexión fácil (fácil siempre significa poco seguro jeje)
Si seleccionamos "Guardar esta invitación como un archivo" se nos genera el archivo de invitación (como era de esperar):
Este archivo contiene la siguiente información:
Contenido del archivo de invitación
Como podemos observar, es un archivo XML con los siguientes parámetros:
Parámetros del archivo de invitación
Conocer o no estos parámetros no nos interesan para explotar la vulnerabilidad asi que no ahondaremos mas en ellos.
El problema está, en la librería utilizada por Windows para parsear el contenido del archivo de invitación. Si listamos las dll´s cargadas para el proceso de asistencia remota veremos una llamada msxml3.dll
Librería que se encarga de parsear la info
Esta librería permite el uso de SYSTEM entities, de lo cual podemos abusar como vimos en la entrada anterior....
Preparando nuestro ataque
Lo que vamos a hacer para poder obtener información del equipo víctima, es modificar el archivo de invitación. Lo que vamos a colocar en el archivo es algo similar a lo que vimos y explicamos en la entrada anterior:
Contenido del archivo de invitación modificado
Básicamente, le pedimos al equipo víctima que se conecte a nuestro equipo (donde tenedremos un web server escuchando en el puerto 80) y que lea un archivo xml con la siguiente información:
Archivo alojado en nuestro servidor con instrucciones para leer el archivo win.ini
En esta demostración, como habrán podido notar, está todo realizado desde el mismo host, pero con esto alcanza para demostrar la vulnerabilidad.
Con todo esto listo, enviamos el archivo a nuestra víctima. Una vez que lee el archivo, el parser hace su trabajo, busca el contenido del archivo win.ini que le especificamos y lo envía a nuestro servidor.
Aquí, lo que vemos en el access log de nuestro Apache:
Nice no?
Microsoft ya publicó un update de seguridad para mitigar esto asi que...a parchear!
https://support.microsoft.com/en-us/help/4089453/security-update-for-vulnerabilities-in-windows-server-2008
Les dejo el enlace al blog de la publicación de la vulnerabilidad:
https://krbtgt.pw/windows-remote-assistance-xxe-vulnerability/
SALUDOS Y....
HAPPY XXE HACKING!