Privilegios especiales - Capabilities

3/14/20253 min read

¿Qué es esto de las capabilities? Pues referenciándonos a capabilities, en español capacidades. Podemos decir que se refiere a las capacidades de un binario por ejemplo con ciertos privilegios.

Como vemos en la imagen utilizaremos el binario python3.11 como ejemplo. Donde como podéis comprobar el binario no tiene asignado SUID ni SGID pero aun así veréis como podemos hacer para que sin tener estos permisos podamos convertirnos en root, es decir hacer una escalada de privilegios.

Como veis al intentar hacer un $ os.setuid(0) para convertirnos en root no nos deja. Entonces intentaremos lo siguiente...

Nosotros a nivel de sistema tenemos una utilidad que se llama getcap, que nos sirve para listar las capabilities de un binario por ejemplo. Y esa seria su ruta absoluta.

$ getcap -r / 2>/dev/null - Entonces nosotros podemos realizar un getcap junto al parámetro -r (para especificarle que de manera recursiva ) busque en la / raíz todas las capabilities a nivel de sistema, y por último que todo el STDERR es decir los errores o los archivos que nos salgan como permiso denegado no aparezcan con 2>/dev/null

Entonces esas serian nuestras capabilities a nivel de sistema. Entonces si nosotros agregamos la siguiente...

$ setcap cap_setuid+ep /usr/bin/python3.11 - Donde especificamos con setcap que queremos agregar o eliminar una capability al sistema. Agregaremos cap_setuid+ep al binario /usr/bin/python3.11 y lo haremos como usuario root, importante. Entonces si nuevamente realizamos un getcap -r / 2>/dev/null veremos que se ha agregado /usr/bin/python3.11 cap_setuid=ep

$ setcap -r /usr/bin/python3.11 - Al realizar $ setcap -r y la ruta del binario lo que logramos es eliminar la capability del binario especificado, como podemos comprobar en la imagen.

Volvemos a aplicarle la capability y volvemos a comprobar que esta activa. ¿Entonces esto para que sirve realmente?

Si ahora ejecuto python como facu ( usuario no privilegiado ) y si vemos que el archivo no tiene ningún permiso especial asignado como SUID o SGID, podremos comprobar que al ejecutar python y realizar un $ os.setuid(0) automáticamente nos convertimos por arte de magia en root. Podemos crear una terminal interactiva y escalar de facu a root gracias a la capability previamente definida como root.

Esto junto a una mala configuración del sistema podría ser una vulnerabilidad. Pero no quiere decir que todos los archivos que tengan una capability asignada tengan una vulnerabilidad, sino que debemos buscar la adecuada