Se ha detectado una vulnerabilidad en el servidor telnetd del conjunto GNU InetUtils, que permite conectarse como cualquier usuario, incluyendo el usuario root, sin verificar la contraseña. Aún no se ha asignado un identificador CVE. La vulnerabilidad se manifiesta a partir de la versión InetUtils 1.9.3 (2015) y permanece sin corregirse en la versión actual 2.7.0. La corrección está disponible en forma de parches (1, 2).
El problema se debe a que, para verificar la contraseña, el proceso telnetd llama a la utilidad ‘/usr/bin/login’, pasando como argumento el nombre de usuario especificado por el cliente al conectarse a servidor. La utilidad ‘login’ admite la opción ‘-f’, que permite iniciar sesión sin realizar autenticación (se supone que esta opción se utiliza cuando el usuario ya ha pasado la verificación). Por lo tanto, si se logra sustituir la opción ‘-f’ en el nombre de usuario, se puede conectar sin verificar la contraseña.
No se puede usar un nombre de usuario del tipo ‘-f root’ en una conexión normal, pero telnet tiene un modo de conexión automática activado por la opción ‘-a’. En este modo, el nombre de usuario no se toma de la línea de comandos, sino que se pasa a través de la variable de entorno USER. Al invocar la utilidad login, el valor de esta variable de entorno se sustituía sin verificación adicional y sin escapar los caracteres especiales. Por lo tanto, para conectarse como el usuario root, basta con establecer en la variable de entorno USER el valor ‘-f root’ y conectarse al servidor telnet especificando la opción ‘-a’: $ USER=’-f root’ telnet -a nombre_servidor
El cambio que condujo a la vulnerabilidad se añadió al código de telnetd en marzo de 2015 y estuvo relacionado con la resolución de un problema que impedía identificar el nombre de usuario en el modo autologin sin realizar autenticación en Kerberos. Como solución, se agregó soporte para pasar el nombre de usuario para el modo autologin a través de una variable de entorno, pero olvidaron agregar la verificación de la validez del nombre de usuario de la variable de entorno.
Fuente: opennet.ru
