
CVE-2025-40271 تم تعديله بواسطة MadEploits
إثبات مفهوم لثغرة تصعيد صلاحيات محلية في نظام ملفات proc الخاص بنواة لينكس. الخلل هو استخدام بعد التحرير (use-after-free) في proc_readdir_de() سببه rb_erase() دون RB_CLEAR_NODE()، مما يترك روابط شجرة حمراء-سوداء قديمة يمكن استغلالها بالتنافس أثناء تعداد الدليل.
المؤلف: MadExploits
البحث الأصلي للثغرة وإثبات المفهوم بلغة C من إعداد أفيرال سريفاستافا (N-DAY RESEARCH). يتضمن هذا المستودع نسخة شل (
exploit.sh) للبيئات التي لا يكون التجميع فيها عمليًا.
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2025-40271 |
| المكوّن | fs/proc — proc_readdir_de() / remove_proc_entry() |
| النوع | استخدام بعد التحرير (روابط شجرة حمراء-سوداء قديمة) |
| الأثر | تصعيد صلاحيات محلي (LPE) |
| البنية | x86_64 |
| المتأثر | أنوية لينكس حتى 6.18-rc5 |
عند إزالة إدخال دليل من proc، يتم استدعاء rb_erase() على عقدة rb الخاصة بالإدخال بدون RB_CLEAR_NODE(). يمكن أن تظل العقد المُحرَّرة قابلة للوصول عبر روابط الشجرة القديمة. إذا تنافس getdents64() مع إزالة الواجهة تحت /proc/self/net/dev_snmp6/، فقد تقرأ النواة ذاكرة مُحرَّرة — غالبًا ما تستعيدها كائنات msg_msg المتناثرة — وتعيد قيم d_ino شاذة تسرّب مؤشرات كومة النواة.
يتحقق إثبات المفهوم من إصدار النواة قيد التشغيل ويخرج عند البنى المصححة:
| الفرع | الإصلاح في |
|---|---|
| 5.10.x | 5.10.247+ |
| 6.1.x | 6.1.159+ |
| 6.6.x | 6.6.123+ |
| 6.12.x | 6.12.73+ |
| 6.18+ | 6.18-rc6+ |
| 7.x+ | مصحَّح |
| الملف | الوصف |
|---|---|
exploit.c | إثبات مفهوم كامل بلغة C — إدارة netlink veth، تنافس pthread، رش msg_msg |
exploit.sh | نسخة شل بدون تجميع — unshare، ip، بايثون 3 مدمجة لاستدعاءات النظام/التنافس |
تتبع كلتا النسختين نفس مسار الاستغلال:
CAP_NET_ADMIN في مساحة اسم الشبكة)/proc/self/net/dev_snmp6/getdents64() ضد حذف veth السريع + رش الكومةd_ino الشبيهة بمؤشرات النواةcat /proc/sys/kernel/unprivileged_userns_clone
# must be 1
exploit.cgcc مع pthreadslinux/netlink.h، إلخ.)gcc -o exploit exploit.c -lpthread
exploit.shbashpython3ip (iproute2)unshare (util-linux مع دعم --map-root-user)لا حاجة إلى مترجم.
chmod +x exploit.sh
./exploit.sh
gcc -o exploit exploit.c -lpthread
./exploit
نواة قابلة للاستغلال — تم تشغيل UAF (نجاح جزئي):
[+] Kernel X.Y.Z — VULNERABLE
[+] Namespace ready...
[+] Created 32 veth pairs (/proc/self/net/dev_snmp6 populated)
[+] UAF HIT! d_ino=0xffff8880........ (kernel heap pointer)
[+] Kernel heap leak: 0xffff8880........
[*] PARTIAL SUCCESS: UAF + heap leak DEMONSTRATED
نواة مصححة:
[-] Kernel X.Y.Z — PATCHED
[*] Kernel is patched. Nothing to do.
d_ino على قيمة تطابق نمط مؤشر نواة x86_64 (0xffff000000000000)، عادةً من ترويسة msg_msg m_list المتداخلة مع بيانات proc_dir_entry المُحرَّرة.modprobe_path الإزاحة بين عنوان الكومة المُسرَّب وقاعدة نص النواة — وهذا خاص بكل بناء (KASLR). يوضح إثبات المفهوم UAF والتسريب؛ تحتاج السلسلة الكاملة إلى إزاحات لصورة النواة المستهدفة.sysctl -w kernel.unprivileged_userns_clone=0
يُقدَّم هذا المشروع لأغراض البحث الأمني المصرح به والتعليم والاختبارات الدفاعية فقط.
| الدور | الاسم |
|---|---|
| مؤلف المستودع | MadExploits |
| البحث الأصلي للثغرة وإثبات المفهوم بلغة C | Aviral Srivastava — N-DAY RESEARCH |
استخدمه على مسؤوليتك الخاصة. لا يُقدَّم أي ضمان.