
Desbordamiento de búfer basado en SEH en Easy File Sharing Web Server 7.2 que demuestra cómo un parámetro HTTP POST autenticado puede corromper la cadena del manejador de excepciones.
Desbordamiento de búfer basado en SEH en Easy File Sharing Web Server 7.2 que demuestra cómo un parámetro HTTP POST autenticado puede corromper la cadena del manejador de excepciones.
Este repositorio forma 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 formar a la próxima generación de ingenieros inversos).
CVE-2018-18912 es el caso que uso para dar el salto de las sobrescrituras de EIP básicas a la explotación basada en SEH. Una vez que los estudiantes entienden cómo funciona una sobrescritura directa de la dirección de retorno, el siguiente paso es comprender qué sucede cuando la pila está tan corrupta que el programa desencadena una excepción antes de retornar, y cómo esa cadena de manejadores de excepciones se convierte en la superficie de ataque. Este CVE demuestra esa transición de manera limpia: el desbordamiento es lo suficientemente profundo como para alcanzar la cadena SEH, y la ruta de explotación sigue la técnica clásica de POP POP RETN que todo desarrollador de exploits debe entender. La omisión opcional de DEP mediante ROP se deja como una ampliación para los estudiantes que quieran ir más allá: el mismo desbordamiento, una estrategia de gadgets diferente, un problema mucho más difícil.
Esta vulnerabilidad afecta a Easy File Sharing Web Server 7.2, una aplicación ligera de servidor web para Windows que se utilizaba ampliamente para compartir archivos de forma sencilla. El software fue escrito sin tener en cuenta las mitigaciones modernas de seguridad. Lo que hace que este caso sea particularmente interesante desde una perspectiva pedagógica es la combinación de factores involucrados:
Esta combinación hace de CVE-2018-18912 un caso excelente para enseñar técnicas de desarrollo de exploits más allá de lo básico.
Easy File Sharing Web Server 7.2 es una aplicación de Windows que permite a los usuarios compartir archivos a través de HTTP. Incluye funcionalidades como navegación de archivos, autenticación de usuarios y un sistema de foro integrado.
La funcionalidad del foro acepta solicitudes POST para crear nuevos temas. Uno de los campos del formulario manejado por este endpoint es el parámetro author. Internamente, la aplicación copia este valor controlado por el usuario en un búfer de pila de tamaño fijo sin validar la longitud.
La vulnerabilidad fue descubierta y reportada en 2018. El PoC original se publicó poco después, demostrando tanto el fallo como una cadena de explotación funcional que incluía gadgets ROP del módulo ImageLoad.dll incluido.
Detalles técnicos clave:
Easy File Sharing Web Server procesa solicitudes HTTP POST dirigidas a /forum.ghp cuando un usuario crea un nuevo tema en el foro. Uno de los parámetros aceptados es author, que se copia en un búfer local de la pila sin ninguna comprobación de longitud.
Al realizar ingeniería inversa del binario, se puede observar que el manejador de este campo del formulario utiliza un búfer de tamaño fijo y una operación de copia no segura. Una versión simplificada de la lógica vulnerable se ve así:
char author_buffer[64];
strcpy(author_buffer, user_input);
Dado que el búfer de destino tiene un tamaño fijo y la longitud de la entrada no se valida, enviar una cadena suficientemente larga en el campo author 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 la dirección de retorno, el desbordamiento alcanza la cadena del Structured Exception Handler (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 de 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 author de una solicitud POST a /forum.ghp después de autenticarse con credenciales válidas. Ejemplo usando Python:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 500
request = (
b"POST /forum.ghp?forumid=1 HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Cookie: UserID=test; PassWD=test; SESSIONID=1234\r\n"
b"Connection: close\r\n"
b"\r\n"
b"author=" + payload + b"&passwd=test&title=test&content=test&Submit=Submit\r\n"
)
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, lo que confirma 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 paso a paso a través del proceso completo de explotación, siguiendo la metodología utilizada al desarrollar exploits reales basados en SEH.
Para mantener limpio el README principal, las notas detalladas de explotación, scripts y pasos del depurador se colocan dentro de la carpeta Vulnerability 📂 de este repositorio.
Allí encontrarás el flujo de trabajo completo utilizado para explotar este CVE, que incluye: