Vulnerabilidades en OpenBSD que permiten a escalada de privilexios e o paso de autenticación en smtpd, ldapd e radiusd

Compañía Qualys revelado catro vulnerabilidades en OpenBSD, un dos cales permite conectarse remotamente sen autenticación a algúns servizos de rede, e os outros tres aumentan os seus privilexios no sistema. O informe Qualys sinalou a rápida resposta dos desenvolvedores de OpenBSD: todos os problemas foron eliminado в OpenBSD 6.5 и OpenBSD 6.6 dentro de 40 horas despois da notificación privada.

A vulnerabilidade explotable remotamente é causada por un erro ao chamar ao controlador de autenticación na biblioteca libc, que chama
programa /usr/libexec/auth/login_style pasando argumentos na liña de comandos. Incluíndo cando se chama login_style usando o parámetro opcional "-s service", é posible transferir o nome do protocolo. Se usa un carácter "-" ao comezo dun nome de usuario, este nome tratarase como unha opción cando se executa login_style. En consecuencia, se especificas "-schallenge" ou "-schallenge:passwd" como nome de usuario durante a autenticación, login_style percibirá a solicitude como unha solicitude para usar o controlador. S/Clave.

O problema é que o protocolo S/Key en login_style só se admite formalmente, pero en realidade é ignorado coa saída dun sinal de autenticación exitosa. Así, un atacante pode, facéndose pasar por o usuario "-challenge", evitar a autenticación e acceder sen proporcionar un contrasinal ou chaves. Todos os servizos de rede que usan chamadas libc estándar para a autenticación están potencialmente afectados polo problema. Por exemplo, a capacidade de ignorar a autenticación é compatible con smtpd (AUTH PLAIN), ldapd e radiusd.

A vulnerabilidade non aparece en sshd, xa que conta cunha protección adicional que verifica a presenza do usuario no sistema. Non obstante, sshd pódese usar para probar a vulnerabilidade dun sistema; ao acceder ao nome de usuario "-sresponse:passwd", a conexión colócase, xa que sshd está esperando a que login_passwd devolva os parámetros de desafío e login_passwd está a esperar a que os parámetros que faltan enviarse (o nome "- sresponse" trátase como unha opción). Un atacante local podería tentar ignorar a autenticación na utilidade su, pero pasar o nome "-sresponse" fai que o proceso falle ao devolver un punteiro nulo ao executar a función getpwnam_r("-schallenge",...).

Outras vulnerabilidades:

  • CVE-2019-19520 Escalada de privilexios locais mediante a manipulación da utilidade xlock proporcionada coa marca sgid que cambia o grupo a "auth". No código xlock, a redefinición de camiños ás bibliotecas está prohibida só cando se cambia o identificador de usuario (setuid), o que permite ao atacante cambiar a variable de ambiente "LIBGL_DRIVERS_PATH" e organizar a carga da súa biblioteca compartida, cuxo código será executado. despois de elevar privilexios ao grupo "auth".
  • CVE-2019-19522: permítelle a un usuario local que é membro do grupo "auth" executar código como root cando a autenticación S/Key ou YubiKey está activada no sistema (non activa por defecto). Unirse ao grupo "auth", ao que se pode acceder explotando a vulnerabilidade mencionada anteriormente en xlock, permítelle escribir ficheiros nos directorios /etc/skey e /var/db/yubikey. Por exemplo, un atacante podería engadir un novo ficheiro /etc/skey/root para xerar claves únicas para a autenticación como usuario root mediante S/Key.
  • CVE-2019-19519: a posibilidade de aumentar os límites de recursos mediante a manipulación da utilidade su. Cando se especifica a opción "-L", que fai que os intentos de autenticación se repitan cíclicamente se non teñen éxito, a clase de usuario establécese só unha vez e non se restablece nos intentos posteriores. Un atacante pode executar "su -l -L" no primeiro intento de introducir o inicio de sesión doutra persoa cunha clase de conta diferente, pero no segundo intento pode autenticarse con éxito como el mesmo. Nesta situación, o usuario estará suxeito a límites en función da clase de usuario especificada no primeiro intento (por exemplo, o número máximo de procesos ou o tamaño de memoria para un proceso). O método só funciona para os límites de préstamo de usuarios sen privilexios, xa que o usuario root debe estar no grupo da roda).

Ademais, pódese sinalar implementación en OpenBSD, un novo método para comprobar a validez das chamadas ao sistema, que complica aínda máis a explotación das vulnerabilidades. O método permite que as chamadas ao sistema se executen só se se accede a elas desde áreas de memoria previamente rexistradas. Para marcar áreas de memoria proposto nova chamada do sistema msyscall().

Fonte: opennet.ru