miércoles, abril 18, 2018

Patch or Die: CVE-2018-0886 Un RCE para Windows

Sin duda es una de las vulnerabilidades del mes en lo que a sistemas Microsoft se refiere. La vulnerabilidad CVE-2018-0886 permite a un potencial atacante ejecutar código remoto y explotar tanto RDP, el protocolo de escritorio remoto, como WinRM, protocolo para la administración remota de Windows. La vulnerabilidad no es trivial, pero ya existe una prueba de concepto publicada por la empresa Preempt.

Figura 1: Patch or Die: CVE-2018-0886 Un RCE para Windows

La vulnerabilidad de ejecución de código remota o RCE (Remote Code Execution) en el proveedor de credenciales de Windows, también conocido como CredSSP, supone que se pueda retransmitir las credenciales del usuario y utilizarlas para la ejecución de código en el sistema, tal y como explicó Microsoft en su boletín de seguridad.

Figura 2: CVE-2018-0886 en Security TechCenter de Microsoft

CredSSP es un proveedor de autenticación que gestiona las peticiones de autenticación para otras aplicaciones, por lo que, este hecho deja en mal situación a las aplicaciones que utilizar el proveedor. En Exploit-DB se encuentra una guía dónde también se puede encontrar un mirror dónde encontrar la PoC y la información para probarlo.

Figura 3: PoC en Exploit DB

Resumiendo la vulnerabilidad CVE-2018-0886

Microsoft indica que un atacante podría explotar la vulnerabilidad contra, por ejemplo, el escritorio remoto cuando el atacante realizase un esquema de Man in the Middle, típico en los ataques a redes IPv4 & IPv6, interceptando una sesión de RDP. El atacante, con el exploit público en forma de PoC, podría ejecutar código, instalar cualquier tipo de programa, eliminar datos, modificarlos, crear usuarios, etcétera. Al final es un RCE por lo que la criticidad es clara.

Figura 4: Esquema del ataque

El único hecho que puede hacer que disminuya, levemente, la criticidad es el hecho de la necesidad de realizar un Man in the Middle. La gente de Preempt ha publicado un artículo contando en profundidad en qué consiste la vulnerabilidad y cómo se puede llevar a cabo su explotación. Sin duda, un artículo muy interesante que se debe leer.

¿Qué debemos tener claro y qué está fallando?

Debemos crear un certificado digital, una clave pública y una clave privada. El proveedor CredSSP se encarga de retransmitir las credenciales del usuario, en el caso de la utilización del RDP. Es un protocolo sencillo. Los mensajes de Terminal Service denominados TSRequest se transfieren del cliente al servidor y al contrario.

Esos mensajes llevan tokens SPNEGO, que son utilizados para la fase de negociación del protocolo de autenticación. La negociación es transparente para el cliente/servidor que utiliza CredSSP. El protocolo es transmitido a través de la sesión segura, con TLS, que se estableció previamente. El cliente confía en la clave pública del servidor. Es más, cifra y firma bytes del servidor sin ser validada su identidad. Este hecho es la esencia de la vulnerabilidad.

Figura 5: Intercambio de paquetes

Para llevar a cabo su explotación, un atacante establece un servidor no autorizado y usará la clave pública como datos de la aplicación y como una clave RSA válida. Después, reenviará los datos de la aplicación cifrados y firmados al servidor real. Como se puede ver en la imagen del artículo de Preempt, el esquema no es complejo y la esencia de la vulnerabilidad es fácilmente detectable.

Utilizar gen_cmd.py

La primera parte del ataque consiste en generar el fichero PEM necesario para la interacción con el servidor remoto y cumplir con la parte teórica del ataque. Desde el Github se puede descargar.

Figura 6: GitHub con PoC

El uso de la herramienta es sencillo y con la opción –dump se pueden visualizar los detalles del proceso.

Figura 7: Uso de gen_cmd.py

Este proceso puede tardar un poco, debido al proceso con los números primos que es llevado a cabo.

Utilizar rdpy-rdpcredsspmitm.py

Esta herramienta se puede descargar desde un repositorio perteneciente también a Preempt. La herramienta tiene varios parámetros:
• -k. Esta opción marca la clave, tal y como se ve en la imagen. 
• -c. Indica el fichero PEM generado en el paso anterior con la herramienta gen_cmd.py.  
• -l. Si esta opción se indica, se puede configurar un puerto nuevo a la escucha. Si no se pone la opción –l, por defecto el puerto es el 3389, el del RDP. 
• Al final de la instrucción se indica la dirección IP del servidor al que se atacará y se obtendrá la ejecución de código remoto.

Figura 8: Uso de rdpy-rdpcredsspmitm.py

El paper completo de la vulnerabilidad puede leerse en este enlace. El cual os recomendamos que echéis un ojo, ya que permite hacerse una idea de la criticidad y de las posibilidades de explotación. También puedes ver el ataque en video, explicado por la gente de Preempt.


Figura 9: PoC CVE-2018-0886


Actualización disponible

Por último, hablar de la actualización liberada recientemente por Microsoft. No tardes en instalarlo, ya que la vulnerabilidad es crítica, tal y como se puede ver. Además, esta prueba de concepto ya está disponible, por lo que cualquiera puede llevar a cabo el ataque.

La actualización corrige la forma en la que CredSSP valida las solicitudes durante el proceso de autenticación. Estaremos atentos por si salen nuevas pruebas de concepto o algún módulo de Metasploit que simplifique un poco más el proceso.

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths

No hay comentarios:

Publicar un comentario