the_open_door
café
ESEN
← Volver al índice

SmarterMail .NET deserialization (CVE-2019-7214)

SmarterMail es un servidor de correo para Windows. Sus versiones 16.x anteriores al build 6985 exponen un canal de administración sobre .NET Remoting en el puerto 17001 que deserializa objetos enviados por el cliente sin validar su tipo. Esto es CVE-2019-7214: un atacante no autenticado puede enviar un objeto serializado malicioso (un gadget de la familia ObjectDataProvider/TypeConfuseDelegate) que, al reconstruirse, ejecuta comandos en el servidor.

La deserialización insegura es un patrón clásico: el receptor confía en el flujo de bytes y reconstruye un objeto arbitrario; con el gadget adecuado, esa reconstrucción dispara una llamada a Process.Start u equivalente. Aquí el canal ni siquiera pide autenticación, así que el RCE es directo.

Hay un exploit público (Exploit-DB 49216) que automatiza el envío del objeto y trae un payload de reverse shell en PowerShell:

searchsploit -m windows/remote/49216.py
# editar HOST, PORT=17001, LHOST, LPORT en la cabecera
python3 49216.py

El objeto se deserializa en el contexto del servicio SmarterMail, que corre con una cuenta muy privilegiada (a menudo SYSTEM), de modo que la shell suele entrar ya como nt authority\system sin necesidad de escalar.

Cómo se identifica. El puerto 17001 marcado como MS .NET Remoting en nmap, junto a indicios de SmarterMail (consola web en 9998 con /interface/root, o un FTP anónimo con la estructura ImapRetrieval/Spool), apunta al producto y a su versión vulnerable.

Cómo detectarlo. La firma en red es tráfico .NET Remoting hacia el puerto 17001 desde un origen que no es un cliente de administración conocido, transportando un objeto serializado con gadgets reconocibles (ObjectDataProvider, TypeConfuseDelegate, cadenas de System.Diagnostics.Process) que un IDS con inspección de payload puede marcar. En el host, el patrón definitivo es de linaje de procesos: el servicio SmarterMail (a menudo como SYSTEM) lanzando powershell.exe/cmd.exe como hijo (Event ID 4688 / Sysmon 1), algo que un servidor de correo nunca hace. Una conexión al 17001 seguida de un proceso hijo anómalo es la cadena.

Defensa. Actualizar SmarterMail al build 6985 o posterior, no exponer el puerto 17001 a redes no confiables y ejecutar el servicio con una cuenta de menor privilegio. La raíz del problema, la deserialización de datos no confiables, se evita validando tipos o usando formatos de datos seguros. Relacionado con la deserialización en Node.js y la deserialización de pickle.

Máquinas donde se aplica