
CVE-2026-23111 (Linux nf_tables उपयोग-पश्चात-मुक्त स्थानीय विशेषाधिकार वृद्धि) के लिए एक्सपोज़र जाँचकर्ता और सुरक्षित डिस्पोज़ेबल-VM लैब। रक्षात्मक: पहचान, शमन, मल्टी-डिस्ट्रो लैब। कोई एक्सप्लॉइट नहीं।
CVE-2026-23111 के लिए रक्षात्मक टूलिंग और एक पुनरुत्पादनीय वर्चुअल-मशीन लैब,
लिनक्स कर्नेल में nf_tables यूज़-आफ्टर-फ्री लोकल प्रिविलेज एस्केलेशन (एक
उलटा एलिमेंट-एक्टिविटी चेक nft_map_catchall_activate() में, "off by !"
बग)। एक अनप्रिविलेज्ड लोकल यूज़र रूट तक एस्केलेट कर सकता है, और कंटेनर से बाहर निकल सकता है,
अनप्रिविलेज्ड यूज़र नेमस्पेस के माध्यम से।
इस रिपो में कोई एक्सप्लॉइट नहीं है। इसमें एक रीड-ओनली एक्सपोज़र चेकर, एक स्क्रिप्ट जो वास्तव में अनप्रिविलेज्ड यूज़र बनाती है, और VM परिभाषाएँ हैं ताकि आप बग तक सुरक्षित रूप से पहुँच सकें और सार्वजनिक शोध का अध्ययन कर सकें। पूरी रूट चेन नीचे दिए गए डिस्क्लोज़र में है, यहाँ नहीं।
पूरा विवरण: https://techearl.com/cve-2026-23111-nftables-lpe
check-exposure.sh — रीड-ओनली डिटेक्टर: कर्नेल वर्शन बनाम फिक्स्ड बिल्ड, nf_tables की उपस्थिति, अनप्रिविलेज्ड-यूज़रनेस प्रीकंडीशन, और कर्नेल-लॉग क्रैश सिग्नेचर।setup-unprivileged-user.sh — बिना sudo के labuser बनाता है और सिद्ध करता है कि वह अनप्रिविलेज्ड है। LPE परीक्षण का उद्देश्य ऐसे यूज़र से शुरू करना है जो पहले से रूट नहीं बन सकता।Vagrantfile — डिस्पोज़ेबल Debian 12 और AlmaLinux 10 VM (वे डिस्ट्रोज़ जिन्हें Multipass लॉन्च नहीं कर सकता)।कंटेनर होस्ट कर्नेल साझा करता है। कंटेनर के अंदर कर्नेल एक्सप्लॉइट चलाने का मतलब है उसे आपके वास्तविक होस्ट कर्नेल के विरुद्ध चलाना, इसलिए एक "टेस्ट" वास्तविक मशीन से समझौता कर सकता है। अपने स्वयं के कर्नेल वाली डिस्पोज़ेबल VM का उपयोग करें।
| डिस्ट्रो | लॉन्च कैसे करें | क्यों |
|---|---|---|
| Ubuntu 24.04 / 22.04 | Multipass (केवल Ubuntu) | Exodus दोनों पर पुनरुत्पादित हुआ; 24.04 में AppArmor userns प्रतिबंध डिफ़ॉल्ट रूप से चालू रहता है, इसलिए यह मिटिगेशन दिखाता है। |
| Debian 12 | Vagrant (vagrant up debian) | Exodus इस पर पुनरुत्पादित हुआ; अनप्रिविलेज्ड userns डिफ़ॉल्ट रूप से खुला। |
| AlmaLinux / Rocky 10.1 | Vagrant (vagrant up alma) | FuzzingLabs के लक्ष्य कर्नेल 6.12.0-124.x.el10 से मेल खाता है, इसलिए उनका सार्वजनिक ट्रिगर प्रकाशित अनुसार पुनरुत्पादित होता है। |
Multipass केवल Ubuntu लॉन्च करता है, इसीलिए बाकी डिस्ट्रोज़ Vagrant का उपयोग करते हैं।
प्रत्येक डिस्ट्रो को एक अलग तरकीब की आवश्यकता थी ताकि वास्तव में प्री-फिक्स कर्नेल बूट हो सके जिसमें क्लाउड VM पर नेटवर्किंग काम करती रहे:
linux-aws का उपयोग करें, linux-generic का नहीं। जेनेरिक
कर्नेल में AWS ENA NIC ड्राइवर नहीं होता और Nitro इंस्टेंस पर SSH खो जाता है।
sudo apt install -y linux-image-6.8.0-1028-aws (फिक्स्ड 6.8.0-1051 से नीचे),
इसे GRUB में डिफ़ॉल्ट सेट करें, रिबूट करें। स्थानीय virt पर जेनेरिक कर्नेल ठीक है।cloud कर्नेल इंस्टॉल करें (ENA बनाए रखता है):
deb [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian/20251201T000000Z/ bookworm main,
फिर apt install -y linux-image-6.1.0-39-cloud-amd64=6.1.148-1 (फिक्स्ड 6.1.164-1, DSA-6163-1 से नीचे)।el10_1 कर्नेल 10.1 वॉल्ट में हैं।
dnf को https://vault.almalinux.org/10.1/BaseOS/x86_64/os/ पर इंगित करें और
dnf install kernel-6.12.0-124.38.1.el10_1 चलाएँ, फिर grubby --set-default।# 1. Create a real unprivileged user and prove it cannot sudo.
# (useradd, not Debian's adduser, so it works on RHEL too.)
sudo bash setup-unprivileged-user.sh labuser
# 2. Exposure verdict.
sudo ./check-exposure.sh
# 3. As labuser, the precondition, then the public nft trigger inside a netns.
sudo -u labuser unshare -Ur id # uid=0 in a new userns = precondition open
# (denied on stock Ubuntu 24.04 = mitigation working)
# The public FuzzingLabs trigger (catchall GOTO + aborted batch). Inlined here as
# documentation; this repo does not ship an executable exploit/trigger file.
sudo -u labuser unshare -Urn bash -c '
nft add table inet t; nft add chain inet t c
nft add map inet t m "{ type ipv4_addr : verdict; }"
nft add element inet t m "{ * : goto c }"
printf "delete element inet t m { * }\ndelete element inet t m { 1.2.3.4 }\n" > /tmp/b.nft
nft -f /tmp/b.nft; nft flush ruleset'
वह अनुक्रम बगी एबॉर्ट पथ चलाता है; इसमें नहीं है कोई प्रिविलेज-एस्केलेशन चेन, और स्टॉक कर्नेल पर यह मौन रहता है (नीचे देखें)।
| डिस्ट्रो | भेद्य कर्नेल बूट हुआ | userns डिफ़ॉल्ट | परिणाम |
|---|---|---|---|
| Ubuntu 24.04 | 6.8.0-1028-aws | प्रतिबंधित (AppArmor) | MITIGATED, फिक्स्ड नहीं |
| Debian 12 | 6.1.0-39-cloud (6.1.148-1) | खुला | EXPOSED |
| AlmaLinux 10.1 | 6.12.0-124.38.1.el10_1 | खुला | EXPOSED |
ट्रिगर पर ईमानदार निष्कर्ष: स्टॉक प्रोडक्शन कर्नेल पर यह मौन है।
यह बगी एबॉर्ट पथ को बिना क्रैश और बिना dmesg आउटपुट के चलाता है, यहाँ तक कि
फ्री-एंड-रीयूज़ के साथ लूप करने पर भी। राइटअप में KASAN: slab-use-after-free आउटपुट
KASAN/डीबग कर्नेल से आता है; अव्यक्त यूज़-आफ्टर-फ्री को हथियार बनाने के लिए
एक्सप्लॉइट का हीप स्प्रे चाहिए (इस रिपो में नहीं)। लैब सिद्ध करता है कि अनप्रिविलेज्ड यूज़र
बग तक पहुँचता है, दिखाता है कि Ubuntu का डिफ़ॉल्ट AppArmor प्रतिबंध उस पथ को रोकता है,
और एक स्पष्ट EXPOSED / MITIGATED / fixed परिणाम देता है। यह आपको
रूट शेल नहीं सौंपता, जानबूझकर।
अनप्रिविलेज्ड यूज़र नेमस्पेस प्रतिबंधित करें (सार्वजनिक एक्सप्लॉइट्स के लिए यथार्थवादी मार्ग बंद करता है), फिर कर्नेल पैच करें।
# Ubuntu 23.10+ (AppArmor-based, keeps legitimate userns users working):
echo "kernel.apparmor_restrict_unprivileged_userns=1" | sudo tee /etc/sysctl.d/99-restrict-userns.conf
sudo sysctl --system
# Elsewhere (blanket disable; set both on Debian/Ubuntu):
printf 'kernel.unprivileged_userns_clone=0\nuser.max_user_namespaces=0\n' | sudo tee /etc/sysctl.d/99-restrict-userns.conf
sudo sysctl --system
# Patch (Ubuntu 24.04 generic fixed at 6.8.0-107.107):
sudo apt update && sudo apt install --only-upgrade linux-image-generic && sudo reboot
MIT. रक्षात्मक और शैक्षिक उपयोग।