Vulnerabilidad en ld.so OpenBSD

Cargador dinámico ld.so, incluido con OpenBSD, puede, bajo ciertas condiciones, SUID / SGID- las aplicaciones abandonan la variable de entorno LD_LIBRARY_PATH y, por lo tanto, permiten que se cargue código de terceros en el contexto de un proceso que se ejecuta con privilegios elevados. Los parches que corrigen la vulnerabilidad están disponibles para lanzamientos. 6.5 и 6.6. Parches binarios (parche del sistema) para las plataformas AMD64, i386 y arm64 ya están en producción y deberían estar disponibles para su descarga cuando se publique esta noticia.

La esencia del problema: durante la operación, ld.so primero extrae el valor de la variable LD_LIBRARY_PATH del entorno y, utilizando la función _dl_split_path(), lo convierte en una matriz de cadenas: rutas a directorios. Si más tarde resulta que el proceso actual lo inicia una aplicación SUID/SGID, entonces la matriz creada y, de hecho, la variable LD_LIBRARY_PATH se borran. Al mismo tiempo, si _dl_split_path() se queda sin memoria (lo cual es difícil debido al límite explícito de 256 kB en el tamaño de las variables de entorno, pero teóricamente posible), entonces la variable _dl_libpath recibirá el valor NULL y las comprobaciones posteriores de el valor de esta variable obligará a omitir la llamada a _dl_unsetenv("LD_LIBRARY_PATH").

Vulnerabilidad encontrada por expertos Calificaciones, al igual que varios previamente revelados problemas. Los investigadores de seguridad que identificaron la vulnerabilidad notaron lo rápido que se resolvió el problema: se preparó un parche y se lanzaron actualizaciones dentro de las tres horas posteriores a la recepción de la notificación del proyecto OpenBSD.

Adición: Al problema se le ha asignado un número. CVE-2019-19726. Hecho en la lista de correo de oss-security anuncio oficial, incluido un prototipo de exploit que se ejecuta en arquitecturas OpenBSD 6.6, 6.5, 6.2 y 6.1.
AMD64 e i386 (el exploit se puede adaptar a otras arquitecturas).
El problema se puede explotar en la instalación predeterminada y permite a un usuario local sin privilegios ejecutar código como root mediante la sustitución de biblioteca cuando ejecuta las utilidades chpass o passwd suid. Para crear las condiciones de poca memoria necesarias para la operación, establezca el límite RLIMIT_DATA mediante setrlimit.

Fuente: opennet.ru

Añadir un comentario