
Desbordamiento de búfer clásico basado en pila en SLMail 5.1 que muestra cómo los servidores de correo antiguos podían ser comprometidos mediante comandos SMTP y POP3 de tamaño excesivo.
Desbordamiento de búfer basado en pila clásico en SLMail 5.5 que muestra cómo los primeros servidores de correo podían ser comprometidos mediante comandos SMTP y POP3 sobredimensionados.
Este repositorio es parte del material que utilizo al enseñar explotación de corrupción de memoria (además de mi trabajo habitual, también enseño en diferentes cursos de ciberseguridad donde ayudo a capacitar a la próxima generación de ingenieros inversos).
CVE-2003-0264 es uno de los primeros casos que presento al enseñar desbordamientos de búfer basados en pila sobre un protocolo de red. Es limpio, bien documentado y la ruta de explotación es directa, sin SEH, sin egghunter, sin restricciones de espacio. El estudiante envía un payload, sobrescribe EIP, cae en un gadget JMP ESP y obtiene una shell. Esa claridad es exactamente lo que lo hace útil como punto de partida.
SLMail 5.5 es un servidor de correo heredado de Windows. La vulnerabilidad está en el servicio POP3, específicamente en el manejador del comando PASS, que copia la entrada del usuario directamente en un búfer de pila de tamaño fijo sin ninguna validación de longitud. Lo que hace que este caso sea particularmente útil para la enseñanza es lo pocos elementos móviles que tiene:
Esta combinación (orientado a red, sin autenticación, sobrescritura directa de EIP, sin mitigaciones modernas) hace de CVE-2003-0264 uno de los ejemplos más limpios del mundo real de un desbordamiento de pila vainilla que aún se ejecuta en versiones modernas de Windows.
SLMail es un servidor de correo de Windows que proporciona servicios SMTP, POP3 y de administración. El servicio POP3 escucha en el puerto TCP 110 y maneja comandos estándar de recuperación de correo. La vulnerabilidad está en el manejador del comando PASS, que procesa el argumento de contraseña enviado por un cliente conectado.
Detalles técnicos clave:
El servicio POP3 de SLMail procesa el comando PASS copiando el argumento de contraseña proporcionado en un búfer de pila de tamaño fijo usando una función insegura sin verificación de longitud. Una versión simplificada de la lógica vulnerable se ve así:
char password_buffer[256];
strcpy(password_buffer, pass_argument);
Enviar una cadena suficientemente larga como argumento PASS provoca que la copia escriba más allá del final del búfer, corrompiendo la pila hasta que se sobrescribe la dirección de retorno guardada. Cuando la función retorna, la CPU carga el valor controlado por el atacante desde la pila en EIP y salta a él.
El fallo se puede reproducir enviando un argumento PASS sobredimensionado a través de POP3. No se requieren credenciales válidas. Ejemplo usando Python:
import socket
HOST = '127.0.0.1'
PORT = 110
payload = b"A" * 3000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)
s.send(b"USER username\r\n")
s.recv(1024)
s.send(b"PASS " + payload + b"\r\n")
s.close()
Cuando se ejecuta bajo un depurador, el fallo muestra EIP sobrescrito con datos controlados por el usuario:
EIP = 41414141
confirmando que la dirección de retorno guardada ha sido corrompida por el desbordamiento.
El objetivo de este repositorio no es solo demostrar el fallo, sino recorrer el proceso completo de explotación paso a paso, desde el fuzzing hasta una shell inversa funcional.
Para mantener limpio el README principal, las notas detalladas de explotación, los scripts y los pasos del depurador se colocan dentro de la carpeta Vulnerability 📂 de este repositorio.
Allí encontrará el flujo de trabajo completo utilizado para explotar este CVE, incluyendo: