
استغلال تصعيد الصلاحيات المحلية عبر ثغرة use-after-free في nf_tables بنواة Linux العاملة، للثغرة CVE-2026-23111، مع تجاوز KASLR، وسلسلة ROP، واستبدال modprobe_path.
استغلال عملي لتصعيد الصلاحيات المحلية لـ CVE-2026-23111، وهو use-after-free في
النظام الفرعي nf_tables في نواة Linux. تم اختباره على linux-6.12.69 (x86-64).
يفترض الاستغلال نواة هدف مبنية بالخيارات التالية:
| الخيار | القيمة | السبب |
|---|---|---|
CONFIG_NF_TABLES | y | النظام الفرعي المصاب |
CONFIG_USER_NS | y | تشغيل nf_tables بدون صلاحيات (user+net namespace) |
CONFIG_RANDOMIZE_BASE | y | KASLR — يتم التغلب عليه أثناء التشغيل (المرحلة 1) |
CONFIG_MEMCG | y | الكائنات تستقر في مخابئ kmalloc-cg-* (مفترضة من قبل الـ spray) |
CONFIG_STATIC_USERMODEHELPER | n | يجب أن يكون modprobe_path قابلاً للكتابة |
SLAB_FREELIST_RANDOM / HARDENED | n | قائمة LIFO الحرة تحافظ على موثوقية الاستعادة |
الإزاحات في offsets.h خاصة ببناء نواة واحد — أعد توليدها لأي نواة أخرى
يتطلب musl-gcc (sudo apt install musl-tools).
make # builds exp + rootme (static ELFs)
make clean # remove built binaries
كلا الملفين التنفيذيين ثابتان بحيث يعملان داخل busybox initramfs مصغّر بدون مكتبات مشتركة.
يتوقع exp وجود rootme بجانبه في /cve-2026-23111-poc/ على الهدف.
يتم توليد offsets.h من بناء محدد. لـ vmlinux مختلف:
make offsets SYSTEM_MAP=/path/to/System.map
يستخرج gen_offsets.sh الرموز (single_start، modprobe_path، init_ipc_ns، msleep،
memcpy، …) و ROP gadgets، كلها كإزاحات من قاعدة النواة. ستحتاج أيضاً إلى
إعادة التحقق من إزاحات البنية المضمّنة في exp.c (تخطيط nft_chain، nft_expr_ops.validate،
init_ipc_ns + 0x110، msg_queue.q_messages، xa_node.slots) باستخدام pahole / التفكيك إذا
كانت نواتك تختلف بشكل جوهري عن 6.12.x.
هذا الكود منشور لأغراض البحث الأمني الدفاعي والتعليم. يستهدف جهاز VM مختبري يعمل بنواة معروفة الثغرة. لا تستخدمه ضد أنظمة لا تملكها أو غير مصرح لك باختبارها. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.
| الملف | الغرض |
|---|
exp.c | الاستغلال (المراحل 1 → 4). |
rootme.c | مساعد صغير ثابت setuid(0); execl("/bin/sh") يُستخدم للحصول على صدفة root. |
netlink_min.h | تعريفات Netlink مصغّرة (مبنية على musl، بدون ترويسات kernel uapi). |
offsets.h | إزاحات الرموز/الـ gadget نسبةً إلى kbase لنواة الهدف. |
gen_offsets.sh | يعيد توليد offsets.h من System.map / vmlinux الخاص بالنواة. |
Makefile | يبني exp و rootme كملفات ELF ثابتة بـ musl. |