NFS no_root_squash/no_all_squash misconfiguration PE
Lese die _ /etc/exports _ Datei. Wenn du ein Verzeichnis findest, das als no_root_squash konfiguriert ist, kannst du darauf zugreifen als Client und in dieses Verzeichnis schreiben, als ob du der lokale root der Maschine wärst.
no_root_squash: Diese Option gibt im Grunde dem root-Benutzer auf dem Client die Berechtigung, Dateien auf dem NFS-Server als root zuzugreifen. Und das kann zu ernsthaften Sicherheitsproblemen führen.
no_all_squash: Dies ist ähnlich wie die Option no_root_squash, gilt jedoch für Nicht-Root-Benutzer. Stell dir vor, du hast eine Shell als Benutzer nobody; hast die /etc/exports Datei überprüft; die Option no_all_squash ist vorhanden; überprüfe die /etc/passwd Datei; emuliere einen Nicht-Root-Benutzer; erstelle eine SUID-Datei als dieser Benutzer (indem du NFS verwendest). Führe die SUID als Benutzer nobody aus und werde ein anderer Benutzer.
Privilegieneskalation
Remote Exploit
Wenn du diese Schwachstelle gefunden hast, kannst du sie ausnutzen:
Montiere dieses Verzeichnis auf einer Client-Maschine und kopiere als root die /bin/bash Binärdatei in den gemounteten Ordner und gib ihr SUID-Rechte, und führe von der Opfer-Maschine diese Bash-Binärdatei aus.
Das Verzeichnis auf einem Client-Rechner einbinden und als root unser kompiliertes Payload, das die SUID-Berechtigung ausnutzt, in den eingebundenen Ordner kopieren, ihm SUID-Rechte geben und von der Opfer-Maschine diese Binärdatei ausführen (hier finden Sie einige C SUID-Payloads).
Lokaler Exploit
Beachten Sie, dass Sie, wenn Sie einen Tunnel von Ihrem Rechner zum Zielrechner erstellen können, die Remote-Version weiterhin verwenden können, um diese Privilegieneskalation durch Tunneln der erforderlichen Ports auszunutzen.
Der folgende Trick gilt, falls die Datei /etc/exports
eine IP angibt. In diesem Fall werden Sie auf keinen Fall die Remote-Exploit verwenden können und müssen diesen Trick ausnutzen.
Eine weitere erforderliche Bedingung, damit der Exploit funktioniert, ist, dass der Export in /etc/export
das insecure
-Flag verwenden muss.
--Ich bin mir nicht sicher, ob dieser Trick funktioniert, wenn /etc/export
eine IP-Adresse angibt--
Grundinformationen
Das Szenario beinhaltet das Ausnutzen eines gemounteten NFS-Teils auf einem lokalen Rechner, wobei eine Schwachstelle in der NFSv3-Spezifikation ausgenutzt wird, die es dem Client ermöglicht, seine uid/gid anzugeben, was potenziell unbefugten Zugriff ermöglicht. Der Exploit 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 Kernelversion Anpassungen erfordern. In diesem speziellen Fall wurden die fallocate-Systemaufrufe auskommentiert. Der Kompilierungsprozess umfasst die folgenden Befehle:
Durchführung des Exploits
Der Exploit besteht darin, ein einfaches C-Programm (pwn.c
) zu erstellen, das die Berechtigungen auf root erhöht und dann eine Shell ausführt. Das Programm wird kompiliert, und die resultierende Binärdatei (a.out
) wird mit suid root auf dem Share platziert, wobei ld_nfs.so
verwendet wird, um die uid in den RPC-Aufrufen zu fälschen:
Kompilieren Sie den Exploit-Code:
Platzieren Sie den Exploit auf dem Share und ändern Sie seine Berechtigungen, indem Sie die uid fälschen:
Führen Sie den Exploit aus, um root-Rechte zu erlangen:
Bonus: NFShell für stealthy Datei-Zugriff
Sobald root-Zugriff erlangt wurde, wird ein Python-Skript (nfsh.py) verwendet, um mit dem NFS-Share zu interagieren, ohne den Besitz zu ändern (um keine Spuren zu hinterlassen). Dieses Skript passt die uid an die des zuzugreifenden Files an, sodass die Interaktion mit Dateien auf dem Share ohne Berechtigungsprobleme möglich ist:
Führen Sie aus wie:
Last updated