Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
kernel-exploit-factory — تقرير تحليل استغلال ثغرات CVE في Linux kernel وبيئة تصحيح الأخطاء ذات الصلة. لم تعد بحاجة إلى تجميع Linux kernel أو إعداد بيئتك بعد الآن. | Kitploit
أدوات/GitHubGitHub/bsauce/kernel-exploit-factory
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليمموارد منسقةاستغلال الملفات الثنائيةمختبرات وتدريب عملي
GitHubbsauce/kernel-exploit-factory

kernel-exploit-factory

تقرير تحليل استغلال ثغرات CVE في Linux kernel وبيئة تصحيح الأخطاء ذات الصلة. لم تعد بحاجة إلى تجميع Linux kernel أو إعداد بيئتك بعد الآن.

عرض المستودع
1.3k196منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

kernel-exploit-factory

لا يزال قيد التحديث......

تقرير تحليل استغلال ثغرات CVE في نواة Linux وبيئة التصحيح ذات الصلة. لم تعد بحاجة إلى تجميع نواة Linux أو إعداد بيئتك بعد الآن.

يهدف هذا المستودع إلى استخراج جميع استغلالات نواة Linux وبيئة التصحيح ذات الصلة. يمكنك استخدام Qemu لتشغيل النواة واختبار الاستغلال.


مثال```bash

Eg, test CVE-2017-11176, finally you levate privileges and get the shell

john@john-virtual-machine:~/Desktop/kernel-exploit-factory/CVE-2017-11176$ ./start.sh chmod: /dev/csaw: No such file or directory ifconfig: SIOCSIFADDR: No such device route: SIOCADDRT: No such device / $ uname -a Linux (none) 4.11.9 #1 SMP Sat Feb 20 21:52:39 CST 2021 x86_64 GNU/Linux / $ id uid=1000(chal) gid=1000(chal) groups=1000(chal) / $ cd exp /exp $ ./exp-slab-4119 [] sk_rmem_alloc > sk_rcvbuf ==> ok [] mq_notify start [*] wake up thread 1 ... ... /exp # id uid=0(root) gid=0(root) /exp #

root@kitploit:~
---

## الفهرس

1. CVE-2015-8550
2. CVE-2016-9793
3. 4-20-BPF-integer
4. CVE-2017-5123
5. CVE-2017-6074
6. CVE-2017-7308
7. CVE-2017-8890
8. CVE-2017-11176
9. CVE-2017-16995
10. CVE-2017-1000112
11. CVE-2018-5333
12. CVE-2019-9213 & CVE-2019-8956
13. CVE-2019-15666
14. CVE-2020-8835
15. CVE-2020-27194
16. CVE-2021-3156
17. CVE-2021-31440
18. CVE-2021-3490
19. CVE-2021-22555
20. CVE-2021-41073
21. CVE-2021-4154
22. CVE-2021-42008
23. CVE-2021-43267
24. CVE-2022-0185
25. CVE-2022-0847
26. CVE-2022-0995
27. CVE-2022-1015
28. CVE-2022-2588
29. CVE-2022-2602
30. CVE-2022-2639
31. CVE-2022-25636
32. CVE-2022-27666
33. CVE-2022-32250
34. CVE-2022-34918
35. CVE-2023-2598
36. CVE-2024-1086
37. CVE-2025-21702
38. CVE-2026-23271

---

## التفاصيل

#### 1.CVE-2015-8550

[الشرح](https://blog.csdn.net/panhewu9919/article/details/100891770) 

**إصدار الاختبار**: Linux-4.19.65

**الحماية**: تم تفعيل kaslr/SMEP، ولم يتم تفعيل SMAP.

**الثغرة**: ثغرة **Double-Fetch** ناتجة عن تحسينات مترجم gcc، ويمكنها اختطاف تدفق التحكم مباشرة.

#### 2. CVE-2016-9793

[الشرح](https://blog.csdn.net/panhewu9919/article/details/120164051) 

**إصدار الاختبار**: Linux-4.8.13

**الحماية**: لم يتم تفعيل KASLR/SMAP/SMEP. البنية المزيفة [skb_shared_info](https://elixir.bootlin.com/linux/v4.8.13/source/include/linux/skbuff.h#L414) موجودة في مساحة المستخدم، ومن الواضح أنها لا تستطيع تجاوز SMAP.

**الثغرة**: الدالة [sock_setsockopt()](https://elixir.bootlin.com/linux/v4.8.13/source/net/core/sock.c#L658) في `net/core/sock.c` **تعالج القيم السالبة بشكل خاطئ**، مما يؤدي إلى أن تصبح قيمة `sk_sndbuf` و `sk_rcvbuf` سالبة. عند استدعاء `write` يتم تعيين `skb->head` و `skb->end` بشكل خاطئ، وعند استدعاء `close` للتحرير يحدث خطأ عند الوصول إلى مساحة المستخدم. يتم تزوير بنية [skb_shared_info](https://elixir.bootlin.com/linux/v4.8.13/source/include/linux/skbuff.h#L414) عند العنوان `0xfffffed0` في مساحة المستخدم، ويتم اختطاف تدفق التحكم عبر `skb_shared_info->destructor_arg->callback`.

#### 3. 4-20-BPF-integer

[الشرح](https://www.cnblogs.com/bsauce/p/11560224.html) 

**إصدار الاختبار**: Linux-4.20.0-rc3

**الحماية**: تم تفعيل SMEP، ولم يتم تفعيل kaslr/SMAP.

**الثغرة**: ثغرة **فيضان عددي صحيح** في `queue_stack_map_alloc()` في وحدة ebpf في Linux، مما يؤدي إلى تجاوز سعة الكومة. يتم تعديل مؤشر الجدول الافتراضي لاختطاف تدفق التحكم إلى `xchg eax, esp`.

#### 4.CVE-2017-5123

[الشرح](https://www.jianshu.com/p/90a040114188) 

**إصدار الاختبار**: Linux 4.14-rc4

**الحماية**: تم تفعيل SMEP / SMAP، وإيقاف KASLR.

**الثغرة**: تنفيذ `waitid` في `/kernel/exit.c`، عند استدعاء `unsafe_put_user()` لنسخ بيانات من النواة إلى عنوان في مساحة المستخدم، لا يتم استدعاء `access_ok()` للتحقق من صحة عنوان مساحة المستخدم، مما يسمح فعليًا بنسخ البيانات إلى عنوان في مساحة النواة. **عدم فحص waitid لصحة عنوان المستخدم يؤدي إلى كتابة عشوائية عند العنوان null**. يمكن تنفيذ شيل كود في العنوان 0 أو الكتابة فوق cred في نطاق تخميني لرفع الصلاحيات.

#### 5.CVE-2017-6074

[الشرح](https://bsauce.github.io/2021/09/17/CVE-2017-6074/)      [المرجع](https://github.com/xairy/kernel-exploits/tree/master/CVE-2017-6074)

**إصدار الاختبار**: Linux-4.9.12

**الحماية**: تم تفعيل SMEP/SMAP، وإيقاف kASLR.

**الثغرة**: بروتوكول DCCP (بروتوكول التحكم في الازدحام لحزم البيانات) في عائلة بروتوكولات IP V6 في نواة Linux، الدالة [dccp_rcv_state_process()](https://elixir.bootlin.com/linux/v4.9.12/source/net/dccp/input.c#L574) في `net/dccp/input.c`، تتعامل بشكل خاطئ مع بنية بيانات حزمة `DCCP_PKT_REQUEST` في حالة `LISTEN`، وعند استخدام المستخدم لخيار `IPV6_RECVPKTINFO` واستدعاء `setsockopt()` يتم تشغيل **Double-Free لبنية `sk_buff`**. طريقة الاستغلال مشابهة لـ CVE-2016-8655. عند أول تشغيل للثغرة، يتم رش الكومة لتزوير بنية `po->rx_ring->prb_bdqc->retire_blk_timer` وتنفيذ `native_write_cr4(0x406e0)` لتعطيل SMEP/SMAP؛ وعند التشغيل الثاني للثغرة، يتم رش الكومة لتزوير بنية `skb-> ... ->destructor_arg` وتنفيذ `commit_creds(prepare_kernel_cred(0))` لرفع الصلاحيات.

#### 6.CVE-2017-7308

[الشرح](https://www.jianshu.com/p/b53862cd64a6)      [المرجع](https://github.com/xairy/kernel-exploits/tree/master/CVE-2017-7308)

**إصدار الاختبار**: Linux-4.10.6

**الحماية**: تم تفعيل SMEP / SMAP، وإيقاف KASLR.

**الثغرة**: الدالة [`packet_set_ring()`](https://elixir.bootlin.com/linux/v4.10.6/source/net/packet/af_packet.c#L4181) في `net/packet/af_packet.c` لا تتحقق بشكل صحيح من حجم الكتلة، وشروط التحقق من الطول خاطئة، مما يؤدي إلى **تجاوز سعة الكومة**، ويتطلب صلاحية `CAP_NET_RAW`. يتم اختطاف مؤشر دالة مرتين، أولاً لتعطيل حماية SMEP/SMAP، ثم لرفع الصلاحيات.

#### 7.CVE-2017-8890

[الشرح](https://www.jianshu.com/p/699de662f567)      [المرجع](https://xz.aliyun.com/t/2383)

**إصدار الاختبار**: Linux-4.10.15

**الحماية**: تم تفعيل SMEP، وإيقاف kASLR وSMAP.

**الثغرة**: الدالة [`inet_csk_clone_lock()`](https://elixir.bootlin.com/linux/v4.10.15/source/net/ipv4/inet_connection_sock.c#L652) في ملف `net/ipv4/inet_connection_sock.c` تحتوي على ثغرة **Double-Free**. يتم استغلال Double-Free لتعديل مؤشر دالة الاستدعاء الراجع الخاص بـ RCU، وتعطيل SMEP والقفز إلى شيل كود لتعديل cred.

#### 8.CVE-2017-11176

[الشرح](https://www.jianshu.com/p/76041ec5c59f) 

**إصدار الاختبار**: Linux-4.11.9

**الحماية**: تم تفعيل SMEP، وإيقاف kASLR وSMAP.

**الثغرة**: في تنفيذ قوائم رسائل POSIX في نواة Linux، الدالة `mq_notify()` لا تقوم بتعيين مؤشر sock إلى null، مما يؤدي إلى UAF. في الواقع هو **ثغرة Double-Free ناتجة عن سباق**، لكن يمكن تمديد مدة السباق إلى ما لا نهاية.

#### 9.CVE-2017-16995

[الشرح](https://www.cnblogs.com/bsauce/p/11583310.html) 

**إصدار الاختبار**: Linux-4.4.110

**الحماية**: تم تفعيل SMEP/SMAP/kaslr.

**الثغرة**: مشكلة **توسيع الأعداد الصحيحة** في وحدة ebpf في Linux، والمشكلة الرئيسية هي اختلاف نوع قيم السجلين، مما يؤدي إلى عدم تطابق طريقة التنفيذ بين دالة الفحص والدالة الفعلية. لا تتضمن هذه الثغرة هجومًا على المكدس أو اختطاف تدفق التحكم، بل تستخدم فقط بيانات استدعاءات النظام لرفع الصلاحيات، وهي تطبيق نموذجي للهجمات الموجهة بالبيانات على نواة Linux.

#### 10. CVE-2017-1000112

[الشرح](https://www.jianshu.com/p/1fa163fd5b82)  	  [المرجع](https://bbs.pediy.com/thread-265319.htm)

**إصدار الاختبار**: Linux-4.12.6

**الحماية**: تم تفعيل SMEP، وإيقاف SMAP/kaslr.

**الثغرة**: الدالة [__ip_append_data()](https://elixir.bootlin.com/linux/v4.12.6/source/net/ipv4/ip_output.c#L910) في `net/ipv4/ip_output.c` لا تضمن اتساق معالجة حزم UDP، مما يؤدي إلى إمكانية التحول من مسار UFO إلى مسار non-UFO عند إرسال حزمتين، مما يسبب **تجاوز سعة الكومة**. يمكن عند الاستغلال الكتابة فوق `skb_shared_info->destructor_arg->callback` لاختطاف تدفق التحكم.

#### 11. CVE-2018-5333

[الشرح](https://blog.csdn.net/panhewu9919/article/details/119153052)  

**إصدار الاختبار**: Linux-4.14.13

**الحماية**: تم تفعيل SMEP، وإيقاف SMAP/kaslr.

**الثغرة**: في الدالة [`rds_cmsg_atomic()`](https://elixir.bootlin.com/linux/v4.14.13/source/net/rds/rdma.c#L788) في `net/rds/rdma.c`، نسيان تعيين `rm->atomic.op_active` إلى 0، مما يؤدي إلى حدوث **ثغرة `null-dereference`** عندما يستدعي [rds_atomic_free_op()](https://elixir.bootlin.com/linux/v4.14.13/source/net/rds/rdma.c#L474) -> [set_page_dirty()](https://elixir.bootlin.com/linux/v4.14.13/source/mm/page-writeback.c#L2559) مرجعًا `page->page_link`. يتم تزوير بنية ومؤشر دالة في العنوان 0 لاختطاف تدفق التحكم.

#### 12. CVE-2019-9213 & CVE-2019-8956

[شرح CVE-2019-9213](https://blog.csdn.net/panhewu9919/article/details/118557802)    [شرح CVE-2019-8956](https://blog.csdn.net/panhewu9919/article/details/118557844)    

**إصدار الاختبار**: Linux-4.20.0 32-bit

**الحماية**: تم تفعيل SMEP، وإيقاف SMAP/kaslr.

**الثغرة**: 

- CVE-2019-9213: الدالة [`expand_downwards()`](https://elixir.bootlin.com/linux/v4.20.7/source/mm/mmap.c#L2413) في `mm/mmap.c` ترتكب خطأ في التحقق من العنوان الأدنى لـ mmap، وتقوم بفحص صلاحيات لمهمة خاطئة، مما يؤدي إلى تجاوز قيود `mmap_min_addr`، وهي **ثغرة منطقية**. باستخدام الأمر `LD_DEBUG=help /bin/su 1>&%d` لتنفيذ عملية كتابة، كان من المفترض أن يتم فحص cred الخاصة بـ exp، لكن النواة فحصت بالخطأ cred الخاصة بعملية الكتابة، مما سمح بوضع علامة الوصول الخاص بالامتيازات على العنوان المنخفض. فقط أنظمة 32-bit يمكنها استغلال هذه الثغرة بنجاح، والسبب غير معروف.
- CVE-2019-8956: الدالة [`sctp_sendmsg()`](https://elixir.bootlin.com/linux/v4.20.7/source/net/sctp/socket.c#L2025) في `net/sctp/socket.c` تحتوي على ثغرة **إشارة لمؤشر فارغ** عند معالجة علم `SCTP_SENDALL`. بالاقتران مع CVE-2019-9213، يمكن تجاوز قيود `mmap_min_addr` وتنفيذ mmap إلى العنوان المنخفض 0xd4 وتزوير بنية، ثم اختطاف تدفق التحكم.

#### 13. CVE-2019-15666

[الشرح](https://bsauce.github.io/2021/09/14/CVE-2019-15666/)  	  [المرجع](https://github.com/riskeco/Lucky/blob/master/lucky0_RE.c)

**إصدار الاختبار**: Ubuntu 18.04 (4.15.0-20-generic #21)

**الحماية**: تم تفعيل SMEP/SMAP/kaslr.

**الثغرة**: الدالة [verify_newpolicy_info()](https://elixir.bootlin.com/linux/v5.0.18/source/net/xfrm/xfrm_user.c#L1379) في `net/xfrm/xfrm_user.c` تتعامل بشكل خاطئ مع التحقق من `dir`، مما يؤدي إلى **وصول خارج النطاق** في [__xfrm_policy_unlink()](https://elixir.bootlin.com/linux/v5.0.18/source/net/xfrm/xfrm_policy.c#L2202). الثغرة في الأصل هي إنقاص بمقدار 1 خارج النطاق، ويمكن استخدام مسارات أخرى لبناء UAF، ويمكن **كتابة null بمقدار 8 بايت على كتلة فارغة**. كائن الثغرة `xfrm_policy` يوجد في `kmalloc-1024`، وبنية cred في `kmalloc-192`. أولاً يتم استخدام `setxattr+userfaultfd` لرش كتل `kmalloc-1024` حول `policy0`، وبعد تحرير `policy0` يتم تحرير الكتل المروشة معًا، مما يدفع إلى إعادة استخدام تلك الصفحة بواسطة cred الخاصة بالعملية الفرعية c، ثم يتم تشغيل UAF وكتابة null بمقدار 8 بايت على الكتلة الفارغة لتعديل `gid/suid` في cred، ثم إضافة المستخدم الحالي إلى sudoers، وبذلك يتم رفع الصلاحيات.

#### 14. CVE-2020-8835

[الشرح](https://www.cnblogs.com/bsauce/p/14123111.html)  	  [المرجع](https://xz.aliyun.com/t/7690)

**إصدار الاختبار**: Linux-5.5.0

**الحماية**: تم تفعيل SMEP/SMAP/kaslr.

**الثغرة**: في kernel/bpf/verifier.c لم يتم تحويل القيمة 64-bit إلى 32-bit بشكل صحيح (يتم أخذ الـ 32 بت السفلية مباشرة)، مما يسبب **اقتطاعًا عدديًا**، مما يجعل مرحلة التحقق من كود BPF غير متوافقة مع مرحلة التنفيذ الفعلية، وبالتالي يؤدي إلى قراءة وكتابة خارج النطاق.

#### 15. CVE-2020-27194

[الشرح](https://www.jianshu.com/p/b6f11d8df37a)       [المرجع](https://github.com/willinin/CVE-2020-27194-exp)

**إصدار الاختبار**: Linux-5.8.14

**الحماية**: تم تفعيل SMEP/SMAP/kaslr.

**الثغرة**: عند إجراء عملية or في برنامج التحقق من eBPF، تقوم الدالة `scalar32_min_max_or()` بتعيين قيمة 64-bit إلى متغير 32-bit، مما يؤدي إلى **اقتطاع عددي**، وبالتالي حساب نطاق السجل بشكل خاطئ، مما يتجاوز فحص bpf ويؤدي إلى قراءة وكتابة خارج النطاق.

#### 16. CVE-2021-3156

[الشرح](https://www.jianshu.com/p/18f36f1342b3)       [الاستغلال](https://github.com/blasty/CVE-2021-3156)

**إصدار الاختبار**: Ubuntu 19.04، Sudo 1.8.27

**الحماية**: تم تفعيل SMEP/SMAP/kaslr.

**الثغرة**: عند معالجة sudo لوسائط سطر الأوامر، يحدث خطأ منطقي عند معالجة الأمر المنتهي بشرطة مائلة عكسية واحدة، مما يؤدي إلى **تجاوز سعة الكومة**.

#### 17. CVE-2021-31440

[الشرح](https://bsauce.github.io/2021/06/09/CVE-2021-31440/)      [الاستغلال](https://github.com/bsauce/kernel-exploit-factory/tree/main/CVE-2021-31440/exp)

**إصدار الاختبار**: Linux-5.11

**الحماية**: تم تفعيل SMEP/SMAP/kaslr.

**الثغرة**: في وحدة eBPF - الدالة [`__reg_combine_64_into_32()`](https://elixir.bootlin.com/linux/v5.11.20/source/kernel/bpf/verifier.c#L1312) في `kernel/bpf/verifier.c`، خطأ في حساب السجلات. باستخدام عدم التوافق بين مرحلة التحقق ومرحلة التنفيذ الفعلية، يتم إجراء قراءة وكتابة خارج النطاق. بعد تسريب العنوان الأساسي للنواة وتزوير جدول دوال وتحقيق قراءة/كتابة عشوائية، يتم تعديل cred الخاصة بالخيط الحالي.

#### 18. CVE-2021-3490

[الشرح](https://bsauce.github.io/2021/08/31/CVE-2021-3490/)      [الاستغلال](https://github.com/chompie1337/Linux_LPE_eBPF_CVE-2021-3490)

**إصدار الاختبار**: Linux-5.11  Linux-5.11.16

**الحماية**: تم تفعيل SMEP/SMAP/kaslr.

**الثغرة**: في وحدة eBPF - تتبع حدود ALU32 لعمليات البت (AND وOR وXOR) في `kernel/bpf/verifier.c` لا يقوم بتحديث الحدود 32-bit بشكل صحيح، مما يسبب قراءة وكتابة خارج النطاق في نواة Linux، وبالتالي تنفيذ كود عشوائي. الدوال الثلاث المصابة هي [scalar32_min_max_and()](https://elixir.bootlin.com/linux/v5.13-rc3/source/kernel/bpf/verifier.c#L7078) و[scalar32_min_max_or()](https://elixir.bootlin.com/linux/v5.13-rc3/source/kernel/bpf/verifier.c#L7149) و[scalar32_min_max_xor()](https://elixir.bootlin.com/linux/v5.13-rc3/source/kernel/bpf/verifier.c#L7219). باستخدام عدم التوافق بين مرحلة التحقق ومرحلة التنفيذ الفعلية، يتم إجراء قراءة وكتابة خارج النطاق. بعد تسريب العنوان الأساسي للنواة وتزوير جدول دوال وتحقيق قراءة/كتابة عشوائية، يتم تعديل cred الخاصة بالخيط الحالي.

#### 19. CVE-2021-22555

[الشرح](https://bsauce.github.io/2021/09/23/CVE-2021-22555/)      [الاستغلال](https://github.com/google/security-research/blob/master/pocs/linux/cve-2021-22555/exploit.c)

**إصدار الاختبار**: Linux-5.11.14

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: في الوحدة الفرعية `ip_tables` من وحدة `Netfilter` في `net/netfilter/x_tables.c`، عند استدعاء `setsockopt()` مع الخيار `IPT_SO_SET_REPLACE` (أو `IP6T_SO_SET_REPLACE`)، يلزم تحويل بنية النواة من 32-bit إلى 64-bit، وبسبب خطأ في حساب حجم التحويل، يحدث عند استدعاء الدالة [xt_compat_match_from_user()](https://elixir.bootlin.com/linux/v5.11.14/source/net/netfilter/x_tables.c#L731) **تجاوز سعة كومة بكتابة 0، يمكن تحويله إلى UAF**. يمكن للمهاجم استخدامه لرفع الصلاحيات، أو الهروب من حاويات docker و k8s ([kubernetes](https://zhuanlan.zhihu.com/p/29232090)). يتطلب صلاحية `CAP_NET_ADMIN`، أو دعم مساحات أسماء `user+network`.

#### 20. CVE-2021-41073

[الشرح](https://bsauce.github.io/2022/07/11/CVE-2021-41073/)      [المرجع](https://www.graplsecurity.com/post/iou-ring-exploiting-the-linux-kernel)

**إصدار الاختبار**: Linux-5.14.6

**الحماية**: تم تفعيل KASLR/SMEP/SMAP. لم يتم تفعيل `CONFIG_SLAB_FREELIST_RANDOM` / `CONFIG_SLAB_FREELIST_HARDENED` / `CONFIG_BPF_JIT_ALWAYS_ON` / `CONFIG_MEMCG` (وهي مفعلة افتراضيًا).

**الثغرة**: الدالة `loop_rw_iter()` في `fs/io_uring.c` تحتوي على ثغرة **type confusion**، حيث يعمل `io_kiocb->rw.addr` كعنوان للنواة وعنوان للمستخدم في نفس الوقت، ولكن عند زيادته في `loop_rw_iter()` لا يتم التمييز بينهما، مما يؤدي إلى زيادة العنوان الخاطئ عند قراءة ملف، وفي النهاية **تحرير buffer مجاور بشكل خاطئ عند إزاحة يمكن التحكم بها** (kmalloc-32). شروط الاستغلال صارمة جدًا، نظرًا لأن كائن الثغرة يقع في kmalloc-32، يتم تعطيل آلية حماية freelist؛ وبما أن كائن `seq_operations` يُخصص باستخدام علم `GFP_KERNEL_ACCOUNT`، يتم أيضًا تعطيل آلية `CONFIG_MEMCG*`؛ يستخدم هذا الاستغلال تعديل مؤشر `sk_filter->prog` في eBPF وتزوير برنامج BPF لرفع الصلاحيات، لذلك يتم أيضًا تعطيل خيار `CONFIG_BPF_JIT_ALWAYS_ON`.

#### 21. CVE-2021-4154

[الشرح](https://bsauce.github.io/2022/10/17/CVE-2021-4154/)      [المرجع](https://github.com/Markakd/DirtyCred)

**إصدار الاختبار**: Linux-5.13.3

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: الدالة [cgroup1_parse_param()](https://elixir.bootlin.com/linux/v5.13.3/source/kernel/cgroup/cgroup-v1.c#L905) في `kernel/cgroup/cgroup-v1.c` (التي تُستدعى عبر استدعاء النظام `fsconfig`) تحتوي على خلط أنواع، مما يؤدي إلى ثغرة **UAF**. يمكن استدعاء syscall `fsconfig` لتعيين أي fd، وفي النهاية عند إغلاق هذا الملف يتم تحرير كائن `file` المقابل للـ fd. بهذه الطريقة يمكننا **تحرير بنية `file` المقابلة لأي واصف ملف**. تستخدم هذه المقالة طريقتين للاستغلال، الأولى هي DirtyCred، والثانية هي بناء ROP. بمقارنة الطريقتين، ميزة طريقة DirtyCred هي أنها عامة عبر إصدارات النواة ولا تحتاج إلى تكييف، وعيبها أنها تحتاج إلى الكتابة فوق ملف مميز لرفع الصلاحيات، لذلك لا يمكن رفع الصلاحيات داخل حاويات مثل docker؛ ميزة ROP هي القدرة على القراءة والكتابة العشوائية لذاكرة النواة وتنفيذ كود عشوائي، وعيبها أن تكييفها مع إصدارات النواة المختلفة مزعج للغاية.

#### 22. CVE-2021-42008

[الشرح](https://bsauce.github.io/2021/12/09/CVE-2021-42008/)      [المرجع](https://syst3mfailure.io/sixpack-slab-out-of-bounds)

**إصدار الاختبار**: Linux-5.13.12

**الحماية**: تم تفعيل KASLR / SMEP / SMAP / PTI.

**الثغرة**: الدالة [decode_data()](https://elixir.bootlin.com/linux/v5.13.12/source/drivers/net/hamradio/6pack.c#L826) في `drivers/net/hamradio/6pack.c` تحتوي على **تجاوز سعة كومة**، ويحتاج المستخدم إلى صلاحية `CAP_NET_ADMIN`. يمكن لـ [sixpack_decode()](https://elixir.bootlin.com/linux/v5.13.12/source/drivers/net/hamradio/6pack.c#L962) استدعاء [decode_data()](https://elixir.bootlin.com/linux/v5.13.12/source/drivers/net/hamradio/6pack.c#L826) عدة مرات، لفك تشفير الإدخال وحفظه في [sixpack->cooked_buf](https://elixir.bootlin.com/linux/v5.13.12/source/drivers/net/hamradio/6pack.c#L98)، ويعمل العضو `sixpack->rx_count_cooked` كمؤشر للوصول إلى `sixpack->cooked_buf`، حيث يحدد الإزاحة الهدف لكتابة البايتات المفكوكة. المشكلة هي أنه إذا تم استدعاء `decode_data()` عدة مرات، فإن `rx_count_cooked` يستمر في الزيادة حتى يتجاوز طول `cooked_buf` (400 بايت)، مما يؤدي إلى كتابة خارج النطاق. بالرجوع إلى [استخدام بنية msg_msg في نواة Linux لتحقيق قراءة وكتابة عشوائية](https://www.anquanke.com/post/id/252558) يتم بناء قراءة خارج النطاق وكتابة إلى عنوان عشوائي، وتعديل `modprobe_path` لرفع الصلاحيات، لكن العيب هو الحاجة إلى استخدام `userfaultfd`، ولا يمكن تجاوز شرط `CAP_NET_ADMIN`.

#### 23. CVE-2021-43267

[الشرح](https://bsauce.github.io/2021/12/06/CVE-2021-43267/)      [المرجع](https://haxx.in/posts/pwning-tipc/)

**إصدار الاختبار**: Linux-5.14.15

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: تقع الثغرة في ملف `net/tipc/crypto.c`، في بروتوكول TIPC (بروتوكول الاتصال الشفاف بين العمليات) داخل المجموعة، يوجد خطأ في التحقق من طول رسائل نوع `MSG_CRYPTO`، مما يؤدي إلى **تجاوز سعة كومة**. في الدالة [tipc_crypto_key_rcv()](https://elixir.bootlin.com/linux/v5.14.15/source/net/tipc/crypto.c#L2281)، يشير جزء البيانات من رسالة TIPC (بنية [tipc_msg](https://elixir.bootlin.com/linux/v5.14.15/source/net/tipc/msg.h#L148)) إلى رسالة `MSG_CRYPTO` (بنية [tipc_aead_key](https://elixir.bootlin.com/linux/v5.14.15/source/include/uapi/linux/tipc.h#L241))، وعند تخصيص مساحة `tipc_aead_key` ونسخ `tipc_aead_key->key`، لا يتم التحقق من صحة `tipc_aead_key->keylen`، مما يؤدي إلى نسخ خارج الحدود. يتم فقط التحقق من `header size` و `msg size` لرسالة TIPC، ولكن لا يتم التحقق من `tipc_aead_key->keylen` في رسالة `MSG_CRYPTO`. باستخدام **كائن مرن** يتم تسريب العنوان الأساسي للنواة، وتعديل `tty_struct->tty_operations.ioctl` ليشير إلى gadget كتابة عشوائية (`mov   QWORD PTR [rdx],rsi`)، وتعديل `modprobe_path` لرفع الصلاحيات.

#### 24. CVE-2022-0185

[الشرح](https://bsauce.github.io/2022/04/08/CVE-2022-0185/)  

**إصدار الاختبار**: Linux-5.11.22

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: تم رفع الصلاحيات على google kctf والفوز بـ 30 ألف دولار. توجد **ثغرة فيضان عددي صحيح** في وحدة `File System Context` في النواة، في ملف `fs/fs_context.c`، مما يؤدي إلى تجاوز سعة الكومة. يجب أن يمتلك المهاجم صلاحية `CAP_SYS_ADMIN`، أو استخدام مساحات الأسماء أو استخدام `unshare(CLONE_NEWNS|CLONE_NEWUSER)` (أي ما يعادل الأمر `$ unshare -Urm`) للدخول إلى مساحة أسماء تحتوي على صلاحية `CAP_SYS_ADMIN`. هناك طريقتان للاستغلال، الأولى هي استخدام **FUSE** (المكافئ لـ userfault) لبناء كتابة في أي عنوان وتعديل `modprobe_path`، والثانية هي استخدام `msg_msg` لبناء تحرير عشوائي ثم بناء ROP لرفع الصلاحيات.

#### 25. CVE-2022-0847

[الشرح](https://bsauce.github.io/2022/04/03/CVE-2022-0847/)      المرجع-[1](https://blog.csdn.net/Breeze_CAT/article/details/123393188) [2](https://www.anquanke.com/post/id/269886) [3](https://www.freebuf.com/vuls/324700.html)

**إصدار الاختبار**: Linux-5.16.10

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: **ثغرة DirtyPipe**. عند استدعاء `splice` لربط ذاكرة التخزين المؤقت للصفحات الخاصة بملف إلى المخزن المؤقت الحلقي للأنبوب [pipe_buffer](https://elixir.bootlin.com/linux/v5.16.10/source/include/linux/pipe_fs_i.h#L26)، فإن الدالتين [copy_page_to_iter_pipe()](https://elixir.bootlin.com/linux/v5.16.10/source/lib/iov_iter.c#L384) و [push_pipe()](https://elixir.bootlin.com/linux/v5.16.10/source/lib/iov_iter.c#L547) لا تقومان بتهيئة العضو `flag` في [pipe_buffer](https://elixir.bootlin.com/linux/v5.16.10/source/include/linux/pipe_fs_i.h#L26) (ثغرة متغير غير مهيأ). نظرًا لعدم مسح خاصية `PIPE_BUF_FLAG_CAN_MERGE`، فإن استدعاء `pipe_write()` لاحقًا يعتقد خطأً أن عملية الكتابة يمكن دمجها، وبالتالي تتم كتابة بيانات غير قانونية في ذاكرة التخزين المؤقت للصفحات الخاصة بالملف (يمكن استعادتها بعد إعادة التشغيل)، مما يؤدي إلى ثغرة الكتابة فوق أي ملف. هذه الثغرة يمكنها كتابة page cache لأي ملف، وطريقة رفع الصلاحيات هي تعديل page cache لملف `/etc/passwd`، ففي فترة قصيرة ستصل جميع العمليات التي تصل إلى هذا الملف إلى صفحة ذاكرة التخزين المؤقت المعدلة.

#### 26. CVE-2022-0995

[الشرح](https://bsauce.github.io/2022/04/15/CVE-2022-0995/)     

**إصدار الاختبار**: Linux-5.11.22

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: يوجد **تجاوز سعة كومة** في نظام إشعارات الأحداث `watch_queue`، والدالة المصابة هي [watch_queue_set_filter()](https://elixir.bootlin.com/linux/v5.16.14/source/kernel/watch_queue.c#L286). تقوم النواة بإجراء فحصين للصحة على عامل التصفية من نوع [watch_notification_type_filter](https://elixir.bootlin.com/linux/v5.16.14/source/include/uapi/linux/watch_queue.h#L52) القادم من المستخدم، الفحص الأول لتحديد حجم الذاكرة المخصصة، والفحص الثاني لتخزين filter المستخدم في تلك الذاكرة. لكن الفحصين غير متطابقين، مما يؤدي إلى تخصيص مساحة صغيرة جدًا، مما يسمح بفيض وتخزين عدد أكبر من عوامل التصفية. يمكن استغلال الفيض الثاني لتعيين بت معين في كتلة مجاورة، وطريقة الاستغلال التالية هي نفسها كما في [CVE-2021-22555](https://bsauce.github.io/2021/09/23/CVE-2021-22555/).

#### 27. CVE-2022-1015

[الشرح](https://bsauce.github.io/2022/07/16/CVE-2022-1015/)      [المرجع](https://blog.dbouman.nl/2022/04/02/How-The-Tables-Have-Turned-CVE-2022-1015-1016/)

**إصدار الاختبار**: Linux-5.17

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: في وحدة nftables، الدالتان [nft_parse_register_load()](https://elixir.bootlin.com/linux/v5.17/source/net/netfilter/nf_tables_api.c#L9325) و [nft_parse_register_store()](https://elixir.bootlin.com/linux/v5.17/source/net/netfilter/nf_tables_api.c#L9377) لا تحدّدان نطاق فهرس السجل المدخل، مما يؤدي إلى فيضان عددي صحيح (يمكنه تجاوز فحص النطاق)، وبالتالي **تجاوز سعة المكدس مع قراءة وكتابة خارج النطاق**. عند الاستغلال، يجب العودة من سياق المقاطعة إلى وضع المستخدم، باستخدام نهاية الدالة `__do_softirq()` للعودة بشكل مثالي إلى سياق استدعاء النظام، ثم استدعاء `switch_task_namespaces(current, &init_nsproxy)` و `commit_cred(&init_cred)` لرفع الصلاحيات.

#### 28. CVE-2022-2588

[الشرح](https://bsauce.github.io/2022/10/21/CVE-2022-2588/)      [المرجع](https://github.com/Markakd/CVE-2022-2588)

**إصدار الاختبار**: Linux-5.19.1

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: مشابهة لـ [CVE-2021-3715](https://access.redhat.com/security/cve/cve-2021-3715) (انظر [BlackHat 2021-Europe-Your Trash Kernel Bug, My Precious 0-day](https://zplin.me/talks/BHEU21_trash_kernel_bug.pdf) الصفحة 16)، حيث أن شروط الفحص عند إزالة كائن `route4_filter` من القائمة المرتبطة وتحريره غير متطابقة، مما يؤدي إلى بقاء الكائن في القائمة بعد تحريره، ويمكن لاحقًا تشغيل **Double-Free**. يتطلب وجود `User Namespaces` لتشغيله. يتم استخدام طريقة **DirtCred** لرفع الصلاحيات.

#### 29. CVE-2022-2602

[الشرح](https://bsauce.github.io/2022/06/08/CVE-2022-2602/)      [المرجع](https://1day.dev/notes/CVE-2022-2602-DirtyCred-File-Exploitation-applied-on-an-io_uring-UAF/)

**إصدار الاختبار**: Linux-5.18.19

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: يوجد في مكوّن io_uring وظيفة `IORING_REGISTER_FILES`، تسمح بوضع ملف في قائمة `sock->receive_queue` الخاصة بـ io_uring. وآلية جمع القمامة GC في Linux (التي تعالج فقط العدادات الطائرة لملفات io_uring وsock) قد تقوم بتحرير الملفات المسجلة في io_uring باعتبارها قمامة، وعندما يستخدم io_uring هذا الملف في المرة القادمة (استخدام writev لكتابة ملف، أي وظيفة `IORING_OP_WRITEV`) يتم تشغيل ثغرة **UAF**. طريقة الاستغلال: بما أن آلية GC في UNIX تقوم بتحرير بنية ملف ما زالت قيد الاستخدام في `io_uring` بشكل خاطئ (يتم كتابة بيانات ضارة إلى الملف العادي `"/tmp/rwA"`)، يمكن **اعتماد طريقة DirtyCred**، بفتح عدد كبير من ملفات `"/etc/passwd"` والكتابة فوق بنية `file` المحررة للتو، بحيث تتم في النهاية كتابة البيانات الضارة فعليًا إلى ملف `"/etc/passwd"`.

#### 30. CVE-2022-2639

[الشرح](https://bsauce.github.io/2022/11/24/CVE-2022-2639/)      [المرجع](https://veritas501.github.io/2022_10_18-CVE-2022-2639%20%20openvswitch%20LPE%20%20%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/)

**إصدار الاختبار**: Linux-5.17.4

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: في وحدة نواة `openvswitch`، توجد في [reserve_sfa_size()](https://elixir.bootlin.com/linux/v5.17.4/source/net/openvswitch/flow_netlink.c#L2439) ثغرة فيضان عددي صحيح تؤدي إلى **تجاوز سعة كومة kmalloc-0x10000 مع كتابة**، ويتطلب استخدام رش الصفحات لبناء تجاوز cross-cache. تعتمد هذه المقالة على `pipe-primitive` لتعديل أي ملف، لذلك لا تحتاج إلى تجاوز آليات الحماية KASLR/SMEP/SMAP/KPTI، ويمكن إكمال الاستغلال عبر الإصدارات دون تكييف. **أولاً يتم إنشاء pipe وتنفيذ splice إلى الملف للقراءة فقط `/usr/bin/mount`، ثم رش الكومة لتزوير `pipe_buffer->flags = PIPE_BUF_FLAG_CAN_MERGE`، وبالتالي يمكن كتابة suid-shell إلى ملف `/usr/bin/mount` ثم تنفيذه لرفع الصلاحيات**. يتم تشغيل OOB مرتين، الأولى هي الفيض لتعديل `msg_msg->m_ts` وقراءة `msg_msg->m_list.next` المجاور خارج النطاق **لتسريب عنوان كومة kmalloc-1024**؛ والثانية هي الفيض لتعديل `msg_msg->m_list.next` ليشير إلى عنوان كومة kmalloc-1024 المسرب، **لبناء تحرير عشوائي**.

#### 31. CVE-2022-25636

[الشرح](https://bsauce.github.io/2022/12/13/CVE-2022-25636/)      [المرجع](https://github.com/Bonfee/CVE-2022-25636)

**إصدار الاختبار**: Linux-5.13.19

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: في وحدة `nf_table`، الدالة [nft_fwd_dup_netdev_offload()](https://elixir.bootlin.com/linux/v5.16.11/source/net/netfilter/nf_dup_netdev.c#L67) في `net/netfilter/nf_dup_netdev.c` تحتوي على **كتابة خارج النطاق (OOB write)** بسبب عدم تطابق شروط الحكم عند حساب المساحة المخصصة والتهيئة الفعلية (يجب أن يدعم النظام معالجة حزم التفريغ - Network Interface Cards (NICs)، لكن هذا نادر في الواقع)، **تتم كتابة عنوان كائن `net_device` (الموجود في kmalloc-4k) خارج النطاق**، ويمكن أن يتغير حجم الكائن المصاب (يتحدد بعدد القواعد التي تحمل علامة `NFT_OFFLOAD_F_ACTION` المُدخلة، ويمكن أن يكون في `kmalloc-128` أو `kmalloc-192` وما إلى ذلك)، ويتطلب صلاحية `SYS_ADMIN`. عند الاستغلال، **يتم تسريب مؤشر كومة `net_device` kmalloc-4k عبر `msg_msgseg`، وبناء تحرير عشوائي عبر الكتابة فوق مؤشر `msg_msg->security`، وتسريب العنوان الأساسي للنواة عبر قراءة `net_device->dev_addr` باستخدام الوظيفة المدمجة `ioctl(fd, SIOCGIFHWADDR, leak)`، واختطاف تدفق التحكم عبر تزوير مؤشر الدالة `net_device->ethtool_ops->begin` لرفع الصلاحيات**.

#### 32. CVE-2022-27666

[الشرح](https://paper.seebug.org/1889/)      [المرجع](https://etenal.me/archives/1825)

**إصدار الاختبار**: Linux-5.16.14

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: في مسابقة PWN2OWN، تم إكمال رفع الصلاحيات على Ubuntu 21.10. وحدة esp6 crypto في النواة، المخزن المؤقت للاستقبال هو 8 صفحات، ولكن يمكن للمرسل إرسال بيانات أكبر من 8 صفحات، مما تسببه الدالة [null_skcipher_crypt()](https://elixir.bootlin.com/linux/v5.16.14/source/crypto/crypto_null.c#L76) **فيضان صفحات**. بشكل عام يتم استخدام تقنية رش الصفحات، أولاً يتم استخدام الكائن المرن `user_key_payload` لتسريب `msg_msg->next`، ثم استخدام `msg_msg` لتسريب عنوان النواة `seq_operations->start`، وأخيرًا استخدام `msg_msg` ومعالجة أخطاء صفحات FUSE لبناء كتابة عشوائية، لتعديل `modprobe_path` ورفع الصلاحيات.

#### 33. CVE-2022-32250[writeup](https://bsauce.github.io/2022/11/03/CVE-2022-32250/)      [reference](https://github.com/theori-io/CVE-2022-32250-exploit)

**إصدار الاختبار**: Linux-5.17.12

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: عندما تستخدم وحدة `nftables` رسالة `NFT_MSG_NEWSET` في الملف `net/netfilter/nf_tables_api.c` لإضافة `nft_set`، وأثناء معالجة تعبيرَي `lookup` و`dynset`، وبسبب فحص `NFT_EXPR_STATEFUL` الخاطئ، يبقى كائن `nft_expr` في القائمة المرتبطة `nft_set->binding` بعد تحريره، وعند إضافة `nft_expr` جديد يحدث **use-after-free للكتابة** (يتطلب تشغيل الثغرة صلاحية `CAP_NET_ADMIN`). تكتب كتابة UAF قيمة العنوان الموجود عند الإزاحة 0x18 من كتلة `kmalloc-64` أخرى إلى الإزاحة 0x18 في `kmalloc-64`. طريقة الاستغلال: استخدام **`msg_msg` في mqueue لكشف عنوان النواة الأساسي**، لأن إزاحة `posix_msg_tree_node->msg_list` في mqueue هي 0x18 (وتقع في `kmalloc-64`)، وهي مطابقة تمامًا لإزاحة كتابة UAF؛ كما يمكن استخدام **`posix_msg_tree_node->msg_list` لبناء استغلال Unlink** لتعديل `modprobe_path`. استخدام `user_key_payload` لكشف عنوان الكومة (لتسهيل بناء unlink) هو أسلوب معروف. لاحظ أنك بحاجة إلى إصدار libmnl أو libnftnl أحدث من إصدار Ubuntu 21.04.

#### 34. CVE-2022-34918

[writeup](https://bsauce.github.io/2022/07/26/CVE-2022-34918/)      [reference](https://www.randorisec.fr/crack-linux-firewall/)

**إصدار الاختبار**: Linux-5.17.15

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: في وحدة nftables، تحتوي الدالة [nft_set_elem_init()](https://elixir.bootlin.com/linux/v5.18.10/source/net/netfilter/nf_tables_api.c#L5459) على **تجاوز في الكومة (heap overflow)**، ويمكن أن يصل طول التجاوز إلى `64-16=48` بايتًا، ويمكن أن يقع الكائن المستغل في `kmalloc-{64,96,128,192}` (واخترنا في هذا المقال كائن kmalloc-64 للاستغلال). الاستغلال — أولًا نبني تخطيط الكومة `vul_obj -> user_key_payload -> percpu_ref_data`، ونستخدم التجاوز لتعديل `user_key_payload->datalen` إلى 0xffff، لكشف عنوان النواة الأساسي من `percpu_ref_data->release` وعنوان physmap من `percpu_ref_data->ref`؛ ثم نبني تخطيط الكومة `vul_obj -> simple_xattr`، ونستخدم التجاوز لتعديل القائمة المرتبطة `simple_xattr->list`، وباستخدام هذه الكتابة العشوائية المقيدة نعدّل `modprobe_path` من `/sbin/modprobe` إلى `/tmp/xxxxprobe` لرفع الصلاحيات (تُفعَّل هذه الكتابة العشوائية عند إزالة xattr من القائمة المرتبطة). شرط هذه الكتابة العشوائية هو الحاجة إلى كشف عنوان physmap، وكلٌّ من `percpu_ref_data` و `shm_file_data` يحوي عنوان النواة الأساسي وعنوان physmap معًا.

#### 35. CVE-2023-2598

[writeup](https://bsauce.github.io/2024/07/30/CVE-2023-2598/)      [reference](https://anatomic.rip/cve-2023-2598/)

**إصدار الاختبار**: Linux-6.3.1

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: ثغرة كتابة خارج النطاق (OOB write) في وحدة io_uring، ويمكن أن تؤدي إلى **قراءة وكتابة خارج حدود الذاكرة الفعلية**. تقع الثغرة في الدالة [io_sqe_buffer_register()](https://elixir.bootlin.com/linux/v6.3.1/source/io_uring/rsrc.c#L1230) في المسار `io_uring/rsrc.c`. عند التحقق مما إذا كانت الصفحات المُرسَلة للتسجيل تنتمي إلى نفس الصفحة المركّبة (compound page)، يتحقق فقط من تطابق الصفحة الأولى للصفحة المركّبة، دون التحقق مما إذا كانت الصفحات المُرسَلة هي نفس الصفحة. يمكن تسجيل نفس الصفحة الفعلية (بانتحال كونها صفحة مركّبة مكوّنة من عدة صفحات فعلية)، مما يتيح إنشاء قراءة/كتابة خارج الحدود بطول عشوائي على الصفحة الفعلية.   

باستخدام قراءة/كتابة خارج الحدود بطول عشوائي على الصفحة الفعلية، يمكن قراءة وكتابة كائن sock الموجود بعدها بشكل عشوائي؛ نكشف عنوان النواة الأساسي عبر `sock->sk_data_ready`، ونكشف عنوان الكومة لكائن sock عبر `sock.sk_error_queue.next`، وبالتزوير لمؤشر الدالة `sock.__sk_common.skc_prot->ioctl` ليشير إلى الدالة [call_usermodehelper_exec()](https://elixir.bootlin.com/linux/v6.3.1/source/kernel/umh.c#L434) **نختطف تدفق التحكم**، كما يلزم تزوير بنية `subprocess_info` لإكمال الاستغلال، وفي النهاية **ننفّذ `/bin/sh -c /bin/sh &>/dev/ttyS0 </dev/ttyS0` لرفع الصلاحيات**.

#### 36. CVE-2024-1086

[writeup](https://bsauce.github.io/2024/05/10/CVE-2024-1086/)      [reference](https://yanglingxi1993.github.io/dirty_pagetable/dirty_pagetable.html)

**إصدار الاختبار**: Linux-6.3.13

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: يوجد **ثغرة use-after-free** في مكوّن nf_tables ضمن نظام netfilter الفرعي. في الدالة [nft_verdict_init()](https://elixir.bootlin.com/linux/v6.3.13/source/net/netfilter/nf_tables_api.c#L10321)، يُسمح بتعيين قيمة verdict كبيرة (القيمة الخبيثة 0xffff0000)؛ وفي الدالة [nf_hook_slow()](https://elixir.bootlin.com/linux/v6.3.13/source/net/netfilter/core.c#L607)، عند معالجة `NF_DROP` (0)، تقوم أولًا بتحرير حزمة skb، ثم تستدعي [NF_DROP_GETERR()](https://elixir.bootlin.com/linux/v6.3.13/source/include/linux/netfilter.h#L19) لتعديل القيمة المعادة (التي تُعيَّن وفقًا لقيمة verdict إلى `NF_ACCEPT` - القيمة الموجبة 1). عند الإشارة إلى skb لاحقًا، تُثار ثغرة UAF، وتقوم [NF_HOOK()](https://elixir.bootlin.com/linux/v6.3.13/source/include/linux/netfilter.h#L407) بتحرير skb مرة أخرى. طريقة الاستغلال: **إنشاء تداخل بين صفحتي PMD وPTE**، حيث تُعيد `PMD[0]`/`PMD[1]` كتابة `PTE[0]`/`PTE[1]`؛ ومن خلال الكتابة إلى العنوان الافتراضي للمستخدم المقابل لصفحة PTE، نزوّر صفحة PTE المقابلة لـ `PMD[0]` (إدخالاتها عناوين فيزيائية)، وبهذا يمكننا عبر الكتابة إلى العنوان الافتراضي للمستخدم المقابل لصفحة PMD **تحقيق الكتابة إلى أي عنوان فيزيائي**.

#### 37. CVE-2025-21702

[writeup](https://bsauce.github.io/2026/01/27/CVE-2025-21702/)      [reference](https://github.com/quanggle97/security-research/tree/master/pocs/linux/kernelctf/CVE-2025-21702_lts_cos)

**إصدار الاختبار**: Linux-6.6.75

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: في وحدة `net/sched`، عندما يتم استدعاء الدالة `pfifo_tail_enqueue()` على أحد مجدولات qdisc (بتعيين `sch->limit == 0`)، يؤدي ذلك إلى زيادة طول قائمة الانتظار qlen لذلك الـ qdisc بشكل خاطئ (على الرغم من امتلاء قائمة الانتظار، تُضاف حزمة جديدة دون التخلص من حزمة أولًا)، بينما لا يزداد طول qlen الخاص بالـ qdisc الأب (المستدعي)، مما يجعل qlen لقائمة الانتظار الأب لا تساوي مجموع qlen لقوائم الانتظار الفرعية، ويمكن من ذلك بناء ثغرة UAF. كشف عنوان النواة الأساسي — من خلال استخدام مبدأ إدراج عقد الشجرة ذات اللون الأحمر والأسود لتعديل `user_key_payload->datalen` وإنشاء قراءة خارج النطاق، لكشف مؤشر الدالة `xfrm_policy_timer` في كائن `xfrm_policy` المجاور. اختطاف تدفق التحكم — بتزوير مؤشر الدالة `UAF_hfsc_class->dequeue`، ومن خلال إخراج الحزمة من قائمة الانتظار بعد إدخالها، يتم تشغيل `hfsc_dequeue()` -> `qdisc_dequeue_peeked()` -> `sch->dequeue()` لاختطاف تدفق التحكم، ويكون سجل RDI قابلاً للتحكم.

#### 38. CVE-2026-23271

[writeup](https://bsauce.github.io/2026/05/29/CVE-2026-23271/)      [reference](https://github.com/simond67/security-research/tree/Add-kernelCTF-CVE-2026-23271_lts/pocs/linux/kernelctf/CVE-2026-23271_lts)

**إصدار الاختبار**: Linux-6.12.24

**الحماية**: تم تفعيل KASLR/SMEP/SMAP.

**الثغرة**: توجد ثغرة use-after-free ناتجة عن سباق في `kernel/events/` (نظام perf الفرعي). يوجد سباق بين `__perf_event_overflow()` و `perf_remove_from_context()`. بالنسبة لأحداث perf المدفوعة بالبرمجيات/tracepoint، تقوم معالجة overflow بتعطيل الاستباق فقط (دون إيقاف المقاطعات الصلبة). في هذا السياق، يمكن لمسار التنظيف `perf_event_release_kernel()` → `perf_remove_from_context()` أن يتنفذ بشكل متزامن على معالج آخر، مما يؤدي إلى تحرير حالة الأحداث المرتبطة بالاستدعاءات الرجعية (مثل `event->pending_task`) بينما لا يزال مسار overflow يستخدمها، مما يسبب UAF. يتمثل الإصلاح في إضافة آلية مزامنة مناسبة داخل `__perf_event_overflow()` لضمان عدم تقدم مسار التحرير بشكل متزامن أثناء وصول مسار overflow إلى الحقول المرتبطة بالاستدعاءات الرجعية.
- يتسبب السباق (خيط Worker يُطلق مسار overflow الخاص بـ tracepoint، وخيط Closer يستدعي `close()` على واصف perf_event بشكل متزامن) في إطلاق `WARN_ON_ONCE`؛ وبعد وصول refcount إلى الصفر، يستمر `task_work_add` في إضافة `pending_task` الخاص بالحدث المُحرَّر إلى قائمة task_work.
- من خلال استقصاء البت (512) الخاص بـ TAINT_WARN في `/proc/sys/kernel/tainted` نكشف نجاح السباق؛ إذ يحرّر 1024 خيط حقن (spray) بشكل متزامن، ويشغل الحدث B خانة slab التي حرّرها الحدث A.
- عندما يعود `futex_wait` إلى وضع المستخدم، ينفّذ `perf_pending_task` الدالة `put_event(事件B)`، مما يقلل refcount الخاص بالحدث B خطأً إلى 0، مكوّنًا **واصفًا معلّقًا مستقرًا (dangling FD)**.
- يقوم ID Oracle بتخصيص الحدث C تباعًا لاستكشاف تغيّر المعرّف، وتحديد موقع الضحية بدقة؛ وفي هجوم عبر الخزائن (cross-cache)، تُعاد صفحة slab الخاصة بـ `perf_event_cache` إلى buddy ثم يُعاد استصلاحها باستخدام `msg_msgseg`.
تنزيل الأداة