Introducción
En los sistemas Linux y basados en Unix, los permisos de archivo son un aspecto fundamental de la seguridad. Un tipo especial de permiso es el bit SUID (Set Owner User ID). Cuando un archivo binario tiene el bit SUID activado, se ejecuta con los privilegios del propietario del archivo, en lugar de los privilegios del usuario que lo ejecutó.
Aunque esto es necesario para ciertas funciones legítimas del sistema (como el comando passwd, que necesita acceso root para actualizar tu contraseña), se convierte en un grave riesgo de seguridad si está mal configurado. Si un administrador del sistema establece accidentalmente el bit SUID en una utilidad estándar como find, vim o bash, un atacante puede aprovechar estas herramientas para ejecutar comandos como usuario root, lo que lleva a un compromiso total del sistema conocido como escalada de privilegios.
Lo que hace que SUID sea peligroso es que cambia el contexto de privilegios de la ejecución del programa en sí. Si el programa puede lanzar otros comandos o shells, ese privilegio puede filtrarse hacia afuera.
En este laboratorio, te pondrás en la piel de un investigador de seguridad. Escanearás un sistema de archivos Linux para localizar binarios con el bit SUID activado, identificarás una configuración errónea vulnerable y utilizarás técnicas del famoso proyecto GTFOBins para escalar tus privilegios a root.
Búsqueda de binarios SUID (find)
En este paso, aprenderás cómo buscar en el sistema de archivos Linux binarios que tengan activado el bit de permiso SUID.
Para encontrar estos archivos, utilizamos el comando integrado find. El comando find es increíblemente potente y nos permite buscar archivos basándonos en sus permisos específicos. Buscaremos archivos comenzando desde el directorio raíz / que tengan activado el bit SUID (representado por el valor octal 4000).
La enumeración de archivos SUID es un hábito estándar de escalada de privilegios porque revela rápidamente programas que se ejecutan con privilegios elevados en nombre de usuarios comunes.
Ejecuta el siguiente comando en tu terminal para buscar binarios SUID y guarda los resultados en un archivo de texto llamado suid_results.txt en tu directorio de proyecto:
find / -perm -4000 -type f 2> /dev/null > ~/project/suid_results.txt
Analicemos este comando para que entiendas exactamente qué hace. El / le dice al comando que comience a buscar desde la parte superior del sistema de archivos. El flag -perm -4000 busca específicamente archivos con el bit SUID activado. El flag -type f asegura que solo busquemos archivos regulares, no directorios. Finalmente, 2>/dev/null es un truco ingenioso que toma cualquier mensaje de error de "Permiso denegado" y lo envía a un agujero negro (/dev/null), manteniendo nuestra salida limpia. El símbolo > redirige la salida limpia a nuestro archivo de texto.
Ahora, veamos el contenido del archivo que acabas de crear para ver qué binarios tienen activado el bit SUID:
cat ~/project/suid_results.txt
Verás una salida similar a esta:
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/bin/chfn
/usr/bin/find
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/mount
/usr/bin/umount
Observa detenidamente la lista. Muchos de estos, como passwd y su, se espera que tengan el bit SUID activado. Sin embargo, uno de estos binarios destaca como altamente inusual y potencialmente peligroso.
Identificación de binarios explotables (GTFOBins)
En este paso, analizarás los resultados de tu búsqueda e identificarás qué binario puede ser explotado.
Al observar la salida del paso anterior, es posible que notes /usr/bin/find en la lista. El comando find es una utilidad estándar utilizada para buscar archivos, y absolutamente no necesita privilegios de root para funcionar normalmente. El hecho de que tenga el bit SUID activado es una configuración de seguridad errónea importante.
Esa evaluación es importante. No todos los binarios SUID son explotables, pero los inusuales merecen un escrutinio especial porque pueden proporcionar capacidades que sus diseñadores nunca pretendieron exponer con derechos elevados.
Para entender cómo podemos explotar esto, los profesionales de seguridad utilizan un recurso llamado GTFOBins. GTFOBins es una lista curada de binarios de Unix que pueden utilizarse para eludir restricciones de seguridad locales en sistemas mal configurados. Si visitaras el sitio web de GTFOBins y buscaras "find", descubrirías que find tiene una característica que le permite ejecutar otros comandos.
Debido a que nuestro binario find tiene el bit SUID activado, cualquier comando que ejecute se ejecutará con los privilegios del propietario del binario (que es root).
Para confirmar tu hallazgo, crea un archivo llamado vulnerable_binary.txt y escribe el nombre del binario explotable en él. Ejecuta el siguiente comando:
echo "find" > ~/project/vulnerable_binary.txt
Puedes verificar el contenido del archivo imprimiéndolo en la terminal:
cat ~/project/vulnerable_binary.txt
La salida debería ser simplemente:
find
Al identificar esta configuración errónea, has encontrado el punto de entrada para tu ataque de escalada de privilegios.
Creación del comando de explotación
En este paso, prepararás el payload de comando específico necesario para explotar la configuración errónea de SUID en el binario find.
Según GTFOBins, el comando find tiene un parámetro -exec. Este parámetro se utiliza normalmente para ejecutar una acción específica en cada archivo que find localiza. Sin embargo, los atacantes pueden abusar de este parámetro para ejecutar una shell del sistema (/bin/sh).
El payload de explotación estándar se ve así: find . -exec /bin/sh -p \; -quit.
Analicemos por qué funciona este payload. El . le dice a find que comience a buscar en el directorio actual. El flag -exec le indica que ejecute el siguiente comando. Proporcionamos /bin/sh para lanzar una shell. El flag -p es crucial; le dice a la shell que preserve los privilegios con los que fue lanzada (en este caso, los privilegios de root otorgados por el bit SUID). El \; significa el final del comando que queremos ejecutar. Finalmente, -quit le dice a find que deje de buscar inmediatamente después de ejecutar el comando una vez, en lugar de repetirlo para cada archivo en el directorio.
Para prepararte para la ejecución final, guardemos este payload de explotación en un archivo de script de shell llamado exploit.sh. Ejecuta el siguiente comando:
echo 'find . -exec /bin/sh -p \; -quit' > ~/project/exploit.sh
Puedes ver el script que acabas de crear para asegurarte de que el payload sea correcto:
cat ~/project/exploit.sh
La salida mostrará tu payload creado:
find . -exec /bin/sh -p \; -quit
Ahora tienes el comando exacto necesario para engañar al binario find y que te proporcione una shell de root.
Ejecución de la escalada de privilegios
En este paso final, ejecutarás el exploit y demostrarás que has escalado con éxito tus privilegios al usuario root.
En lugar de entrar directamente en una shell interactiva (lo cual puede ser difícil de verificar en un entorno de laboratorio automatizado), modificaremos ligeramente nuestro payload para ejecutar un solo comando como root y guardar la salida. Usaremos el comando whoami, que imprime el nombre de usuario del usuario efectivo actual.
Ejecuta el siguiente comando para ejecutar whoami a través del binario vulnerable find y redirigir la salida a un archivo llamado root_proof.txt:
/usr/bin/find . -exec whoami \; -quit > ~/project/root_proof.txt
Observa que usamos la ruta absoluta /usr/bin/find para asegurarnos de que estamos ejecutando el binario específico que identificamos anteriormente. El comando find se ejecuta, activa el flag -exec, ejecuta whoami con privilegios de root (gracias al bit SUID) y guarda el resultado.
Ahora, verifiquemos el contenido de tu archivo de prueba para ver si el exploit fue exitoso:
cat ~/project/root_proof.txt
Si el exploit funcionó correctamente, la salida será:
root
¡Felicidades! Has explotado con éxito un binario SUID mal configurado para ejecutar comandos como usuario root.
Si deseas experimentar cómo obtener una shell de root interactiva real, puedes ejecutar el payload que creaste en el paso anterior directamente en tu terminal:
/usr/bin/find . -exec /bin/sh -p \; -quit
Tu prompt de comandos cambiará a un símbolo #, lo que indica que ahora estás operando como usuario root. Puedes escribir exit para salir de la shell de root y volver a tu prompt de usuario normal.
Resumen
En este laboratorio, aprendiste con éxito cómo identificar y explotar configuraciones erróneas de SUID en un sistema Linux. Comenzaste utilizando el comando find para buscar binarios con el bit de permiso SUID activado. Después de identificar /usr/bin/find como una anomalía, aprendiste cómo se pueden utilizar recursos como GTFOBins para descubrir payloads de explotación. Finalmente, creaste y ejecutaste un comando que abusó del parámetro -exec del binario find, permitiéndote ejecutar comandos con privilegios de root.
Este ejercicio destaca la importancia crítica de una gestión adecuada de los permisos en Linux. Los administradores del sistema deben auditar regularmente los binarios SUID para asegurarse de que las utilidades estándar no estén otorgando inadvertidamente una vía para la escalada de privilegios.



