Cargador dinámico , que forma parte de OpenBSD, puede, bajo ciertas condiciones, Las aplicaciones omiten la variable de entorno LD_LIBRARY_PATH, lo que permite cargar código de terceros en el contexto de un proceso que se ejecuta con privilegios elevados. Ya están disponibles parches para corregir esta vulnerabilidad. и Parches binarios () para las plataformas amd64, i386 y arm64 ya han entrado en producción y deberían estar disponibles para su descarga cuando se publique esta noticia.
El problema radica en que ld.so primero obtiene la variable LD_LIBRARY_PATH del entorno y utiliza la función _dl_split_path() para convertirla en una matriz de cadenas (rutas de directorio). Si posteriormente se descubre que el proceso actual fue iniciado por una aplicación con privilegios SUID/SGID, tanto la matriz creada como la propia variable LD_LIBRARY_PATH se borran. Además, si _dl_split_path() se queda sin memoria (lo cual es difícil debido al límite explícito de 256 KB para el tamaño de las variables de entorno, pero teóricamente posible), la variable _dl_libpath se establecerá en NULL, y las comprobaciones posteriores del valor de esta variable provocarán que se omita la llamada a _dl_unsetenv("LD_LIBRARY_PATH").
La vulnerabilidad fue descubierta por especialistas. , igual que Los investigadores de seguridad que identificaron la vulnerabilidad destacaron la rapidez con la que se resolvió el problema: se preparó un parche y se publicaron actualizaciones en las tres horas posteriores a que el proyecto OpenBSD recibiera la notificación.
Adición: Al problema se le ha asignado un número La lista de correo oss-security se ha actualizado. , que incluye un prototipo de exploit que funciona en arquitecturas OpenBSD 6.6, 6.5, 6.2 y 6.1.
amd64 e i386 (el exploit se puede adaptar a otras arquitecturas).
Esta vulnerabilidad es explotable en la instalación predeterminada y permite que un usuario local sin privilegios ejecute código con privilegios de administrador mediante la sustitución de bibliotecas al ejecutar las utilidades suid chpass o passwd. Para crear las condiciones de baja memoria necesarias para la explotación, se establece el límite RLIMIT_DATA mediante setrlimit.
Fuente: opennet.ru
