cd ~/blog

~/vulns/suid-binary-abuse.md

SUID Binary Abuse

privescautor: Jordy Pérez Osorio aviso legal
linuxprivilege-escalationSUID

~2 min de lectura


1. Descripción técnica

El bit set-user-ID, o SUID, hace que un ejecutable arranque con el UID efectivo de su propietario. Esto permite que un usuario invoque una operación concreta con permisos que normalmente no posee. El mecanismo es legítimo; la vulnerabilidad aparece cuando el binario expone funciones capaces de ampliar esa operación hasta ejecutar una shell, leer recursos arbitrarios o controlar rutas sensibles.

El UID real identifica a quien lanzó el programa. El UID efectivo se utiliza en numerosas comprobaciones de acceso. Una shell puede descartar el UID efectivo elevado por seguridad, por lo que la explotación depende del comportamiento exacto del binario y del proceso hijo.

1.1. Mecanismo

// renderizando diagrama…

2. Impacto

El impacto depende de la función expuesta. Puede limitarse a leer una clave concreta o llegar a una shell con UID efectivo 0. Encontrar un archivo SUID no demuestra por sí mismo que exista una vía de escalada.

3. Condiciones necesarias

  1. El ejecutable tiene SUID y pertenece a una identidad más privilegiada.
  2. El sistema de archivos y las opciones de montaje respetan ese bit.
  3. El binario conserva los privilegios durante la operación relevante.
  4. Existe una entrada, suborden, intérprete o ruta que el usuario pueda controlar.

4. Validación y detección

Se enumeran los archivos SUID y se compara la lista con el inventario esperado del sistema. Para cada candidato se revisan propietario, permisos, versión, funciones disponibles, uso de variables de entorno y llamadas a programas externos.

La confirmación debe mostrar el efecto concreto. Una lectura privilegiada se demuestra con el recurso recuperado; una shell se verifica con id o whoami cuando la evidencia esté disponible.

5. Explotación documentada en los writeups

5.1. 002-alzheimer

capsh inicia con UID efectivo 0 y permite fijar UID y GID antes de abrir una shell.

5.2. 003-connection

GDB ejecuta Python embebido. os.execl() sustituye el depurador por una shell que preserva el UID efectivo.

5.3. 006-hommie

showMetheKey abre $HOME/.ssh/id_rsa con sus privilegios elevados. Cambiar HOME a /root altera la ruta y expone la clave, sin producir una shell directamente.

6. Mitigación

  • Retirar SUID cuando el programa no lo necesite.
  • Reemplazarlo por capacidades o un servicio reducido cuando sea posible.
  • No confiar en variables de entorno, directorios actuales ni rutas controlables.
  • Reducir privilegios antes de procesar entradas no confiables.
  • Mantener un inventario y alertar ante nuevos binarios SUID.

7. Clasificación

8. Referencias y conexiones

// relacionados