Figura 1: Bug Hunting and Vibe-Exploiting en 86-DOS
Como oso podéis imaginar, como puro entretenimiento, y experimento, le pedí a
Gemini Thinking que analizara el código de la
versión 86-DOS publicada en GitHub, para ver qué vulnerabilities podía encontrar y de eso va este artículo de hoy.
El resultado tras pasarle el código es que
Gemini ha reportado
6 Bugs en el código
Ensambalador (ASM) de esta
versión 86-DOS, que os paso a dejar por aquí. Y mola mucho lo bien explicados que están cada uno de ellos.
Figura 4: Arbitrary Memory Overwrite
Figura 5: PoC de Exploit para el bug 1
Figura 6: Information Leakage en el nombre de un fichero a copiar
Explotar estas vulnerabilidades es bastante sencillo sin tener que conseguir evitar las protecciones de hoy en día, así que este Information Leakage se basa en poner nombres largos y ver qué datos de la memoria se consiguen, como vemos aquí.
Figura 7: Explotación del bug #2
En total, como os he dicho son seis, y cada uno de ellos es distinto, lo que hace aún más bonito este ejercicio teórico, ya que de todos ellos se aprende algo diferente.
Figura 8: Missing Directory Entry Validation
En este caso no nos ha hecho el exploit, porque lo que hay que hacer es una explotación modificando los bytes del disco a bajo nivel, con un editor hexadecimal sin pasar por las herramientas de gestión de ficheros el sistema operativo.
Figura 9: Explotación del bug #4
El siguiente es un ejemplo de cómo hay direcciones importantes del sistema operativo que pueden ser sobrescritas para tomar el control del flujo de ejecución del sistema operativo.
Figura 10: Lack of Interrupt Vector Protection
Esto es un fallo que permite a un malware tomar control de esas direcciones de memoria y ejecutar un
software malicioso, como un
rootkit que troyanice todo el sistema operativo. Esto es por lo que se crearon los sistemas de arranque seguros con los
TPM (Trusted Platform Modules).
Figura 11: Explotación con secuestro de interrupcion
El penúltimo de los bugs reportados es la posibilidad de poder corromper el sistema de archivos FAT de un disco con un puntero a un cluster malicioso, como se explica en la imagen siguiente.
Figura 12: Fat Corruption via Malicious Cluster Pointer
Y para explotarlo, aquí tienes un ejemplo en forma de snippet de código para meter dentro de un programa que lo ejecute y corrompa la FAT.
Figura 13: Snippet de código para explotarlo
Y la última vulnerabilidad es un bug que permite una Denegación de Servicio (DoS) que puede crashear el sistema operativo y obligar al reinicio de la máquina.
Figura 14: Stack Exhaustion
El problema es la gestión de la pila (stack) del sistema y para meter un puntero a la base de la pila que genera una re-escritura de los registros y colapsa cuando intenta volver de la llamada, porque está sobre-escrita la dirección de retorno.
Figura 15: Exploit genera un bucle con la INT 21h
¡Saludos Malignos!