en la utilidad , utilizado para organizar la ejecución de comandos en nombre de otros usuarios, vulnerabilidad (), que le permite elevar sus privilegios al usuario root. El problema ha estado presente desde sudo 1.7.1 solo cuando se utiliza la opción "pwfeedback" en el archivo /etc/sudoers, que está deshabilitada por defecto pero habilitada en algunas distribuciones, como Linux Mint y Elementary OS. El problema se ha solucionado en la versión , publicado hace unas horas. La vulnerabilidad sigue sin parchearse en las distribuciones.
La opción "pwfeedback" permite mostrar el símbolo "*" después de cada carácter introducido al introducir una contraseña. Debido a En la implementación de la función getln() definida en el archivo tgetpass.c, una cadena de contraseña de gran tamaño enviada a través del flujo de entrada estándar (stdin) podría, en ciertas circunstancias, no caber en el búfer asignado y sobrescribir otros datos en la pila. El desbordamiento ocurre al ejecutar código sudo con privilegios de root.
La esencia del problema radica en que, al usar el carácter especial ^U (borrado de línea) durante el proceso de entrada y si la operación de escritura falla, el código responsable de borrar los caracteres de salida "*" restablece los datos en el tamaño de búfer disponible, pero no devuelve el puntero a la posición actual en el búfer a su valor original. Otro factor que contribuye a la explotación es la falta de desactivación automática del modo "pwfeedback" cuando los datos no se reciben desde el terminal, sino a través del flujo de entrada (esta falla permite crear condiciones para la ocurrencia de un error de escritura, por ejemplo, en sistemas unidireccionales). El error se produce al intentar escribir más allá del final del canal de lectura).
Dado que un atacante tiene control total sobre la sobrescritura de datos en la pila, es fácil crear un exploit para escalar sus privilegios a root. Cualquier usuario puede aprovechar este problema, independientemente de los permisos de sudo o la configuración específica del usuario en sudoers. Para evitarlo, asegúrese de que la opción "pwfeedback" no esté presente en /etc/sudoers y, si es necesario, desactívela ("Defaults !pwfeedback"). Para comprobar el problema, ejecute el siguiente código:
$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Contraseña: Fallo de segmentación
Fuente: opennet.ru
