3 min read

getcap y setcap

getcap y setcap
Photo by Arian Darvishi / Unsplash
🟠
Artículo de nivel avanzado en el uso de GNU/Linux

Hace poco, descubrí que existen posibilidades de escalada de privilegios en servidores muy sencilla de ejecutar. Una de las primeras formas, es a través de esta aplicación, donde descubriremos las capacidades de los ejecutables de un activo

Como siempre, creo que lo mejor para evitar vulnerabilidades, es conocer el sistema y como están implementadas las herramientas. Hoy hablamos de getcap

Pero antes de getcap tenemos que hablar de que la definición de las capabilites o capacidades

Son un conjunto de permisos que permiten a un proceso realizar acciones específicas que normalmente requieren privilegios de superusuario (root)

getcap

Su función es mostrar las capacidades de archivo específico. Es decir, que puede, o no puede hacer independientemente de sus grupos, su dueño y/o su nivel de privilegio.

getcap -h

Nos muestra el menú que veis a continuación

getcap -h
usage: getcap [-h] [-l] [-n] [-r] [-v] <filename> [<filename> ...]

	displays the capabilities on the queried file(s).

Menú de ayuda

getcap -l

Muestra la licencia del software

getcap see LICENSE file for details.
Copyright (c) 1997,2007,2021 Andrew G. Morgan <morgan@kernel.org>

Versión de getcap

getcap -n

Hace más legible las capacidades


/usr/bin/sniffnet cap_net_admin,cap_net_raw=eip

Opción de código más legible

getcap -r

Muestra las capacidades de las apps de manera recursiva


/usr/bin/sniffnet cap_net_admin,cap_net_raw=eip

getcap -v

Se trata de un validador, si está todo correcto, se muestran las capacidades, si no es así muestra el error.

A continuación, voy a mostrar las dos capacidades de sniffnet que es el software que estoy analizando.

cap_net_admin es el encargado de realizar diversas opciones de red

cap_net_raw también encargado del manejo de paquetes de red

Dejo una lista de las capabilites de Linux

capabilities(7) - Linux manual page

Vale, y ¿qué me tiene que preocupar? Particularmente en este ejemplo nada, dado que el software no es capaz de ejecutar ningún comando, pero y si en vez de un sniffer de red habláramos de Python. Bajo ciertos permisos, Python es capaz de ejecutar casi cualquier cosa y ahí radica el mayor peligro, porque estas capacidades son modificables a través de setcap

setcap

setcap modifica las capacidades de las apps, como vimos anteriormente teníamos cap_net_admin y cap_net_raw de la app sniffnet

setcap -r

Permite eliminar las capacidades asignadas

setcap -f

Fuerza, la configuración de la capacidad, aunque se trate de una capacidad inválida

setcap -h

Muestra la ayuda.

setcap -n <rootid>

Crea un espacio de usuario para tener un entorno aislado y pueden ser remapeados

setcap -q

Realiza la función de la manera más silenciosa posible suprimiendo la salida del comando

💡
Este artículo se ha llevado a cabo consultando fuentes abiertas y experiencias propias, asegurando así la originalidad y autenticidad del trabajo. Se utilizó la IA como asistente en la redacción, no en la información recopilada