getcap y setcap
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

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


Member discussion