Vulnerabilidade en ld.so OpenBSD

Cargador dinámico ld.so, incluído con OpenBSD, pode, baixo certas condicións, SUID/SGID- as aplicacións deixan a variable de ambiente LD_LIBRARY_PATH e permiten así cargar código de terceiros no contexto dun proceso en execución con privilexios elevados. Os parches que corrixen a vulnerabilidade están dispoñibles para as versións 6.5 и 6.6. Parches binarios (syspatch) para as plataformas amd64, i386 e arm64 xa están en produción e deberían estar dispoñibles para descargar no momento en que se publique esta noticia.

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 de Qualy, así como varias reveladas previamente problemas. Os investigadores de seguridade que identificaron a vulnerabilidade observaron a rapidez con que se resolveu o problema: preparouse un parche e lanzáronse actualizacións dentro de tres horas despois de que o proxecto OpenBSD recibise a notificación.

Adición: o problema ten asignado un número CVE-2019-19726. Feito na lista de correo oss-security anuncio oficial, incluíndo un exploit prototipo que se executa en arquitecturas OpenBSD 6.6, 6.5, 6.2 e 6.1
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

Engadir un comentario