NFS no_root_squash/no_all_squash misconfiguration PE
Lesen Sie die Datei _ /etc/exports _, wenn Sie ein Verzeichnis finden, das als no_root_squash konfiguriert ist, können Sie darauf als Client zugreifen und in dieses Verzeichnis schreiben, als wären Sie der lokale root der Maschine.
no_root_squash: Diese Option gibt dem Root-Benutzer auf dem Client die Berechtigung, Dateien auf dem NFS-Server als Root zu öffnen. Dies kann zu schwerwiegenden Sicherheitsproblemen führen.
no_all_squash: Diese Option ist ähnlich wie die Option no_root_squash, gilt jedoch für nicht-root-Benutzer. Stellen Sie sich vor, Sie haben eine Shell als Benutzer "nobody"; überprüfen Sie die Datei /etc/exports; die Option no_all_squash ist vorhanden; überprüfen Sie die Datei /etc/passwd; emulieren Sie einen nicht-root-Benutzer; erstellen Sie eine SUID-Datei als dieser Benutzer (durch Mounten mit NFS). Führen Sie die SUID-Datei als Benutzer "nobody" aus und werden Sie ein anderer Benutzer.
Privilege Escalation
Remote Exploit
Wenn Sie diese Schwachstelle gefunden haben, können Sie sie ausnutzen:
Mounten Sie dieses Verzeichnis auf einer Client-Maschine und kopieren Sie als Root in das gemountete Verzeichnis die Datei /bin/bash und geben Sie ihr SUID-Rechte. Führen Sie dann von der Opfermaschine aus diese Bash-Datei aus.
Das Einhängen dieses Verzeichnisses auf einer Client-Maschine und als Root das Kopieren unserer kompilierten Payload in den eingehängten Ordner, der die SUID-Berechtigung ausnutzt, ihm SUID-Rechte gibt und von der Opfermaschine aus diese Binärdatei ausführt (hier finden Sie einige C SUID-Payloads).
Lokaler Exploit
Beachten Sie, dass Sie, wenn Sie eine Verbindung von Ihrem Gerät zum Opfergerät herstellen können, immer noch die Remote-Version verwenden können, um diesen Privileg-Eskalationsangriff durchzuführen, indem Sie die erforderlichen Ports tunneln.
Der folgende Trick gilt für den Fall, dass die Datei /etc/exports
eine IP-Adresse angibt. In diesem Fall können Sie in keinem Fall den Remote-Exploit verwenden und müssen diesen Trick missbrauchen.
Eine weitere Voraussetzung für das Funktionieren des Exploits ist, dass der Export in /etc/export
die insecure
-Flag verwendet.
--Ich bin mir nicht sicher, ob dieser Trick funktioniert, wenn /etc/export
eine IP-Adresse angibt--
Grundlegende Informationen
Das Szenario beinhaltet die Ausnutzung eines eingebundenen NFS-Shares auf einem lokalen Gerät, wobei eine Schwachstelle in der NFSv3-Spezifikation ausgenutzt wird, die es dem Client ermöglicht, seine uid/gid anzugeben und möglicherweise unbefugten Zugriff zu ermöglichen. Die Ausnutzung beinhaltet die Verwendung von libnfs, einer Bibliothek, die das Fälschen von NFS-RPC-Aufrufen ermöglicht.
Kompilieren der Bibliothek
Die Schritte zur Kompilierung der Bibliothek können je nach Kernel-Version angepasst werden. In diesem speziellen Fall wurden die fallocate-Syscalls auskommentiert. Der Kompilierungsprozess umfasst die folgenden Befehle:
Durchführung des Exploits
Der Exploit beinhaltet das Erstellen eines einfachen C-Programms (pwn.c
), das die Privilegien auf Root-Ebene erhöht und dann eine Shell ausführt. Das Programm wird kompiliert und die resultierende Binärdatei (a.out
) wird auf dem Share mit suid root platziert, wobei ld_nfs.so
verwendet wird, um die uid in den RPC-Aufrufen zu fälschen:
Kompilieren des Exploit-Codes:
Platzieren des Exploits auf dem Share und Ändern der Berechtigungen durch Fälschen der uid:
Ausführen des Exploits, um Root-Privilegien zu erlangen:
Bonus: NFShell für unauffälligen Dateizugriff
Sobald Root-Zugriff erlangt wurde, wird zum Interagieren mit dem NFS-Share ohne Änderung der Besitzverhältnisse (um keine Spuren zu hinterlassen) ein Python-Skript (nfsh.py) verwendet. Dieses Skript passt die uid an, um mit Dateien auf dem Share ohne Berechtigungsprobleme interagieren zu können:
This will translate the English text to German using the OpenAI Translate API. Make sure to replace YOUR_API_KEY
with your actual API key.
Referenzen
Last updated