Está en la página 1de 2

De XP a Windows 10: explotando Microsoft CTF

Publicado por Vicente Motos on miércoles, 14 de agosto de 2019 Etiquetas:


técnicas , vulnerabilidades , Windows
Tavis Ormandy de Project Zero de Google ha publicado una vulnerabilidad que afecta
a todas las versiones de Windows, desde XP a 10.

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:

Este servicio crea un puerto ALPC (Local Inter-Process Communication) al que las
aplicaciones se conectan para intercambiar mensajes sobre cambios en el layout del
teclado o métodos de entrada. Cuando cualquier proceso crea una ventana, el kernel
invoca una devolución de llamada o callback, USER32!CtfHookProcWorker, que carga
automáticamente el cliente msctf.

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... y Tavis Ormandy ha
creado una herramienta llamada CTFtool que nos permitirá interactuar como cliente
desde la línea de comandos para experimentarlos.

Podéis descargar incluso una versión compilada desde su repositorio de Github:


https://github.com/taviso/ctftool/releases

Empezaremos conectándonos a nuestra sesión y viendo los clientes conectados:

¡No solo se puede enviar comandos al servidor, podemos esperar a que se conecte un
cliente en particular y luego pedirle al servidor que también le envíe comandos!
Además, como habéis podido imaginar, no hay un control de acceso entre los clientes
y el servidor de MSCTF, lo que nos permitirá mandar comandos incluso a
aplicaciones/clientes con privilegios elevados.

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:

Bonito... ¿verdad? ;)

Ahora a ver cómo M$ moderniza su protocolo CTF, porque esto y como dice Tavis (mis
dieses y mis miles) es sólo la punta del iceberg...

Más info y detalle: https://github.com/taviso/ctftoo

También podría gustarte