Tema 18

18. Explotación en Linux: permisos, servicios, SUID, capabilities y escalada local

Después de obtener acceso autorizado a un sistema Linux de laboratorio o dentro del alcance, el objetivo es entender el contexto local: quién somos, qué permisos existen, qué servicios corren y qué configuraciones podrían permitir escalar privilegios.

Objetivo Analizar riesgos locales en sistemas Linux
Enfoque Enumeración, permisos y escalada controlada
Resultado Validar rutas de privilegio sin dañar el sistema

18.1 Introducción

La explotación en Linux dentro de un pentest suele empezar después de obtener una sesión, una cuenta válida o acceso a un servicio. En ese punto, el trabajo cambia: ya no se trata solo de entrar, sino de entender qué puede hacerse con ese acceso y qué impacto tendría.

La escalada local busca pasar de un usuario limitado a un contexto con más privilegios. Puede ocurrir por permisos incorrectos, sudo mal configurado, binarios SUID, capabilities peligrosas, servicios editables, tareas programadas, secretos expuestos o vulnerabilidades del kernel.

Este tema presenta una metodología de análisis local orientada a entornos autorizados. El foco es validar riesgo con cuidado, documentar evidencia y recomendar correcciones.

18.2 Principios de trabajo en Linux comprometido

Una sesión en Linux puede ser frágil y estar registrada. Antes de ejecutar acciones, hay que entender el alcance y evitar cambios innecesarios.

  • Confirmar que el sistema está dentro del alcance.
  • Identificar usuario, grupos y privilegios actuales.
  • Evitar modificar archivos productivos sin autorización.
  • No borrar logs ni ocultar actividad.
  • Recolectar evidencia mínima.
  • Documentar comandos relevantes y resultados.
  • Detenerse si aparece información sensible fuera de lo esperado.
En post-acceso, más privilegio no siempre significa mejor prueba. El valor está en demostrar una ruta de impacto de forma controlada.

18.3 Enumeración local inicial

La enumeración local responde preguntas básicas: quién soy, dónde estoy, qué sistema es, qué permisos tengo y qué servicios existen.

Pregunta Qué buscar Riesgo asociado
¿Qué usuario soy? UID, GID, grupos Grupos con permisos especiales
¿Qué sistema es? Distribución, kernel, arquitectura Vulnerabilidades locales o soporte vencido
¿Qué procesos corren? Servicios, usuarios propietarios Procesos privilegiados mal configurados
¿Qué puedo leer? Archivos, configuraciones, logs Secretos o información sensible expuesta
¿Qué puedo escribir? Directorios, scripts, rutas de servicio Alteración de ejecución privilegiada

18.4 Usuarios, grupos y privilegios

Los grupos en Linux pueden otorgar capacidades importantes. No todos los riesgos requieren ser root directamente; pertenecer a ciertos grupos puede permitir acceso a archivos, contenedores, dispositivos o ejecución indirecta.

  • sudo: posibilidad de ejecutar comandos como otro usuario.
  • docker: puede permitir acceso equivalente a root si está mal controlado.
  • adm: acceso a logs sensibles.
  • www-data: contexto habitual de aplicaciones web.
  • backup: acceso a respaldos con información crítica.
  • disk: acceso peligroso a dispositivos de almacenamiento.

La evidencia debe mostrar el grupo y su impacto, no solo listar membresías.

18.5 Permisos de archivos y directorios

Los permisos incorrectos son una causa frecuente de escalada. Un archivo editable por un usuario limitado, pero ejecutado por root, puede ser una ruta crítica. Un archivo legible con secretos puede abrir otra vía de acceso.

  • Archivos de configuración legibles por usuarios no autorizados.
  • Scripts ejecutados por tareas programadas y editables por usuarios comunes.
  • Directorios de servicio con permisos de escritura excesivos.
  • Claves privadas SSH legibles.
  • Backups, dumps o archivos temporales con datos sensibles.
  • Permisos 777 o propietarios incorrectos en rutas críticas.
La combinación peligrosa suele ser escritura por usuario no privilegiado y ejecución o lectura por usuario privilegiado.

18.6 Sudo y reglas mal configuradas

Sudo permite ejecutar comandos con privilegios de otro usuario. Una configuración demasiado permisiva puede permitir escalada directa o indirecta.

Configuración Riesgo Validación segura
Comandos sin contraseña Ejecución privilegiada inmediata Listar permisos y probar comando inocuo
Permiso sobre editores Escape a shell privilegiada Documentar riesgo sin modificar archivos
Permiso sobre scripts Abuso si el script llama rutas manipulables Revisar contenido y permisos
Variables de entorno permitidas Hijacking de librerías o rutas Validar configuración, no ejecutar payloads peligrosos
Wildcards en rutas Coincidencias inesperadas Demostrar con archivo de prueba si está autorizado

18.7 Binarios SUID

Un binario con SUID se ejecuta con los privilegios de su propietario, normalmente root. Esto es necesario para algunas funciones del sistema, pero puede ser peligroso si el binario permite ejecutar comandos, leer archivos o cargar librerías de forma insegura.

Aspectos a revisar:

  • Binarios SUID no habituales.
  • Binarios personalizados o ubicados fuera de rutas estándar.
  • Permisos de escritura sobre el binario o directorio.
  • Uso de rutas relativas dentro del programa.
  • Llamadas a comandos externos sin ruta absoluta.
  • Comportamiento documentado como riesgoso en fuentes confiables.

18.8 Validación segura de SUID

La validación de SUID debe evitar alterar binarios o ejecutar acciones peligrosas. Muchas veces basta con demostrar que existe un binario SUID no estándar y explicar su ruta de abuso.

  • Identificar propietario, permisos y ruta.
  • Determinar si es estándar del sistema o agregado.
  • Revisar versión y comportamiento documentado.
  • Probar funciones inocuas si el binario lo permite.
  • No reemplazar binarios ni alterar rutas productivas.
  • Documentar posibilidad de escalada y condiciones necesarias.

18.9 Linux capabilities

Las capabilities dividen privilegios de root en permisos más específicos. Son útiles para reducir privilegio total, pero mal asignadas pueden permitir acciones peligrosas.

Capability Riesgo potencial Ejemplo de impacto
cap_setuid Cambio de identidad de proceso Puede facilitar escalada a root
cap_dac_read_search Lectura ignorando permisos normales Acceso a archivos sensibles
cap_dac_override Escritura ignorando controles DAC Modificar archivos protegidos
cap_net_raw Uso de sockets raw Riesgos de sniffing o manipulación de red
cap_sys_admin Privilegios muy amplios Frecuentemente equivalente a alto riesgo

18.10 Servicios y systemd

Los servicios pueden ejecutarse como root u otros usuarios privilegiados. Una configuración insegura puede permitir modificar unidades, scripts, binarios o variables usadas por el servicio.

  • Servicios personalizados.
  • Unit files editables por usuarios no privilegiados.
  • Binarios o scripts llamados por servicios con permisos débiles.
  • Variables de entorno con secretos.
  • Servicios que ejecutan comandos con rutas relativas.
  • Permisos peligrosos sobre directorios de trabajo.

La validación debe centrarse en permisos y configuración, evitando reiniciar servicios productivos sin autorización.

18.11 Cron y tareas programadas

Cron ejecuta tareas en horarios definidos. Si una tarea privilegiada llama a un script editable por un usuario limitado, puede existir una ruta de escalada.

  • Revisar tareas de sistema y usuario.
  • Identificar scripts ejecutados por root.
  • Verificar permisos de escritura sobre scripts y directorios.
  • Revisar uso de rutas relativas.
  • Buscar archivos temporales o logs generados por tareas.
  • No modificar tareas sin autorización explícita.
Una tarea programada segura depende tanto del usuario que la ejecuta como de los permisos de todo lo que invoca.

18.12 PATH hijacking

PATH hijacking ocurre cuando un script o servicio ejecuta comandos sin ruta absoluta y el atacante puede influir en el PATH o en el directorio donde se busca el binario.

Señales:

  • Scripts privilegiados que llaman comandos sin ruta absoluta.
  • Directorios escribibles antes de rutas seguras en PATH.
  • Servicios que usan entornos modificables.
  • Tareas cron con PATH inseguro.

La evidencia puede ser el script, el PATH y los permisos. No siempre es necesario ejecutar un reemplazo.

18.13 Credenciales y secretos locales

Linux suele contener secretos en archivos de configuración, variables de entorno, historiales, backups y directorios de aplicaciones. Encontrarlos puede permitir moverse a otro usuario, servicio o sistema.

  • Archivos .env y configuraciones de aplicaciones.
  • Historiales de shell con comandos sensibles.
  • Claves SSH privadas.
  • Credenciales de bases de datos.
  • Tokens de cloud o CI/CD.
  • Backups y dumps.
  • Variables de entorno de procesos.

No se deben copiar secretos completos si un fragmento o ruta basta para evidenciar exposición.

18.14 SSH y movimiento entre usuarios

Las claves SSH y archivos de configuración pueden permitir acceso a otras cuentas o sistemas. En un pentest, cualquier uso de credenciales encontradas debe estar autorizado.

Elemento Riesgo Validación segura
Clave privada legible Acceso a usuario o servidor Documentar permisos y propietario
known_hosts Revela destinos relacionados Usar como contexto, no escanear sin alcance
config SSH Hosts, usuarios y rutas de claves Registrar metadatos no sensibles
authorized_keys Llaves con acceso persistente Revisar permisos y entradas sospechosas

18.15 Contenedores y Docker en Linux

Si un usuario pertenece al grupo docker o puede controlar contenedores, el impacto puede ser alto. Docker mal configurado puede permitir acceder al host, montar archivos o ejecutar procesos privilegiados.

  • Verificar membresía en grupo docker.
  • Revisar contenedores en ejecución y montajes.
  • Identificar sockets Docker expuestos.
  • Revisar contenedores privilegiados.
  • Buscar secretos en variables y volúmenes.
  • No iniciar contenedores privilegiados sin autorización.

18.16 Kernel y vulnerabilidades locales

Las vulnerabilidades locales de kernel pueden permitir escalada, pero suelen tener riesgo de inestabilidad. En producción, normalmente se validan por versión, configuración y parches, no ejecutando exploits directamente.

  • Identificar versión de kernel y distribución.
  • Revisar parches del proveedor.
  • Considerar backports.
  • Analizar requisitos de explotación.
  • Probar exploits solo en laboratorio o con autorización explícita.
  • Priorizar actualización o mitigación si aplica.
Los exploits de kernel pueden colgar el sistema. La evidencia indirecta suele ser la opción correcta en entornos productivos.

18.17 Aplicaciones web en Linux

En servidores Linux, las aplicaciones web suelen ejecutarse como usuarios como www-data, nginx, apache o usuarios de aplicación. Desde ese contexto, la enumeración debe centrarse en configuración, secretos y permisos.

  • Variables de entorno del proceso.
  • Archivos de configuración de aplicación.
  • Credenciales de base de datos.
  • Permisos sobre directorios de carga.
  • Scripts de despliegue.
  • Claves y tokens de servicios externos.
  • Separación entre entornos dev, test y producción.

18.18 Herramientas de enumeración local

Existen scripts que automatizan la enumeración local. Son útiles, pero deben revisarse antes de ejecutarlos porque pueden acceder a muchos archivos o generar ruido.

  • Entender qué recolecta la herramienta.
  • Evitar subir scripts si no está permitido.
  • Ejecutar con bajo impacto.
  • Revisar salida manualmente.
  • Eliminar archivos creados.
  • No incluir secretos completos en reportes.

18.19 Evidencia de escalada local

La evidencia debe demostrar la ruta de privilegio sin dejar cambios innecesarios.

Hallazgo Evidencia útil Evitar
Sudo inseguro Regla permitida y comando inocuo Modificar archivos críticos
SUID peligroso Permisos, propietario y ruta de abuso Reemplazar binarios
Script root editable Permisos del script y tarea que lo ejecuta Insertar payload persistente
Secreto expuesto Ruta y fragmento enmascarado Copiar secreto completo
Capability riesgosa Binario y capability asignada Ejecutar abuso si no es necesario

18.20 Remediación típica

Las recomendaciones deben apuntar a causa raíz: permisos, configuración, privilegios o secretos.

  • Aplicar mínimo privilegio a usuarios y grupos.
  • Restringir sudo a comandos específicos y seguros.
  • Eliminar SUID innecesario.
  • Revisar capabilities y retirar las peligrosas.
  • Corregir propietarios y permisos de scripts.
  • Proteger secretos con gestores adecuados.
  • Actualizar kernel y paquetes con parches de seguridad.
  • Separar usuarios de aplicación y servicios.

18.21 Errores frecuentes

  • Ejecutar exploits de kernel en producción sin autorización.
  • Copiar secretos completos como evidencia.
  • Modificar scripts o servicios para demostrar escalada cuando bastaba con permisos.
  • Ignorar grupos peligrosos como docker o disk.
  • No revisar tareas cron y servicios personalizados.
  • Reportar SUID estándar sin impacto real.
  • No considerar backports de parches en distribuciones Linux.
  • No limpiar archivos temporales de enumeración.

18.22 Flujo práctico de escalada local

Un flujo responsable puede ser:

  1. Confirmar alcance y contexto de acceso.
  2. Identificar usuario, grupos, sistema y kernel.
  3. Enumerar permisos de sudo.
  4. Revisar SUID, capabilities y binarios no estándar.
  5. Analizar servicios, cron y scripts privilegiados.
  6. Buscar secretos con evidencia mínima.
  7. Revisar contenedores o sockets expuestos.
  8. Determinar rutas de escalada y riesgo.
  9. Validar con método no destructivo.
  10. Documentar remediación y limpiar artefactos.

18.23 Qué debes recordar de este tema

  • La escalada local en Linux empieza con enumeración cuidadosa.
  • Sudo, SUID, capabilities, cron y servicios son fuentes comunes de rutas de privilegio.
  • Los secretos locales pueden tener más impacto que una vulnerabilidad técnica.
  • Los exploits de kernel deben tratarse como riesgosos y validarse con cautela.
  • La evidencia debe demostrar impacto sin modificar sistemas innecesariamente.
  • La remediación suele ser mínimo privilegio, permisos correctos y control de secretos.

18.24 Conclusión

La explotación local en Linux exige entender permisos, procesos, configuración y secretos. No se trata de ejecutar scripts al azar, sino de construir una ruta de impacto clara y validarla de forma proporcional.

En el próximo tema veremos explotación en Windows: privilegios, servicios, credenciales y escalada local, con sus propios modelos de permisos, autenticación y administración.