the_open_door
café
ESEN
← Volver al índice

Privileged groups on Linux

En Linux la pertenencia a ciertos grupos vale tanto como una entrada en sudoers, pero no aparece en sudo -l y por eso se pasa por alto. El primer comando tras conseguir una shell debería ser id, y si devuelve algo distinto de los grupos por defecto conviene mirarlo antes que ninguna otra cosa.

id
# uid=1000(user) gid=1000(user) groups=1000(user),27(sudo),108(lxd),6(disk)

Los grupos que conceden root de forma directa o casi directa son estos:

El caso de disk es el más ilustrativo porque no necesita ningún exploit:

df -h /
debugfs /dev/sda1
debugfs:  cat /etc/shadow

debugfs abre el dispositivo directamente, así que los permisos del fichero dejan de importar: quien puede leer el disco puede leer todo lo que hay en él.

Matices. Que un grupo aparezca en id no garantiza el vector: docker necesita que el demonio esté corriendo, lxd que el servicio esté inicializado, y disk que el usuario tenga acceso al dispositivo concreto donde vive el sistema de ficheros. Conviene comprobarlo antes de darlo por hecho.

Cómo detectarlo. Cada grupo deja una firma distinta al abusarse: disk genera lecturas directas del dispositivo de bloque (debugfs/dd sobre /dev/sda* por un no-administrador, auditd -w /dev/sda1); docker/lxd, contenedores que montan la raíz del host (ver docker-group-abuse y lxd-privesc); adm, lecturas masivas de /var/log que no vienen de una herramienta de gestión; shadow, un open de /etc/shadow por un proceso que no es sshd/login/passwd. La señal transversal en reposo es sencilla: una cuenta de servicio o de usuario normal que aparece en id como miembro de uno de estos grupos es ya la desviación de configuración a investigar.

Defensa. Tratar estos grupos como se trata sudo: revisar quién pertenece a ellos, no usarlos como atajo para dar permisos puntuales y auditar los cambios de pertenencia.

Máquinas donde se aplica