Cron Jobs y tareas programadas

LinuxBeginner
Practicar Ahora

Introducción

En los sistemas Linux, los administradores utilizan frecuentemente programadores de tareas automatizadas para realizar tareas rutinarias de mantenimiento, copias de seguridad y actualizaciones del sistema. La utilidad más común para este propósito es Cron. Aunque Cron es increíblemente útil, las tareas programadas mal configuradas pueden introducir graves vulnerabilidades de seguridad.

Las tareas programadas son peligrosas cuando la confianza y el acceso de escritura no están alineados. Si una tarea privilegiada ejecuta algo que los usuarios con menos privilegios pueden modificar, la programación se convierte en un mecanismo de escalada de privilegios diferida.

En este laboratorio, explorarás un escenario donde un administrador del sistema ha creado un script de mantenimiento que se ejecuta automáticamente como usuario root. Sin embargo, el administrador dejó accidentalmente los permisos del archivo demasiado permisivos. Aprenderás a identificar esta mala configuración, comprender sus implicaciones y explotarla inyectando tu propia carga útil de comandos para escalar tus privilegios de un usuario estándar a root.

Enumerar trabajos Cron

En este paso, aprenderás a enumerar los trabajos Cron de todo el sistema. Cron es un programador de tareas basado en el tiempo en sistemas operativos tipo Unix. Los administradores del sistema lo utilizan para programar trabajos (comandos o scripts de shell) para que se ejecuten periódicamente en momentos, fechas o intervalos fijos.

Los trabajos cron del sistema a menudo se definen en el archivo /etc/crontab o dentro del directorio /etc/cron.d/. Estos archivos de configuración especifican la programación, la cuenta de usuario bajo la cual debe ejecutarse el comando y el comando en sí.

Esto significa que las entradas de cron revelan tres hechos críticos a la vez: cuándo se ejecutará el código, bajo qué identidad se ejecutará y qué archivo o comando se ejecutará.

Inspeccionemos el directorio /etc/cron.d/ para ver si hay tareas programadas personalizadas. Usa el comando cat para leer el contenido del archivo de trabajo cron de mantenimiento.

cat /etc/cron.d/maintenance

Salida:

* * * * * root /usr/local/bin/maintenance.sh

La salida muestra un trabajo cron programado para ejecutarse cada minuto, indicado por los cinco asteriscos (* * * * *). Está configurado para ejecutarse como usuario root y ejecuta el script de bash ubicado en /usr/local/bin/maintenance.sh.

Identificar scripts editables

En este paso, investigarás el script ejecutado por el trabajo cron para identificar posibles vulnerabilidades de seguridad. Cuando un script es ejecutado por un usuario con altos privilegios como root, cualquier comando dentro de ese script también se ejecutará con privilegios de root.

Es por esto que las rutas de scripts editables son una señal importante de escalada. El control del contenido del script se convierte en un control indirecto de la tarea programada privilegiada.

Si los usuarios estándar pueden modificar este script, pueden inyectar sus propios comandos, que el sistema ejecutará como root. Este es un vector común de escalada de privilegios.

Comprobemos los permisos de archivo del script de mantenimiento usando el comando ls con la bandera -l para obtener un listado detallado.

ls -l /usr/local/bin/maintenance.sh

Salida:

-rwxrwxrwx 1 root root 78 Oct 10 10:00 /usr/local/bin/maintenance.sh

Observa los permisos rwxrwxrwx al principio de la línea de salida. Esto significa que el archivo es legible, escribible y ejecutable por el propietario, el grupo y cualquier otra persona en el sistema. Debido a que es escribible por todos, tu usuario estándar actual puede modificar su contenido.

Inyectar una carga útil de comando root

En este paso, explotarás los permisos de archivo débiles inyectando tu propio comando en el script de mantenimiento.

Dado que el script se ejecuta como root cada minuto, cualquier comando que añadas a él también se ejecutará como root. Para una prueba fiable y sencilla para principiantes, añadiremos un comando que escriba la salida de id en un archivo en tu directorio de proyecto.

Usaremos el comando echo para añadir esta carga útil al script. El operador >> asegura que añadamos nuestra carga útil al final del archivo sin borrar su contenido original.

echo "id > /home/labex/project/cron_pwned.txt" >> /usr/local/bin/maintenance.sh

Puedes verificar que tu carga útil se añadió correctamente leyendo el final del archivo usando el comando tail.

tail -n 2 /usr/local/bin/maintenance.sh

Salida:

echo "Maintenance run at $(date)" >> /var/log/maintenance.log
id > /home/labex/project/cron_pwned.txt

Esperar a que se ejecute la tarea propiedad de root

En este paso, esperarás a que el trabajo cron ejecute tu carga útil inyectada.

El trabajo cron se ejecuta una vez cada minuto. Cuando se ejecute, ejecutará el comando id como root y guardará la salida en ~/project/cron_pwned.txt.

Espera hasta 60 segundos y luego lee el archivo de prueba:

cat /home/labex/project/cron_pwned.txt

Si el exploit funcionó correctamente, verás una salida similar a esta:

uid=0(root) gid=0(root) groups=0(root)

Felicidades. Has secuestrado con éxito un trabajo cron para ejecutar comandos como root.

Resumen

En este laboratorio, aprendiste a identificar y explotar tareas de mantenimiento del sistema mal aseguradas para escalar privilegios en un entorno Linux. Comenzaste enumerando los trabajos cron de todo el sistema para encontrar tareas que se ejecutan como usuario root. Luego, investigaste el script objetivo y descubriste que tenía permisos de archivo débiles, lo que permitía a cualquier usuario modificarlo. Al inyectar una carga útil de reverse shell en el script editable y configurar un listener de Netcat, secuestraste con éxito el proceso automatizado y obtuviste una shell de root. Este ejercicio destaca la importancia crítica de una gestión adecuada de los permisos de archivo, especialmente para los scripts ejecutados por procesos automatizados privilegiados.