La escalada de privilegios de OpenBSD y la autenticación evitan vulnerabilidades en smtpd, ldapd y radidd

Empresa Qualys revelado cuatro vulnerabilidades en OpenBSD, uno de los cuales le permite conectarse de forma remota sin autenticación a algunos servicios de red, y los otros tres aumentan sus privilegios en el sistema. El informe de Qualys destaca la rápida respuesta de los desarrolladores de OpenBSD: todos los problemas se solucionaron eliminado в OpenBSD 6.5 и OpenBSD 6.6 dentro de las 40 horas siguientes a la notificación privada.

La vulnerabilidad explotable de forma remota se debe a un error al llamar al controlador de autenticación en la biblioteca libc, que llama
programa /usr/libexec/auth/login_style pasando argumentos en la línea de comando. Incluso cuando se llama a login_style usando el parámetro opcional "-s service", es posible transferir el nombre del protocolo. Si utiliza un carácter "-" al principio de un nombre de usuario, este nombre se tratará como una opción al ejecutar login_style. En consecuencia, si especifica "-schallenge" o "-schallenge:passwd" como nombre de usuario durante la autenticación, login_style percibirá la solicitud como una solicitud para utilizar el controlador. S / clave.

El problema es que el protocolo S/Key en login_style solo se admite formalmente, pero en realidad se ignora con la salida de una señal de autenticación exitosa. Por lo tanto, un atacante puede, haciéndose pasar por el usuario "-challenge", eludir la autenticación y obtener acceso sin proporcionar una contraseña o claves. Todos los servicios de red que utilizan llamadas libc estándar para la autenticación se ven potencialmente afectados por el problema. Por ejemplo, la capacidad de omitir la autenticación es compatible con smtpd (AUTH PLAIN), ldapd y radiod.

La vulnerabilidad no aparece en sshd, ya que cuenta con una protección adicional que comprueba la presencia del usuario en el sistema. Sin embargo, sshd se puede utilizar para probar la vulnerabilidad de un sistema: al acceder al nombre de usuario "-sresponse:passwd", la conexión se bloquea, ya que sshd está esperando que login_passwd devuelva los parámetros de desafío, y login_passwd está esperando que se envíen los parámetros faltantes. ser enviado (el nombre "- sresponse" se trata como una opción). Un atacante local podría intentar eludir la autenticación en la utilidad su, pero pasar el nombre "-sresponse" provoca que el proceso se bloquee al devolver un puntero nulo al ejecutar la función getpwnam_r("-schallenge", ...).

Otras vulnerabilidades:

  • CVE-2019-19520 Escalada de privilegios locales mediante la manipulación de la utilidad xlock suministrada con el indicador sgid cambiando el grupo a "auth". En el código xlock, está prohibido redefinir las rutas a las bibliotecas solo cuando se cambia el identificador de usuario (setuid), lo que permite al atacante cambiar la variable de entorno "LIBGL_DRIVERS_PATH" y organizar la carga de su biblioteca compartida, cuyo código se ejecutará. después de aumentar los privilegios al grupo "auth".
  • CVE-2019-19522: permite a un usuario local que es miembro del grupo "auth" ejecutar código como root cuando la autenticación S/Key o YubiKey está habilitada en el sistema (no activa de forma predeterminada). Unirse al grupo "auth", al que se puede acceder explotando la vulnerabilidad mencionada anteriormente en xlock, le permite escribir archivos en los directorios /etc/skey y /var/db/yubikey. Por ejemplo, un atacante podría agregar un nuevo archivo /etc/skey/root para generar claves únicas para la autenticación como usuario root a través de S/Key.
  • CVE-2019-19519: la posibilidad de aumentar los límites de recursos mediante la manipulación de la utilidad su. Cuando se especifica la opción "-L", que hace que los intentos de autenticación se repitan cíclicamente si no tienen éxito, la clase de usuario se establece solo una vez y no se restablece en intentos posteriores. Un atacante puede ejecutar "su -l -L" en el primer intento de ingresar el inicio de sesión de otra persona con una clase de cuenta diferente, pero en el segundo intento puede autenticarse exitosamente como él mismo. En esta situación, el usuario estará sujeto a límites basados ​​en la clase de usuario especificada en el primer intento (por ejemplo, el número máximo de procesos o el tamaño de memoria para un proceso). El método sólo funciona para pedir prestado límites a usuarios sin privilegios, ya que el usuario root debe estar en el grupo de rueda).

Adicionalmente, se puede señalar implementación en OpenBSD, un nuevo método para comprobar la validez de las llamadas al sistema, lo que complica aún más la explotación de vulnerabilidades. El método permite ejecutar llamadas al sistema solo si se accede a ellas desde áreas de memoria previamente registradas. Para marcar áreas de memoria sugirió nueva llamada al sistema msyscall().

Fuente: opennet.ru