En la utilidad , utilizada para organizar la ejecución de comandos en nombre de otros usuarios, una vulnerabilidad (), que permite aumentar sus privilegios en el sistema hasta convertirse en el usuario root. El problema se manifiesta a partir del lanzamiento de sudo 1.7.1 solo al usar en el archivo /etc/sudoers la opción «pwfeedback», que está desactivada por defecto, pero que está activada en algunas distribuciones, como Linux Mint y Elementary OS. El problema se ha solucionado en la versión , publicada hace unas horas. En las distribuciones, la vulnerabilidad aún permanece sin corregir.
La opción «pwfeedback» incluye la visualización del símbolo «*» después de cada carácter introducido al ingresar la contraseña. Debido a la implementación de la función getln(), definida en el archivo tgetpass.c, una cadena de contraseña demasiado grande pasada a través de la entrada estándar (stdin) puede no caber en el búfer asignado y sobrescribir otros datos en la pila bajo ciertas condiciones. El desbordamiento ocurre durante la ejecución del código sudo con privilegios de root.
La esencia del problema es que al utilizar el carácter especial ^U (borrar línea) durante la entrada y al fallar la operación de escritura, el código responsable de borrar los caracteres visualizados «*» restablece los datos sobre el tamaño disponible del búfer, pero no devuelve el puntero a la posición actual en el búfer a su estado original. Otro factor que contribuye a la explotación es la falta de desconexión automática del modo «pwfeedback» al recibir datos no desde el terminal, sino a través de la entrada (este defecto permite crear condiciones para un error de escritura, por ejemplo, en sistemas con tuberías unidireccionales el error ocurre cuando se intenta escribir más allá del final del canal de lectura).
Dado que un atacante puede controlar completamente la sobrescritura de datos en la pila, no representa dificultad crear un exploit que permita aumentar sus privilegios hasta el usuario root. El problema puede ser explotado por cualquier usuario, independientemente de sus derechos para usar sudo y de las configuraciones específicas del usuario en sudoers. Para bloquear el problema, debe asegurarse de que no haya configuraciones de «pwfeedback» en /etc/sudoers y desactivarla si es necesario («Defaults !pwfeedback»). Para verificar la existencia del problema, se puede ejecutar el siguiente código:
$ perl -e ‘print((«A» x 100 . «\x{00}») x 50)’ | sudo -S id
Contraseña: Error de segmentación
Fuente: opennet.ru
