Cargador dinámico
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
Adición: Al problema se le ha asignado un número.
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