Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2024-21413 PoC — Microsoft Outlook Remote Code Execution Vulnerability

Source
Associated Vulnerability
Title:Microsoft Outlook Remote Code Execution Vulnerability (CVE-2024-21413)
Description:Microsoft Outlook Remote Code Execution Vulnerability
Readme
# Explotación de CVE-2024-21413 (Outlook)

Estado del proyecto: En pausa (práctica incompleta; no se logró capturar hashes NTLM)

## Objetivos

Intentar explotar la vulnerabilidad CVE-2024-21413, que permite la fuga de hashes NTLM en Outlook al interactuar con enlaces maliciosos.

El objetivo de la práctica no era construir desde cero todas las herramientas utilizadas en el ataque, sino comprender a fondo su funcionamiento central y experimentar con los errores reales al montar una infraestructura propia.

He utilizado códigos de exploits y servidores SMTP/POP3 desarrollados por terceros, publicados por la comunidad, a la cual agradezco profundamente.


## Contenido

- Requisitos
- Máquinas virtuales
- Instalación
- Flujo de la explotación
- Pruebas y resultados
- Lecciones aprendidas


## Requisitos

- Python 3.10+
- Outlook 2016
- Kali linux
- Servidores propios SMTP/POP3
- Exploit
- Maquinas virtuales

## Máquinas virtuales

### Máquina víctima (Windows)

- **SO**: Windows 10 Home (x32)
- **Outlook**: Microsoft Outlook 2016 (versión 16.0.4266.1001)
- **Red**: Adaptador 1: NAT, Adaptador 2: Red interna

### Máquina atacante (Kali)

- **SO**: Kali Linux 2025.1
- **Herramientas y bibliotecas instaladas**: 
  - Python 3.10+
  - smtplib
  - email
  - socket
  - threading 
  - os
  - aiosmtpd
  - servidor-smtp.py
  - servidor-pop3.py
  - exploit.py
- **Red**: Adaptador 1: NAT, Adaptador 2: Red interna

### Infraestructura

- Se montaron los servidores SMTP y POP3 en la máquina atacante (Kali) manualmente usando scripts en Python.


Las máquinas fueron ejecutadas en VirtualBox.


## Instalación

### Instalación (Kali)

#### Instalación servidor SMTP
- **Venv**: Entorno virtual con Python 3
  - **Paso 1**: Crear un directorio para el servidor y el entorno virtual (mkdir smtp-lab) y accede a él (cd smtp-lab)
  - **Paso 2**: Crea un entorno virtual dentro del directorio (python3 -m venv venv)
  - **Paso 3**: Activa el entorno virtual (source venv/bin/activate)
  - **Paso 4**: Instalar aiosmtpd dentro del entorno virtual (pip install aiosmtpd)
  - **Paso 5**: Crear el codigo del servidor (nano servidor-smtp.py)
  - **Paso 6**: Ejecutar el servidor (python3 servidor-smtp.py)

##### Código del servidor SMTP
El código del servidor SMTP se encuentra en el archivo [`src/servidor-smtp.py`](./src/servidor-smtp.py).

#### Instalación servidor POP3:
- **Paso 1**: Crear un directorio para el servidor (mkdir pop3-server) y acceder a él (cd pop3-server)
- **Paso 2**: Crear el código del servidor (nano server-pop3.py) 
- **Paso 3**: Ejecutar el servidor (python3 server-pop3.py)

##### Código del servidor POP3
El código del servidor POP3 se encuentra en el archivo [`src/servidor-pop3.py`](./src/servidor-pop3.py).

#### Instalación exploit
- **Paso 1**: Crear el código, este código lo he extraído de [CMNatic](https://github.com/CMNatic), pero ha sido adaptado para mi infraestructura (nano exploit.py)

##### Código del exploit
El código del exploit se encuentra en el archivo [`src/exploit.py`](./src/exploit.py).

### Instalación (Windows 10)
- **Paso 1**: Instalar ISO Microsoft Office 2016, yo use la página archive.org e instale la versión de Microsoft Office 2016 Professional Plus x86
- **Paso 2**: Una vez instalada la ISO descargar Microsoft office y acceder a Outlook 2016
- **Paso 3**: Configurar correctamente Outlook

#### Configuración de Outlook 2016
Aquí se muestra cómo configurar Outlook para que funcione con el servidor SMTP y POP3 de prueba.
- Tanto en el punto de "Incoming mail server" como "Outgoing mail server(SMTP)" se debe de poner la ip de la interfaz de red interna de la máquina atacante (Kali).
- La contraseña es irrelevante para el ataque, se puede elegir cualquiera.

![Captura de pantalla de la configuración](./capturas/configuracion-outlook.png)

## Flujo de explotación
El objetivo del exploit para CVE-2024-21413 es lograr que Outlook haga una solicitud automática de tipo SMB a un recurso controlado por el atacante, lo que resulta en el envío del hash NTLM de la víctima, que puede ser capturado offline para crackeo.

### Preparación del entorno
1. La máquina atacante (Kali) lanza un servidor SMTP y POP3 personalizado.
2. Outlook en la máquina víctima (Windows 10) está configurado para recibir correos desde ese servidor.
3. La máquina atacante (Kali) levanta un servidor SMB falso (En mi caso utilicé responder)

### Envío del correo malicioso
- Se envía un correo a la víctima desde el SMTP del atacante.
- El cuerpo del mensaje contiene un enlace UNC malicioso.
- La ruta está diseñada para activar una conexión SMB automática si el usuario interactúa con el enlace.

### Interacción del usuario
- La víctima abre Outlook y ve el mensaje.
- Se espera que haga clic en el enlace.
- Si Outlook intenta resolver la ruta UNC, se genera una petición SMB al servidor del atacante.
- A continuación, se muestra cómo se vería el correo malicioso en Outlook desde la perspectiva de la víctima:

![Correo malicioso en Outlook](./capturas/correo-victima.png)


### Captura del hash
- El servidor SMB del atacante recibe la conexión.
- Outlook, al intentar autenticar, envía automáticamente el hash NTLM del usuario.
- El atacante puede guardar ese hash para un ataque tipo hashcat.

### Notas
- En mi caso, el correo llegaba correctamente a Outlook.
- Sin embargo, al hacer clic en el enlace UNC, no se generaba la conexión SMB esperada.
- Aún desconozco la causa del fallo, aunque sospecho que puede estar relacionado con la configuración de red, la versión de Outlook o un problema de accesibilidad o respuesta del servidor SMB.


## Pruebas y resultados

### Funcionalidades que sí funcionaron
- SMTP y POP3 configurados correctamente, Outlook sincronizó con ellos sin errores.
- El correo malicioso fue recibido por Outlook.
- El mensaje mostraba el enlace UNC sin ser bloqueado.
- El entorno SMB del atacante estaba levantado y en escucha.

### Lo que no funcionó
- Al hacer clic en el enlace UNC desde Outlook, no se produjo tráfico SMB visible en Wireshark.
- No se generó ningún intento de autenticación NTLM desde la máquina víctima
- No se registraron conexiones en el servidor SMB.

### Análisis con Wireshark
- Capturas tomadas en la interfaz de Kali (eth1).
- Se observó el tráfico SMTP y POP3, pero ningún paquete TCP 445 ni UDP 137/138 al hacer clic en el enlace.
- También se intentó con Outlook ejecutado como administrador: sin cambios.


## Lecciones aprendidas
### Conocimientos adquiridos
- Cómo funcionan SMTP y POP3 desde nivel bajo.
- Qué espera exactamente Outlook al sincronizar cuentas.
- Cómo Outlook interpreta enlaces UNC y qué condiciones deben cumplirse para que los abra automáticamente.
- El valor de Wireshark y logs como herramientas de depuración en laboratorios complejos.

### Por qué decidí cerrarlo aquí
- Tras múltiples intentos, el exploit no llegó a la etapa de captura de hash, que era el objetivo final.
- Documenté toda la infraestructura, pruebas y resultados, lo cual sigue siendo valioso como laboratorio educativo.
- Aunque no se logró el objetivo final, el proceso me permitió adquirir un conocimiento profundo de cada componente técnico involucrado. Se puede retomar en el futuro.

## Créditos
El código de este exploit está basado en el trabajo de CMNatic de [https://github.com/CMNatic/CVE-2024-21413](https://github.com/CMNatic/CVE-2024-21413). He realizado modificaciones para adaptarlo a mi entorno.
File Snapshot

[4.0K] /data/pocs/f135ddaafa3e19761e354d013e2162cef49c134b ├── [4.0K] capturas │   ├── [ 26K] configuracion-outlook.png │   └── [ 60K] correo-victima.png ├── [7.4K] README.md └── [4.0K] src ├── [ 846] exploit.py ├── [1.8K] server-pop3.py └── [ 577] servidor-smtp.py 2 directories, 6 files
Shenlong Bot has cached this for you
Remarks
    1. It is advised to access via the original source first.
    2. Local POC snapshots are reserved for subscribers — if the original source is unavailable, the local mirror is part of the paid plan.
    3. Mirroring, verifying, and maintaining this POC archive takes ongoing effort, so local snapshots are a paid feature. Your subscription keeps the archive online — thank you for the support. View subscription plans →