
Linux kernel nf_tables use-after-free लोकल प्रिविलेज एस्केलेशन एक्सप्लॉइट CVE-2026-23111 के लिए, KASLR बायपास, ROP चेन, और modprobe_path ओवरराइट के साथ।
CVE-2026-23111 के लिए एक कार्यशील लोकल-प्रिविलेज-एस्केलेशन एक्सप्लॉइट, जो Linux kernel के nf_tables सबसिस्टम में एक use-after-free है। linux-6.12.69 (x86-64) पर परीक्षण किया गया।
यह एक्सप्लॉइट मानता है कि लक्ष्य कर्नेल इन विकल्पों के साथ बनाया गया है:
| विकल्प | मान | क्यों |
|---|---|---|
CONFIG_NF_TABLES | y | भेद्य सबसिस्टम |
CONFIG_USER_NS | y | nf_tables को अनप्रिविलेज्ड तरीके से चलाना (user+net namespace) |
CONFIG_RANDOMIZE_BASE | y | KASLR — रनटाइम पर पराजित (Phase 1) |
CONFIG_MEMCG | y | ऑब्जेक्ट kmalloc-cg-* कैश में जाते हैं (स्प्रे द्वारा माना गया) |
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 लक्ष्य पर /cve-2026-23111-poc/ में अपने पास rootme की अपेक्षा करता है।
offsets.h एक विशिष्ट बिल्ड से जनरेट किया गया है। भिन्न vmlinux के लिए:
make offsets SYSTEM_MAP=/path/to/System.map
gen_offsets.sh सिंबल (single_start, modprobe_path, init_ipc_ns, msleep,
memcpy, …) और ROP गैजेट निकालता है, सभी कर्नेल बेस से ऑफसेट के रूप में। आपको 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 | एक्सप्लॉइट (Phases 1 → 4)। |
rootme.c | छोटा स्टैटिक setuid(0); execl("/bin/sh") हेल्पर जो रूट शेल प्राप्त करने के लिए उपयोग होता है। |
netlink_min.h | न्यूनतम Netlink परिभाषाएँ (musl के विरुद्ध बनाई गई, कोई kernel uapi हेडर नहीं)। |
offsets.h | लक्ष्य कर्नेल के लिए kbase-सापेक्ष सिंबल/गैजेट ऑफसेट। |
gen_offsets.sh | कर्नेल System.map / vmlinux से offsets.h पुनः जनरेट करता है। |
Makefile | exp और rootme को स्टैटिक musl ELF के रूप में बनाता है। |