La vulnerabilidad reside en la forma en que los clientes y el servidor de MSCTF se comunican entre sí, lo que permite que incluso una aplicación de bajo privilegio o una zona protegida pueda leer y escribir datos en una aplicación de mayor privilegio.
MSCTF es un módulo en Text Services Framework (TSF) del sistema operativo Windows que administra cosas como métodos de entrada, diseños de teclado, procesamiento de texto y reconocimiento de voz.
En pocas palabras, cuando inicia sesión en su máquina Windows, inicia un servicio de monitor CTF que funciona como una autoridad central para manejar las comunicaciones entre todos los clientes, que en realidad son ventanas para cada proceso que se ejecuta en la misma sesión.
El problema está en el subsistema MSCTF que es parte del framework de servicios de texto o TSF (Text Service Framework). El TSF administra cosas como métodos de entrada, distribuciones de teclado, procesamiento de texto, etc.
Hay dos componentes principales, el servidor/monitor ctfmon y el cliente msctf. El servicio ctfmon arranca cuando se inicia sesión en la máquina como puedes comprobar simplemente viendo el administrador de tareas:

El cliente se conecta al puerto ALPC y manda su HWND, el subproceso y la identificación del proceso.
El servidor espera continuamente los mensajes de los clientes, pero los clientes solo buscan mensajes cuando se les notifica a través de PostMessage(). Esta es la razón por la que los clientes llaman a RegisterWindowMessage() al inicio.
Los clientes pueden enviar comandos al monitor o pedirle al monitor que reenvíe comandos a otros clientes especificando el threat id, es decir, se pueden mandar mensajes a cualquier subproceso conectado, o al propio monitor configurando el destino en el subproceso cero. Además el protocolo CTF es bastante extenso, tiene muchos parámetros y hay fallos de diseño en este sistema. Tavis Ormandy ha creado una herramienta llamada CTFtool que nos permitirá interactuar como cliente desde la línea de comandos para experimentarlos.
Empezaremos conectándonos a nuestra sesión y viendo los clientes conectados:

Y evidentemente tampoco vamos a conformarnos con cambiar una distribución de teclado para trollear... un protocolo tan antiguo como CTF tiene vulnerabilidades de corrupción de memoria y vamos a poder explotar un integer overflow para... por ejemplo, obtener una shell interactiva con privilegios de SYSTEM. "Sólo" hay que evadir CFG y ASLR y la magia ocurre...
A la caza del cliente CTF con privilegios
Ahora que sabemos que se puede comprometer a cualquier cliente CTF, ¿cómo encontramos algo útil? Como decimos, no hay control de acceso en CTF, por lo que podemos conectarnos a la sesión activa de otro usuario o esperar a que un Administrador inicie sesión y comprometer su sesión. Sin embargo, hay una mejor opción: si usamos USER32!LockWorkstation, podemos cambiar al escritorio Winlogon privilegiado que ya se está ejecutando como SYSTEM!:

O si quieres aprovecharte del cuadro de diálogo UAC con el correspondiente script sólo tienes que esperar y se iniciará la shell con privilegios (ver video):

Fuente: HackPlayers
No hay comentarios.:
Publicar un comentario
Gracias por dejar un comentario en Segu-Info.
Gracias por comentar!