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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2023-4911 — CVE-2023-4911 (Looney Tunables) analysis report and Docker reproduction lab | Kitploit
उपकरण/GitHubGitHub/baeseungwon1010/cve-2023-4911
Privilege EscalationVulnerability AnalysisExploitationLearning & EducationBinary ExploitationLabs & Practice
GitHubbaeseungwon1010/cve-2023-4911

CVE-2023-4911

CVE-2023-4911 (Looney Tunables) analysis report and Docker reproduction lab

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

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

सभी देखें →

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

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

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

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

glibc हीप बफर ओवरफ्लो भेद्यता (CVE-2023-4911)

आइटमविषय
CVE IDCVE-2023-4911
हमले का प्रकारहीप बफर ओवरफ्लो → स्थानीय विशेषाधिकार वृद्धि (Local Privilege Escalation)
CVSS 3.17.8 (उच्च)
प्रकाशन तिथि2023-10-03
भेद्यता बिंदुglibc डायनामिक लोडर (ld.so) का GLIBC_TUNABLES पार्सर
भेद्य संस्करणglibc 2.34~2.38

1. अवलोकन

CVE-2023-4911 GNU C Library (glibc) के डायनामिक लोडर द्वारा GLIBC_TUNABLES पर्यावरण चर को पार्स करने की प्रक्रिया में उत्पन्न होने वाली हीप बफर ओवरफ्लो भेद्यता है। हमलावर इस ओवरफ्लो का उपयोग करके डायनामिक लोडर की लाइब्रेरी खोज पथ (RPATH) में हेरफेर कर सकता है, जिससे SUID रूट बाइनरी (su, sudo आदि) के निष्पादित होने पर हमलावर द्वारा तैयार की गई दुर्भावनापूर्ण साझा लाइब्रेरी को लोड करके मनमाना कोड रूट अधिकारों से निष्पादित किया जा सकता है। चूंकि glibc लगभग सभी प्रमुख लिनक्स वितरणों का मुख्य घटक है, यह भेद्यता अप्रैल 2021 के बाद जारी अधिकांश glibc-आधारित वितरणों को प्रभावित करती है।

2. भेद्य कोड का भाग

root@kitploit:~
while (true)
{
    char *name = p;
    size_t len = 0;

    /* नाम (name) की लंबाई ज्ञात करना */
    while (p[len] != '=' && p[len] != ':' && p[len] != '\0')
        len++;

    /* '=' के बिना समाप्त होने पर समाप्त */
    if (p[len] == '\0')
    {
        if (__libc_enable_secure)
            tunestr[off] = '\0';
        return;
    }

    /* पहले ':' मिलने पर अमान्य आइटम */
    if (p[len] == ':')
    {
        p += len + 1;
        continue;
    }

    /* '=' मिलने पर value की शुरुआत की ओर बढ़ना */
    p += len + 1;

    /* मूल स्ट्रिंग से value की गणना */
    char *value = &valstring[p - tunestr];

    len = 0;

    /* value की लंबाई ज्ञात करना */
    while (p[len] != ':' && p[len] != '\0')
        len++;

    ...
    /* tunestr में कॉपी करना */
    ...

    if (p[len] != '\0')
        p += len + 1;
}

3. कारण विश्लेषण

3.1 सामान्य प्रसंस्करण प्रवाह

  1. __tunables_init() पर्यावरण चर सूची में GLIBC_TUNABLES ढूंढता है।
  2. tunables_strdup() __minimal_malloc() के साथ एक बफर आवंटित करता है और मूल स्ट्रिंग की प्रतिलिपि बनाता है (इस बिंदु पर malloc एक बहुत प्रारंभिक, अभी तक पूरी तरह से प्रारंभ नहीं हुआ, कार्यान्वयन है)।
  3. parse_tunables() इस बफर को : (कोलन) के आधार पर पार करता है और प्रत्येक key=value जोड़े को अलग करके संबंधित ट्यूनबल में मान निर्दिष्ट करता है।

3.2 दोष बिंदु

parse_tunables() एक ट्यूनबल को name पार्स करना → p आगे बढ़ाना → value पार्स करना → p आगे बढ़ाना के क्रम में संसाधित करता है। सामान्य इनपुट में, value को पूरी तरह से संसाधित करने के बाद, p अगले ट्यूनबल के प्रारंभिक स्थान पर चला जाता है और अगले आइटम को पार्स करता है।

हालाँकि, जब निम्नलिखित name=name=value प्रारूप का इनपुट दिया जाता है:

root@kitploit:~
GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=AAAA...(लंबी स्ट्रिंग)

पहली पार्सिंग प्रक्रिया में, glibc.malloc.mxfast=AAAA... पूरे को एक value के रूप में पहचाना जाता है और tunestr बफर में कॉपी किया जाता है। इसके बाद, value के बाद अगले ट्यूनबल को अलग करने वाला कोलन (:) मौजूद नहीं होता है, जिससे पार्सिंग पॉइंटर (p) अगले आइटम पर नहीं जा पाता है और पहले से कॉपी की गई value के प्रारंभिक स्थान को फिर से इंगित करता है।

समस्या यह है कि यह value स्वयं name=value प्रारूप में है। अगले पुनरावृत्ति में, पार्सर इसे एक नए ट्यूनबल के रूप में गलत तरीके से पहचानता है और बफर में डुप्लिकेट डेटा लिखता है। tunestr केवल मूल स्ट्रिंग के आकार के बराबर आवंटित किया गया है, इसलिए डुप्लिकेट लेखन के कारण हीप बफर ओवरफ्लो होता है।

3.3 ओवरफ्लो का प्रभाव

उत्पन्न हीप बफर ओवरफ्लो __minimal_malloc() द्वारा लगातार आवंटित आसन्न हीप क्षेत्रों को भी अधिलेखित कर देता है। हमलावर इसका उपयोग डायनामिक लोडर (ld.so) के आंतरिक संरचना link_map के l_info[DT_RPATH] पॉइंटर को नियंत्रित स्टैक पते में बदलने के लिए कर सकता है।

उस स्टैक क्षेत्र में पहले से ही एक हेरफेर किया गया Elf64_Dyn संरचना रखी गई है, और यह संरचना हमलावर द्वारा वांछित निर्देशिका को नए लाइब्रेरी खोज पथ (RPATH) के रूप में निर्दिष्ट करती है। परिणामस्वरूप, ld.so सामान्य सिस्टम लाइब्रेरी के बजाय हमलावर द्वारा तैयार की गई साझा लाइब्रेरी को प्राथमिकता से लोड करता है।

4. हमला श्रृंखला

  1. हमलावर name=name=value प्रारूप का GLIBC_TUNABLES पर्यावरण चर तैयार करता है।
  2. सामान्य उपयोगकर्ता अधिकारों के साथ SUID प्रोग्राम (su आदि) निष्पादित करता है।
  3. कर्नेल SUID बिट के कारण प्रक्रिया के प्रभावी UID को रूट में बदलता है और फिर डायनामिक लोडर (ld.so) निष्पादित करता है।
  4. ld.so के parse_tunables() में हीप बफर ओवरफ्लो होता है।
  5. ओवरफ्लो का उपयोग करके link_map के l_info[DT_RPATH] पॉइंटर को हमलावर द्वारा तैयार किए गए नकली Elf64_Dyn संरचना वाले स्टैक पते में हेरफेर किया जाता है।
  6. ld.so हेरफेर किए गए RPATH जानकारी का उपयोग करके हमलावर द्वारा तैयार की गई दुर्भावनापूर्ण libc.so.6 लोड करता है।
  7. दुर्भावनापूर्ण libc.so.6 का प्रारंभिक कोड (या परिवर्तित प्रारंभिक रूटीन) रूट अधिकारों के साथ निष्पादित होता है, जो setuid(0), setgid(0) और /bin/sh का निष्पादन करता है।

PoC यादृच्छिकता (ASLR) के प्रभाव के कारण वांछित मेमोरी लेआउट बनने तक execve() को बार-बार दोहराने वाली ब्रूट-फोर्स विधि का उपयोग करता है। इसलिए हमले की सफलता और लगने वाला समय पर्यावरण पर निर्भर करता है, और आमतौर पर सैकड़ों से हजारों पुनरावृत्तियों की आवश्यकता होती है।

5. पुनरुत्पादन की शर्तें

  • SUID, SGID आदि के माध्यम से मनमाने विशेषाधिकार वृद्धि में सक्षम बाइनरी मौजूद होनी चाहिए
  • हमलावर उस बाइनरी को मनमाने पर्यावरण चर के साथ निष्पादित कर सकता हो
  • glibc पैच से पहले के संस्करण का होना चाहिए

6. अभ्यास पर्यावरण पुनरुत्पादन (PoC)

पहले git में मौजूद सामग्री को निर्देशिका में क्लोन करें

root@kitploit:~
git clone https://github.com/baeseungwon1010/CVE-2023-4911

नीचे दिए गए आदेश के माध्यम से डॉकर इमेज बनाएं

root@kitploit:~
cd C* && docker compose run --rm cve-2023-4911-lab

कंटेनर में प्रवेश करने के बाद शोषण कोड निष्पादित करें

root@kitploit:~
cd /home/student/exploit && ./exp

निष्पादित करने के बाद प्रतीक्षा करें, आप देख सकते हैं कि सामान्य उपयोगकर्ता sudo(0) में बदल गया है

7. प्रतिकार उपाय

glibc के संस्करण को भेद्य संस्करण से नवीनतम संस्करण में पैच करें। पैच करने के बाद, यदि संभव हो तो रीबूट/रीस्टार्ट करें ताकि पिछले संस्करण का glibc मेमोरी में न रहे। यदि तुरंत पैच करना मुश्किल है, तो अनावश्यक SUID, SGID आदि प्रक्रियाओं को हटाना एक अस्थायी उपाय है।

8. संदर्भ सामग्री

  • NVD: CVE-2023-4911
  • Ubuntu Security Notice: CVE-2023-4911
  • leesh3288/CVE-2023-4911 PoC
  • Debian Sources - glibc 2.28-10 dl-tunables.c
टूल डाउनलोड करें
  • यह प्रक्रिया su के प्रमाणीकरण तर्क के निष्पादित होने से पहले होती है, इसलिए बिना पासवर्ड सत्यापन के रूट शेल प्राप्त होता है।