Recordando la vulnerabilidad MS16-135 x64 en Win32K: Escalando privilegios

El CVE-2016-7255 presentaba y detallaba la vulnerabilidad. El código no es nuevo, ya que en C lo tenemos hace X meses, pero la prueba de concepto en Powershell está modificada. Este CVE se utilizó para llevar a cabo un ataque dirigido. Google y Microsoft confirmaron que el grupo APT28 utilizó una vulnerabilidad en Flash, con CVE-2016-7855, junto con esta vulnerabilidad para llevar a cabo la penetración y escalada de privilegios. La vulnerabilidad es explotada a través de la llamada a win32k.sys y NtSetWindowLongPtr(). El detalle de la vulnerabilidad lo puedes encontrar en este magnífico artículo.

Si revisamos los boletines de Microsoft nos encontramos con información detallada de la vulnerabilidad y el impacto y criticidad que esta presenta. La vulnerabilidad es crítica ya que afecta a los sistemas Microsoft desde Windows Vista hasta Windows 10 y 2016 Server, es decir, en todos los sistemas operativos modernos de Microsoft. ¿Qué debemos tener en cuenta para ver si estamos protegidos? Fácil, podemos revisar las actualizaciones, sobretodo de seguridad, instaladas en el equipo. Para ello podemos abrir el Panel de Control ir a Programas -> Ver actualizaciones instaladas.


Si nos fijamos en la imagen, encontramos un paquete de actualizaciones de seguridad, el cual está protegiendo el equipo de laboratorio de esta vulnerabilidad. Para este ejemplo, quitamos dicha actualización, cosa no recomendada. Hacemos que el equipo sea vulnerable. Hay que ver que dicha actualización se instaló en marzo, por lo que durante meses este equipo virtual de pruebas ha sido vulnerable.

El equipo es un Windows 10 con casi todas las actualizaciones instaladas, digo casi todas, ya que acabo de quitar una. Lo primero que vamos a hacer es probar el exploit escrito en Powershell que explota la vulnerabilidad del sistema.


Estando en Windows 10 probamos el script de Powershell que implementa el exploit contra Win32k.sys. Si hacemos la lectura con los mensajes que ocurrían en el exploit escrito en C vemos que la cosa va bien. Obtenemos un ‘Duplicating SYSTEM token!’. A continuación, probamos rápidamente qué usuario somos en el sistema y hemos pasado de un usuario sin privilegios al usuario SYSTEM. La escalada de privilegio se ha llevado a cabo.


El siguiente paso es probar esto en remoto, es decir, simular lo que hizo el APT28. Una vez se obtiene acceso remoto a través, por ejemplo, de Metasploit, vemos como ejecutar el exploit local a través de la sesión de Metasploit.

En primer lugar, hay que tener en cuenta que el script de Powershell solo se ejecuta en arquitecturas x64, ya que el exploit solo es eficaz para este tipo de arquitecturas. Con Metasploit, si no tenemos una sesión x64 podemos crearla a través del módulo exploit/windows/local/payload_inject.


Ahora sí, estamos seguros de poder lanzar el exploit de Powershell. Para ello, cargamos en un Meterpreter el módulo de Powershell, el cual nos permite interactuar de forma sencilla con la línea de comandos. Ahora cargaremos directamente a memoria el código del script de Powershell, este podría ser obtenido desde el propio Github de FuzzySecurity o desde un servidor web bajo nuestro control. Como se puede en la imagen se descarga a memoria y se ejecuta automáticamente, gracias a la instrucción IEX o Invoke-Expression.


En este instante, tenemos una Powershell De nuevo una forma a tener en cuenta en auditorías, tanto internas como externas, ya que pueden ayudar a un atacante a obtener privilegio sobre los cientos de equipos Microsoft que pueden estar desplegados en una organización. Mantén a salvo tu entorno.
dónde ya no somos un usuario sin privilegios, si no que somos System.