🧠 Teoría

Las Linux Capabilities permiten dividir los privilegios de root en permisos más pequeños y controlados, otorgando a los procesos solo los privilegios que realmente necesitan.

Info

Importante:
Las capabilities afectan a los procesos, no a los usuarios.


🛠️ Práctica: Laboratorio con Docker

1. Preparar el entorno

Descargar la imagen de Ubuntu

docker pull ubuntu:latest

Crear el contenedor con privilegios elevados

docker run -dit --privileged --name ubuntuServer ubuntu

Warning

La flag --privileged es necesaria para capturar tráfico de red con tcpdump.

Acceder al contenedor

docker exec -it ubuntuServer bash

Actualizar e instalar herramientas

apt update
apt install libcap2-bin tcpdump net-tools -y
  • libcap2-bin: Proporciona getcap y setcap
  • tcpdump: Herramienta para capturar tráfico de red
  • net-tools: Incluye utilidades como ifconfig

2. Crear un usuario de prueba

useradd liskov -m -s /bin/bash
FlagDescripción
-mCrea el directorio home
-sAsigna el shell
-dAsigna el home (opcional si usás -m)

3. Probando tcpdump

Identificar interfaces de red

ifconfig

Capturar tráfico ICMP

tcpdump -i eth0 icmp -n -w Captura.cap
FlagDescripción
-i eth0Interfaz de red (usualmente ethernet)
icmpFiltro para paquetes ICMP
-nNo resuelve IPs a nombres de dominio
-wGuarda la captura en un archivo

🔍 Listar y analizar capabilities

Ver capabilities de procesos

  1. Listar PIDs:
ls /proc/
  1. Ver detalles de un proceso (ejemplo PID 1234):
ls -l /proc/1234/
cat /proc/1234/status | grep Cap

Example

Salida esperada:
> CapEff: 000001ffffffffff

  1. Decodificar capabilities:
capsh --decode=000001ffffffffff

Ver capabilities de binarios

Asignar capabilities a tcpdump

setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

Tip

¿Qué estamos haciendo?

  • cap_net_raw: Permite crear sockets RAW
  • cap_net_admin: Permite administrar interfaces de red
  • =eip: Asigna las capabilities como Effective, Inheritable y Permitted

Ver capabilities de un binario

getcap /usr/sbin/tcpdump

Buscar capabilities en todo el sistema

getcap -r / 2>/dev/null

Ver capabilities de un proceso

getpcaps <pid>

🚩 Escalada de privilegios con capabilities

Capability peligrosa: cap_setuid

Warning

cap_setuid permite cambiar de usuario sin contraseña.

Ejemplo de explotación con Python

Si encontrás /usr/bin/python = cap_setuid+ep:

python -c 'import os; os.setuid(0); os.system("/bin/bash")'

Info

os.setuid(0) cambia el UID del proceso a root y luego ejecuta una shell.

Remover capability peligrosa

setcap -r /usr/bin/python

🗂️ Tabla de comandos útiles

ComandoDescripción
getcap <binario>Ver capabilities de un binario
setcap <caps> <binario>Asignar capabilities
getcap -r / 2>/dev/nullBuscar capabilities en todo el sistema
getpcaps <pid>Ver capabilities de un proceso
capsh --decode=<hex>Decodificar capabilities en formato hexadecimal

🧰 Recursos: GTFOBins

Info

GTFOBins es una lista seleccionada de binarios de Unix que se pueden utilizar para eludir las restricciones de seguridad locales en sistemas mal configurados.

Tip

Para más técnicas de explotación con capabilities, consultá GTFOBins.


🗺️ Diagrama de flujo: Escalada con cap_setuid

flowchart TD
    A[Reconocimiento de capabilities] --> B{¿cap_setuid en binario?}
    B -- Sí --> C[Ejecutar exploit Python]
    C --> D[Obtener shell root]
    B -- No --> E[Buscar otras capabilities]