lunes, 20 de marzo de 2000

Comportamiento peligroso en el "linker" de AIX 4.x

El "enlazador" o "linker" que viene con el sistema operativo AIX 4.x (la
versión Unix de IBM) sigue directivas que se pretenden únicamente
vinculantes cuando se está compilando un programa, no cuando se va a
ejecutar.
Las mayoría de los sistemas modernos soportan lo que se llama "carga
dinámica", por medio de la cual un programa puede, por ejemplo, cargar
una librería externa cuando es ejecutado. Ello permite, entre otras
muchas funcionalidades:

* Reducir el consumo de memoria, ya que si esas librerías son empleadas
por más procesos se comparten entre todos.

* Permite actualizar y modernizar una librería sin necesidad de
recompilar todos los programas que la utilizan.

* El programa ocupa menos en disco, ya que las librerías compartidas no
forman parte del ejecutable.

Cuando se enlaza un programa, existen una serie de librerías que se
enlazan de forma "estática" (permanentemente), y otras librerías que se
enlazan de forma "dinámica" (cuando el proceso se ejecuta). Debido a los
riesgos de seguridad, los directorios donde se buscan las librerías
dinámicas son fijos, permitiéndose cambios merced a parámetros
adicionales en la línea de comandos del "enlazador".

Lamentablemente el "linker" de AIX 4.x se desvía del estándar Unix
(aunque lo documenta en el manual) de forma tal que los "paths" o
directorios en los que se le indica que busque las librerías estáticas,
en tiempo de enlazado, también serán utilizados para buscar librerías
dinámicas en tiempo de ejecución.

Ello permite, por ejemplo, que si cuando se compiló un programa se le
indicó el directorio actual como uno de los lugares en donde buscar las
librerías estáticas, el ejecutable resultante también empleará el
directorio local para cargar sus librerías dinámicas. Ni qué decir tiene
que si ese ejecutable es invocable por un usuario arbitrario, éste puede
crear una librería dinámica que sustituya a una librería del sistema. Si
el proceso en cuestión se ejecuta con privilegios elevados (los típicos
procesos SETUID), el usuario puede ejecutar código arbitrario con esos
privilegios.

Dado que se trata de un comportamiento documentado en el manual, es
dudoso que IBM lo considere un error a solucionar. Una posibilidad es
reenlazar los ejecutable indicando la opción "-blibpath" en la línea de
comando.

Más Información:

AIX ld -L Flag Potential Vulnerability:
http://www.securityfocus.com/vdb/bottom.html?vid=1059
http://www.securityfocus.com/vdb/bottom.html?section=solution&vid=1059



Jesús Cea Avión
jcea@hispasec.com



No hay comentarios:

Publicar un comentario en la entrada