El programa Beep,
disponible en la mayoría de distribuciones, no parecía mantenerse desde el año
2013 a pesar de emplear el ejecutable el bit SUID
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.
Más información:
- Holey Beep: https://holeybeep.ninja/
- 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
Fuente: Hispasec