
Visualización, Fuzzing, Exploit y Parche de la Vulnerabilidad Baron Samedit
Visualización, Fuzzing, Explotación y Parche de la Vulnerabilidad Baron Samedit
Ver informe »
Francesco Marchiori
·
Alessandro Lotto
Cualquier sistema operativo basado en Unix dispone del comando sudo que permite una escalada temporal de privilegios de root para aquellos usuarios que están autorizados a hacerlo. Sudo ofrece entonces una funcionalidad crítica que, si se abusa de ella, puede comprometer la seguridad y confiabilidad del propio sistema. Debido a su importancia dentro del sistema operativo, el código fuente de sudo está sujeto a pruebas frecuentes y revisiones de código. Esto ha llevado a descubrir una vulnerabilidad de desbordamiento de montón, denominada CVE-2021-3156, que sorprendentemente ha estado oculta durante casi 10 años. Ni siquiera las técnicas de fuzzing, una de las técnicas más utilizadas para el descubrimiento de errores y vulnerabilidades, permitieron detectarla antes. En este artículo, analizamos en detalle la vulnerabilidad CVE-2021-3156 de sudo, desde la vulnerabilidad de desbordamiento de búfer hasta cómo puede ser explotada para obtener un shell de root incluso siendo un usuario no privilegiado o no teniendo permitido usar el comando sudo.
En el directorio Visualization hay un par de scripts que usamos para visualizar cómo se analizan los argumentos con o sin caracteres de barra invertida y para analizar cómo las variables de entorno afectan el diseño del montón, con el fin de comprender mejor la estructura del exploit propuesto.
En el directorio Fuzzing se encuentran los archivos necesarios para realizar fuzzing en la versión vulnerable de sudo. También se explica cómo poder hacer fuzzing y cómo resolver los problemas que impiden que AFL funcione de manera inmediata, explicando así cómo la vulnerabilidad ha estado oculta durante casi 10 años.
En el directorio Exploit se encuentran los archivos necesarios para realizar el ataque en otra versión vulnerable de sudo. Explotamos la población de memoria a través de variables de entorno para realizar heap feng shui y sobrescribir el nombre del objeto service_user, con el fin de ejecutar nuestro propio código en lugar de cargar una biblioteca.
En el directorio Patch hay un script overflow_simulation_patch.c que simula el comportamiento del desbordamiento y lo parchea con código adicional que escribimos. Dado que los desarrolladores del proyecto Sudo decidieron corregir el flujo de la vulnerabilidad en lugar del código en sí, mostramos un enfoque diferente y cómo se puede solucionar con solo unas pocas líneas de código.