NFS no_root_squash/no_all_squash misconfiguration PE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leggi il _ /etc/exports _ file, se trovi qualche directory configurata come no_root_squash, allora puoi accedervi da client e scrivere dentro quella directory come se fossi il root locale della macchina.
no_root_squash: Questa opzione dà fondamentalmente autorità all'utente root sul client di accedere ai file sul server NFS come root. E questo può portare a gravi implicazioni di sicurezza.
no_all_squash: Questa è simile all'opzione no_root_squash ma si applica agli utenti non-root. Immagina di avere una shell come utente nobody; controlla il file /etc/exports; l'opzione no_all_squash è presente; controlla il file /etc/passwd; emula un utente non-root; crea un file suid come quell'utente (montando usando nfs). Esegui il suid come utente nobody e diventa un utente diverso.
Se hai trovato questa vulnerabilità, puoi sfruttarla:
Montando quella directory in una macchina client, e come root copiando dentro la cartella montata il /bin/bash binario e dandogli diritti SUID, ed eseguendo dalla macchina vittima quel binario bash.
Montare quella directory in una macchina client, e come root copiare all'interno della cartella montata il nostro payload compilato che sfrutterà il permesso SUID, dargli diritti SUID, e eseguire da macchina vittima quel binario (puoi trovare qui alcuni payload C SUID).
Nota che se puoi creare un tunnel dalla tua macchina alla macchina vittima, puoi comunque utilizzare la versione Remota per sfruttare questa escalation di privilegi tunnelando le porte richieste.
Il trucco seguente è nel caso in cui il file /etc/exports
indichi un IP. In questo caso non sarai in grado di utilizzare in alcun modo il remote exploit e dovrai sfruttare questo trucco.
Un altro requisito necessario affinché l'exploit funzioni è che l'export all'interno di /etc/export
deve utilizzare il flag insecure
.
--Non sono sicuro che se /etc/export
indica un indirizzo IP questo trucco funzionerà--
Lo scenario prevede di sfruttare una condivisione NFS montata su una macchina locale, sfruttando un difetto nella specifica NFSv3 che consente al client di specificare il proprio uid/gid, potenzialmente abilitando l'accesso non autorizzato. Lo sfruttamento comporta l'uso di libnfs, una libreria che consente la falsificazione delle chiamate RPC NFS.
I passaggi per la compilazione della libreria potrebbero richiedere aggiustamenti in base alla versione del kernel. In questo caso specifico, le syscalls fallocate sono state commentate. Il processo di compilazione prevede i seguenti comandi:
L'exploit prevede la creazione di un semplice programma C (pwn.c
) che eleva i privilegi a root e poi esegue una shell. Il programma viene compilato e il binario risultante (a.out
) viene posizionato sulla condivisione con suid root, utilizzando ld_nfs.so
per falsificare l'uid nelle chiamate RPC:
Compila il codice dell'exploit:
Posiziona l'exploit sulla condivisione e modifica i suoi permessi falsificando l'uid:
Esegui l'exploit per ottenere privilegi di root:
Una volta ottenuto l'accesso root, per interagire con la condivisione NFS senza cambiare la proprietà (per evitare di lasciare tracce), viene utilizzato uno script Python (nfsh.py). Questo script regola l'uid per corrispondere a quello del file a cui si accede, consentendo l'interazione con i file sulla condivisione senza problemi di permesso:
Esegui come:
Impara e pratica il hacking su AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)