NFS no_root_squash/no_all_squash misconfiguration PE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lee el _ /etc/exports _ archivo, si encuentras algún directorio que está configurado como no_root_squash, entonces puedes acceder a él como cliente y escribir dentro de ese directorio como si fueras el root local de la máquina.
no_root_squash: Esta opción básicamente le da autoridad al usuario root en el cliente para acceder a archivos en el servidor NFS como root. Y esto puede llevar a serias implicaciones de seguridad.
no_all_squash: Esto es similar a la opción no_root_squash pero se aplica a usuarios no root. Imagina que tienes un shell como el usuario nobody; revisaste el archivo /etc/exports; la opción no_all_squash está presente; revisa el archivo /etc/passwd; emula un usuario no root; crea un archivo suid como ese usuario (montando usando nfs). Ejecuta el suid como el usuario nobody y conviértete en un usuario diferente.
Si has encontrado esta vulnerabilidad, puedes explotarla:
Montando ese directorio en una máquina cliente, y como root copiando dentro de la carpeta montada el /bin/bash binario y dándole derechos SUID, y ejecutando desde la máquina víctima ese binario bash.
Montando ese directorio en una máquina cliente, y como root copiando dentro de la carpeta montada nuestro payload compilado que abusará del permiso SUID, dándole derechos SUID, y ejecutando desde la máquina víctima ese binario (puedes encontrar aquí algunos payloads C SUID).
Nota que si puedes crear un túnel desde tu máquina a la máquina víctima, aún puedes usar la versión Remota para explotar esta escalada de privilegios tunelizando los puertos requeridos.
El siguiente truco es en caso de que el archivo /etc/exports
indique una IP. En este caso no podrás usar en ningún caso el exploit remoto y necesitarás abusar de este truco.
Otro requisito necesario para que el exploit funcione es que la exportación dentro de /etc/export
debe estar usando la bandera insecure
.
--No estoy seguro de que si /etc/export
está indicando una dirección IP, este truco funcionará--
El escenario implica explotar un recurso compartido NFS montado en una máquina local, aprovechando un defecto en la especificación de NFSv3 que permite al cliente especificar su uid/gid, lo que potencialmente habilita el acceso no autorizado. La explotación implica usar libnfs, una biblioteca que permite la falsificación de llamadas RPC de NFS.
Los pasos de compilación de la biblioteca pueden requerir ajustes según la versión del kernel. En este caso específico, las llamadas al sistema fallocate fueron comentadas. El proceso de compilación implica los siguientes comandos:
La explotación implica crear un programa simple en C (pwn.c
) que eleva privilegios a root y luego ejecuta un shell. El programa se compila y el binario resultante (a.out
) se coloca en el recurso compartido con suid root, utilizando ld_nfs.so
para falsificar el uid en las llamadas RPC:
Compilar el código de explotación:
Colocar la explotación en el recurso compartido y modificar sus permisos falsificando el uid:
Ejecutar la explotación para obtener privilegios de root:
Una vez que se obtiene acceso root, para interactuar con el recurso compartido NFS sin cambiar la propiedad (para evitar dejar rastros), se utiliza un script de Python (nfsh.py). Este script ajusta el uid para que coincida con el del archivo que se está accediendo, permitiendo la interacción con archivos en el recurso compartido sin problemas de permisos:
Ejecutar como:
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)