Recientemente se dio a conocer una vulnerabilidad en la utilidad sudo (utilizada para organizar otorgar derechos de administración a un solo programa o la ejecución de comandos en nombre de otros usuarios) catalogada como “CVE-2019-18634”, que permite aumentar sus privilegios en el sistema para el usuario root.
El problema fue detectado desde el lanzamiento de la versión de sudo 1.7.1 hasta la versión 1.8.29 que puede ser explotada solo cuando se usa la opción «pwfeedback» en el archivo /etc/sudoers, que está deshabilitado por defecto, en versiones posteriores de sudo, pero se encuentra activado en algunas distribuciones como Linux Mint y Elementary OS.
La opción «pwfeedback» permite la visualización del carácter «*» después de cada carácter ingresado al ingresar la contraseña.
Debido a un error en la implementación de la función getln () definida en el archivo tgetpass.c, bajo una secuencia de entrada estándar (stdin), una línea demasiado grande con una contraseña puede no caber en el búfer asignado y reescribir otros datos en la pila. El desbordamiento se produce al ejecutar código sudo con privilegios de root.
La esencia del problema es que cuando se usa el carácter especial ^ U durante el proceso de entrada (borrado de línea) y cuando falla la operación de escritura, el código responsable de borrar los caracteres de salida «*» restablece los datos sobre el tamaño del búfer disponible, pero no devuelve el puntero al valor original posición actual en el búfer.
Otro factor que contribuye a la operación es la falta de apagado automático del modo pwfeedback cuando los datos se reciben no desde el terminal sino a través del flujo de entrada (este defecto permite crear condiciones para un error de grabación, por ejemplo, en sistemas con canales unidireccionales sin nombre, se produce un error al intentar grabar Fin del canal para leer).
Dado que el atacante puede controlar completamente la sobrescritura de datos en la pila, no es difícil crear un exploit que le permita aumentar sus privilegios para el usuario root.
El problema puede ser explotado por cualquier usuario, independientemente de los derechos para usar sudo y la presencia de configuraciones específicas del usuario en sudoers.
Un usuario con privilegios de sudo puede verificar si «pwfeedback» está habilitado mediante la ejecución:
sudo -l
Si «pwfeedback» aparece en la salida «Entradas de valores predeterminados coincidentes», la configuración de sudoers se ve afectada. En el siguiente ejemplo, la configuración de sudoers es vulnerable:
sudo -l Matching Defaults entries for “USER” on linux-build: insults, pwfeedback, mail_badpass, mailerpath=/usr/sbin/sendmail
El usuario USER puede ejecutar los siguientes comandos en linux-build:
(ALL: ALL) ALL
Sobre el fallo, se explica que el error se puede explotar sin la necesidad de los permisos de sudo, solo requiere que pwfeedback esté habilitado. El error se puede reproducir pasando una gran entrada a sudo a través de una tubería cuando solicita una contraseña.
Por ejemplo:
perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id Password: Segmentation faultHay dos fallas que contribuyen a esta vulnerabilidad:
-
La opción «pwfeedback» no se ignora, como debería ser, cuando se lee desde algo que no sea un dispositivo terminal. Debido a la falta de una terminal, la versión guardada del carácter de borrado de línea permanece en su valor inicializado de 0.
-
El código que borra la línea de asteriscos no restablece correctamente la posición del búfer si hay un error de escritura, pero restablece la longitud restante del búfer. Como resultado, la función getln () puede escribir más allá del final del búfer.
Finalmente, se informa que el problema se solucionó en la versión sudo 1.8.31, publicada hace unas horas. Aunque en las distribuciones, la vulnerabilidad permanece sin corregir por lo que se pide a los usuarios de las distribuciones afectadas o que detecten que la configuración de pwfeedback se encuentra en el archivo /etc/sudoers, realicen la actualización a la nueva versión de sudo.
Se menciona que para bloquear el problema, lo más esencial es que se tiene que verificar que la configuración /pwfeedback no esté en /etc/sudoers y si es necesario, se tiene que desactivar.
Fuente: https://www.openwall.com