Desbordamiento de búfer basado en SEH en Easy File Sharing Web Server 7.2, accesible a través del punto de acceso de recuperación de contraseña.
Desbordamiento de búfer basado en SEH en Easy File Sharing Web Server 7.2, accesible a través del endpoint de recuperación de contraseña.
Este repositorio fue creado como parte del material que utilizo cuando enseño investigación de vulnerabilidades y desarrollo de exploits, particularmente al introducir el concepto de desbordamientos de SEH (Structured Exception Handler) y cadenas ROP (Return-Oriented Programming).
Está relacionado con mi charla "The Path That Leads to Your First CVE". En esa charla, explico que existen diferentes puntos de entrada a la investigación de vulnerabilidades, y que estudiar CVEs documentados públicamente en software heredado es uno de los caminos más accesibles para principiantes.
Este CVE fue elegido porque demuestra un escenario de explotación completo y realista:
El objetivo es utilizar este caso como un escalón entre los ejercicios introductorios de desbordamiento de búfer y conceptos más avanzados de desarrollo de exploits.
Esta vulnerabilidad afecta a Easy File Sharing Web Server 7.2, una aplicación ligera de servidor web para Windows que fue ampliamente utilizada para compartir archivos de forma sencilla. El software fue escrito sin tener en cuenta las mitigaciones de seguridad modernas. Lo que hace que este caso sea particularmente interesante desde una perspectiva didáctica es la combinación de factores involucrados:
Esta combinación hace que CVE-2025-34096 sea un excelente caso para enseñar técnicas de desarrollo de exploits en un escenario de ataque realista sin autenticación.
Easy File Sharing Web Server 7.2 es una aplicación ligera de Windows construida para compartir archivos a través de HTTP. Más allá de la navegación básica de archivos y cuentas de usuario, incluye una función de recuperación de contraseña, un formulario que permite a los usuarios ingresar su dirección de correo electrónico para recibir sus credenciales olvidadas.
Ese formulario envía una solicitud POST a /sendemail.ghp. El manejador que procesa el campo Email copia el valor directamente en un búfer de pila de tamaño fijo sin verificación de longitud. El endpoint no requiere autenticación, por lo que no hay nada que se interponga entre un atacante remoto y la ruta de código vulnerable.
Detalles técnicos clave:
Easy File Sharing Web Server procesa solicitudes HTTP POST dirigidas a /sendemail.ghp como parte de su funcionalidad de notificación por correo electrónico. El parámetro Email aceptado por este endpoint se copia en un búfer de pila local sin ninguna verificación de longitud.
Una versión simplificada de la lógica vulnerable se ve así:
char email_buffer[256];
strcpy(email_buffer, user_input);
Dado que el búfer de destino tiene un tamaño fijo y la longitud de entrada no se valida, enviar una cadena suficientemente larga en el campo Email provoca que la copia escriba más allá del final del búfer.
A medida que se escriben más datos, el diseño de la pila se corrompe. A diferencia de una simple sobrescritura de dirección de retorno, el desbordamiento alcanza la cadena del Manejador de Excepciones Estructurado (SEH) almacenada en la pila. Cuando se desencadena una excepción como resultado de la pila corrupta, el sistema operativo recorre la cadena SEH y transfiere el control a la dirección del manejador controlada por el atacante.
Por lo tanto, el flujo de explotación sigue la técnica de sobrescritura SEH:
Esto hace que la vulnerabilidad sea más compleja de explotar que una sobrescritura básica de EIP, pero también más representativa de escenarios del mundo real.
El fallo se puede reproducir enviando una cadena larga en el parámetro Email de una solicitud POST a /sendemail.ghp. No se requiere autenticación. Ejemplo usando Python:
import socket
HOST = '127.0.0.1'
PORT = 80
request = (
'POST /sendemail.ghp HTTP/1.1\r\n'
'Email=' + 'A' * 5000 + '&getPassword=Get+Password'
).encode('utf-8')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
Cuando se ejecuta bajo un depurador, el fallo muestra una cadena SEH corrupta y una violación de acceso, confirmando que los datos controlados por el usuario han sobrescrito el puntero del manejador de excepciones.
El objetivo de este repositorio no es solo demostrar el fallo, sino también guiar a través del proceso completo de explotación paso a paso, siguiendo la metodología utilizada al desarrollar exploits reales basados en SEH.
Para mantener el README principal limpio, las notas detalladas de explotación, scripts y 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: