Desbordamiento de búfer basado en pila en Sync Breeze Enterprise 10.0.28 accesible a través del manejador /login, que demuestra cómo una longitud de entrada no verificada puede corromper la memoria de la pila.
Desbordamiento de búfer basado en pila en Sync Breeze Enterprise 10.0.28 accesible a través del manejador /login, que demuestra cómo una longitud de entrada sin verificar puede corromper la memoria de la pila.
Este repositorio es parte del material que utilizo cuando enseño explotación de corrupción de memoria (además de mi trabajo habitual, también doy clases en diferentes cursos de ciberseguridad donde ayudo a formar a la próxima generación de ingenieros inversos).
CVE-2017-14980 es un caso que utilizo cuando quiero que los estudiantes experimenten una sobrescritura de EIP clásica por HTTP en lugar de un protocolo TCP crudo. Al principio parece simple: un formulario de inicio de sesión, una contraseña larga, un crash, pero el contexto HTTP introduce una serie de bad characters (caracteres no válidos) que no son evidentes de inmediato y que obligan a los estudiantes a pensar en cómo se procesan los datos antes de llegar al búfer vulnerable. Entender por qué %, &, + y = son bad chars aquí requiere comprender la codificación URL, lo cual es una lección útil por sí misma.
Sync Breeze Enterprise es una aplicación de sincronización de archivos para Windows que expone una interfaz de administración web. La vulnerabilidad está en el manejador de inicio de sesión, que copia el campo de contraseña en un búfer de pila de tamaño fijo sin validar la longitud. Lo que hace útil este caso para la enseñanza:
Sync Breeze Enterprise es una herramienta de sincronización de archivos para Windows que incluye un servidor web integrado para la administración remota. La interfaz web escucha en el puerto TCP 80 cuando está habilitada y expone un formulario de inicio de sesión en /login. La vulnerabilidad está en el manejador POST que procesa el campo de contraseña.
Detalles técnicos clave:
Sync Breeze procesa el formulario de inicio de sesión leyendo el cuerpo del POST y extrayendo el campo de contraseña. El valor se copia en un búfer de pila de tamaño fijo sin verificar su longitud. Una versión simplificada de la lógica vulnerable se ve así:
char password_buffer[256];
strcpy(password_buffer, password_field);
El cuerpo del POST se decodifica en URL antes de que se realice la copia, lo que significa que caracteres como %25 se decodifican a % antes de llegar al búfer. Esta es también la razón por la que ciertos caracteres especiales de URL actúan como caracteres no válidos: son interpretados por la capa HTTP antes de que los datos lleguen a la operación de copia vulnerable. Enviar un valor de contraseña suficientemente largo hace que la copia escriba más allá del final del búfer, sobrescribiendo 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 crash se puede reproducir enviando una contraseña sobredimensionada en una solicitud POST a /login. No se requiere autenticación. Ejemplo usando Python:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 600
body = b"username=admin&password=" + payload
request = (
b"POST /login HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Content-Length: " + str(len(body)).encode() + b"\r\n"
b"Connection: close\r\n"
b"\r\n" +
body
)
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 crash 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 crash, sino recorrer el proceso completo de explotación paso a paso, desde el fuzzing hasta una reverse shell funcional.
Para mantener limpio el README principal, las notas detalladas de explotación, los scripts y los pasos del depurador se encuentran dentro de la carpeta Vulnerability 📂 de este repositorio.
Allí encontrarás el flujo de trabajo completo utilizado para explotar este CVE, incluyendo: