Cargador dinámico
A esencia do problema: durante a operación, ld.so primeiro extrae o valor da variable LD_LIBRARY_PATH do ambiente e, usando a función _dl_split_path(), convérteo nunha matriz de cadeas - camiños aos directorios. Se máis tarde resulta que o proceso actual é iniciado por unha aplicación SUID/SGID, a matriz creada e, de feito, a variable LD_LIBRARY_PATH borraranse. Ao mesmo tempo, se _dl_split_path() queda sen memoria (o cal é difícil debido ao límite explícito de 256 kB no tamaño das variables de ambiente, pero teoricamente é posible), entón a variable _dl_libpath recibirá o valor NULL e as comprobacións posteriores de o valor desta variable obrigará a omitir a chamada a _dl_unsetenv("LD_LIBRARY_PATH").
Vulnerabilidade atopada por expertos
Adición: o problema ten asignado un número
amd64 e i386 (o exploit pódese adaptar a outras arquitecturas).
O problema é explotable na instalación predeterminada e permite que un usuario local sen privilexios execute código como root mediante a substitución da biblioteca ao executar as utilidades chpass ou passwd suid. Para crear as condicións de pouca memoria necesarias para o funcionamento, establece o límite RLIMIT_DATA mediante setrlimit.
Fonte: opennet.ru