HoleyBeep: escalado de permisos en Linux usando Beep
Parece casi una broma, como así evidencia la web creada para la ocasión (holeybeep.ninja) con un gran sentido del humor, pero fallos como estos no hacen más que demostrar la falta de auditoría de código, más en casos como estos en los que el programa hace uso del bit ‘SUID’.
El bit ‘SUID’, permite la ejecución de un programa como otro usuario (el creador del ejecutable) para así poder realizar operaciones que normalmente no podría realizar el usuario que emplea el programa. Un ejemplo clásico es el comando ‘passwd’: este programa requiere modificar el archivo protegido del sistema (‘/etc/shadow’) donde se almacenan las contraseñas de los usuarios, pero un usuario común requiere poder cambiar su propia contraseña (pero no la del resto de usuarios). En este caso, el programa ‘passwd’ se ejecuta como root a pesar de emplearse por un usuario sin permisos, y es el programa el encargado de asegurar que el usuario no pueda realizar acciones que pongan el sistema en riesgo.
En el caso que nos ocupa, el programa Beep, que hace uso del bit ‘SUID’ para ejecutarse como root por un usuario común, llevaba varios años sin actualizarse. Cualquiera pensaría que un programa de este tipo, de tan solo 375 líneas de código y tantos años a sus espaldas (la versión 1.2.2 es de 2002) no contaría con vulnerabilidades, lo que ha quedado patente que no es así. La vulnerabilidad (CVE-2018-0492) es provocada por un efecto carrera que permitiría escribir a un archivo protegido tal y como se explica en Pirhack’s Blog, y así escalar privilegios.
La vulnerabilidad, de la que ya hay un ejemplo de explotación, aprovecha que la función ‘handle_signal‘ del programa es un signal (permitiendo su ejecución en cualquier momento), para así ejecutarse manteniendo el valor anterior de la variable ‘console_type‘, y el nuevo de la variable ‘console_fd‘, y así poder escribir a cualquier archivo.
Por suerte el programa no se encuentra instalado de serie en distribuciones como Debian, aunque sí es un paquete conocido y utilizado por scripts. Aunque las vulnerabilidades para escalado de permisos son comunes, los ejecutables que hacen uso del bit ‘SUID’ deberían ser los primeros en ser analizados en busca de este tipo de errores.
CVE-2018-0492:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0492
HoleyBeep: Explanations and exploit:
https://sigint.sh/#/holeybeep
Ejemplo explotación:
https://gist.github.com/Arignir/0b9d45c56551af39969368396e27abe8
Código fuente:
https://github.com/johnath/beep/blob/master/beep.c
Powered by WPeMatico