Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2022-0492 — CVE-2022-0492 Linux कर्नेल कंटेनर एस्केप का विस्तृत तकनीकी विश्लेषण और कार्यशील एक्सप्लॉइट, जो cgroup release_agent के माध्यम से होता है, साथ ही चरण-दर-चरण लैब सेटअप और शमन मार्गदर्शन। | Kitploit
उपकरण/GitHubGitHub/chenaotian/cve-2022-0492
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणलर्निंग और शिक्षाकंटेनर एस्केपलैब और अभ्यास
GitHubchenaotian/cve-2022-0492

CVE-2022-0492

CVE-2022-0492 Linux कर्नेल कंटेनर एस्केप का विस्तृत तकनीकी विश्लेषण और कार्यशील एक्सप्लॉइट, जो cgroup release_agent के माध्यम से होता है, साथ ही चरण-दर-चरण लैब सेटअप और शमन मार्गदर्शन।

रिपॉजिटरी देखें
329314 साल पहलेKitploit द्वारा समीक्षित

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

सभी देखें →

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

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

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

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

CVE-2022-0492 कंटेनर एस्केप विश्लेषण

[toc]

भेद्यता परिचय

भेद्यता आईडी: CVE-2022-0492

भेद्यता उत्पाद: linux kernel - cgroup

प्रभावित संस्करण: ~linux kernel 5.17-rc3

भेद्यता प्रभाव: जब कंटेनर में अतिरिक्त सुरक्षा उपाय सक्षम नहीं होते हैं, तो कंटेनर के अंदर root विशेषाधिकार प्राप्त करके होस्ट में एस्केप किया जा सकता है।

पर्यावरण सेटअप

भेद्यता वाले संस्करण के कर्नेल वाले linux में docker का उपयोग करना पर्याप्त है।

#关闭所有安全防护启动docker
docker run --rm -it -h cve --name cve --security-opt="seccomp=unconfined" --security-opt="apparmor=unconfined" ubuntu:20.04 /bin/bash 

इस लेख में प्रयोगात्मक वातावरण के रूप में docker का उपयोग किया गया है।

भेद्यता सिद्धांत और संबंधित ज्ञान

इस भेद्यता का शोषण तरीका पहले से ही पुराना परिचित है, लेकिन भेद्यता का मूल बिंदु cgroup के release_agent को संशोधित करने में अनुमति सत्यापन की कमी है, जिससे एस्केप शोषण की सीमा और कम हो गई है (पहले CAP_SYS_ADMIN अनुमति की आवश्यकता थी, इस भेद्यता को CAP_SYS_ADMIN की आवश्यकता नहीं है)। विशिष्ट शोषण शर्तों में अंतर के लिए नीचे "उपयोग की शर्तें" देखें।

भेद्यता का घटना बिंदु

पैच का विश्लेषण करने पर, cgroup_release_agent_write फ़ंक्शन को पैच किया गया और प्रमाणीकरण जोड़ा गया। इसका मतलब है कि cgroup के release_agent को अब बिना अनुमति वाले उपयोगकर्ताओं द्वारा संशोधित नहीं किया जा सकता:

image-20220310201629995

इसलिए यह निर्धारित किया गया है कि यह भेद्यता विफल एक्सेस नियंत्रण (broken access control) है।

cgroup का परिचय

cgroup अर्थात Linux Control Group, Linux कर्नेल की एक क्षमता है, जिसका उपयोग प्रक्रिया समूहों के संसाधनों (जैसे CPU, मेमोरी, डिस्क इनपुट/आउटपुट आदि) को सीमित, नियंत्रित और अलग करने के लिए किया जाता है।

cgroup में निम्नलिखित उपप्रणालियाँ हैं:

  1. devices प्रक्रिया-स्तरीय डिवाइस अनुमतियाँ
  2. cpuset प्रक्रियाओं द्वारा उपयोग किए जा सकने वाले CPU और मेमोरी नोड्स आवंटित करता है
  3. cpu CPU उपयोग दर नियंत्रित करता है
  4. cpuacct CPU उपयोग आँकड़े, जैसे रन टाइम, थ्रॉटल समय
  5. memory मेमोरी उपयोग की ऊपरी सीमा सीमित करता है
  6. freezer Cgroup में प्रक्रियाओं को रोकता है
  7. net_cls tc (traffic controller) के साथ मिलकर नेटवर्क बैंडविड्थ सीमित करता है
  8. net_prio प्रक्रियाओं के नेटवर्क ट्रैफ़िक प्राथमिकता सेट करता है
  9. huge_tlb HugeTLB के उपयोग को सीमित करता है
  10. perf_event Perf टूल को Cgroup समूहों के आधार पर प्रदर्शन परीक्षण करने की अनुमति देता है

होस्ट में सभी cgroup /sys/fs/cgroup के अंतर्गत होते हैं, और विभिन्न cgroup उपप्रणालियों को देखा जा सकता है:

image-20220311113636040

docker में संबंधित cgroup उपप्रणाली होस्ट में उस cgroup का चाइल्ड नोड है। docker में memory cgroup देखें:

image-20220311113811776

होस्ट के docker निर्देशिका में संबंधित कंटेनर नाम नोड बिल्कुल समान है:

image-20220311113853019

cgroup का उपयोग

cgroup का उपयोग फ़ाइल सिस्टम के रूप में किया जाता है। mount के माध्यम से cgroup को एक निर्देशिका में माउंट किया जाता है। cgroup VFS वर्चुअल फ़ाइल सिस्टम के माध्यम से हमारे साथ इंटरैक्ट करता है। cgroup के इंटरफ़ेस फ़ाइलों के रूप में प्रस्तुत होते हैं, और फ़ाइल संचालन विधियों का उपयोग करके cgroup के लिए कुछ पैरामीटर सेट किए जा सकते हैं।

mount -t cgroup -o memory cgroup /tmp/testcgroup

image-20220311111853198

निर्देशिका में उपनिर्देशिका बनाकर cgroup चाइल्ड नोड बनाया जा सकता है: mkdir /tmp/testcgroup/x।

release_agent

cgroup के प्रत्येक subsystem में notify_on_release पैरामीटर होता है। यह पैरामीटर मान Boolean प्रकार का होता है, 1 या 0। यह क्रमशः रिलीज़ एजेंट निर्देश को सक्षम और अक्षम कर सकता है। यदि notify_on_release सक्षम (1) है, जब cgroup में कोई कार्य नहीं होता है (अर्थात जब cgroup में अंतिम प्रक्रिया बाहर निकलती है, और cgroup की tasks फ़ाइल में PID खाली होता है), तो कर्नेल release_agent पैरामीटर द्वारा निर्दिष्ट फ़ाइल की सामग्री निष्पादित करेगा। notify_on_release फ़ाइल को संशोधित करके notify_on_release का मान बदला जाता है।

image-20220311114023546

भेद्यता release_agent के संशोधन में है। मूल रूप से, जब तक कोई cgroup को संचालित कर सकता था, release_agent को संशोधित किया जा सकता था, और cgroup का उपयोग करने के लिए CAP_SYS_ADMIN की आवश्यकता होती थी। लेकिन बाद में शोधकर्ताओं ने पाया कि unshare कमांड के माध्यम से नया namespace बनाने पर सभी capabilities प्राप्त हो सकती हैं, इसलिए CAP_SYS_ADMIN की सीमा समाप्त हो गई, और भेद्यता के शोषण की सीमा बहुत कम हो गई।

unshare कमांड

unshare कमांड का कार्य निर्दिष्ट शेयर्ड पैरेंट प्रक्रिया में निर्दिष्ट namespace को रद्द करना है, फिर निर्दिष्ट प्रोग्राम को निष्पादित करना और नव निर्मित namespace में शामिल होना है। हमारे भेद्यता शोषण से संबंधित महत्वपूर्ण बात यह है कि unshare द्वारा नव निर्मित namespace में CAP_SYS_ADMIN सहित सभी capabilities होती हैं।

image-20220311102635204

भेद्यता शोषण

इस भेद्यता का शोषण पारंपरिक CAP_SYS_ADMIN + cgroup release_agent एस्केप विधि के समान है, लेकिन शोषण की शर्तों में अंतर है।

उपयोग की शर्तें

भेद्यता शोषण की शर्तें और पारंपरिक release_agent एस्केप की शर्तों के बीच अंतर:

पारंपरिक release_agent: कंटेनर के पास CAP_SYS_ADMIN होना चाहिए और apparmor, selinux सक्षम नहीं होना चाहिए।

cve-2022-0492: कंटेनर बिना किसी सुरक्षा के (अधिक विशेष रूप से, seccomp unshare को अक्षम नहीं करता, apparmor cgroup को केवल-पढ़ने के लिए सक्षम नहीं करता, selinux बंद है), और कंटेनर के अंदर root विशेषाधिकार प्राप्त करना। CAP_SYS_ADMIN प्राप्त करने की आवश्यकता नहीं है।

उल्लेखनीय है कि docker का apparmor डिफ़ॉल्ट रूप से cgroup को केवल-पढ़ने के लिए सक्षम करता है, और docker का seccomp डिफ़ॉल्ट रूप से गैर-CAP_SYS_ADMIN अनुमति के तहत unshare को अक्षम करता है। k8s डिफ़ॉल्ट रूप से आमतौर पर बिना सुरक्षा वाले कंटेनर होते हैं। कुल मिलाकर, क्योंकि शोषण अपेक्षाकृत आसान है, आप विशिष्ट परिदृश्यों में इसे आज़मा सकते हैं।

भेद्यता ठीक होने के बाद: पैच के कोड के अनुसार:

image-20220310201629995

release_agent फ़ाइल को संशोधित करने के लिए दो शर्तों को पूरा करना आवश्यक है:

  1. रूट namespace में होना चाहिए
  2. CAP_SYS_ADMIN cap अनुमति होनी चाहिए

इसलिए भेद्यता ठीक होने के बाद, unshare के माध्यम से प्राप्त CAP_SYS_ADMIN अनुमति अब release_agent को संशोधित नहीं कर सकती, क्योंकि unshare द्वारा प्राप्त नया namespace रूट namespace नहीं है। लेकिन यदि कंटेनर में पहले से ही CAP_SYS_ADMIN अनुमति है, तो इस विधि का उपयोग करके एस्केप जारी रखा जा सकता है।

भेद्यता का शोषण

CAP_SYS_ADMIN प्राप्त करना

यदि docker स्टार्टअप में --cap-add=SYS_ADMIN पैरामीटर या --privileged (विशेषाधिकार प्राप्त कंटेनर) है, तो CAP_SYS_ADMIN अनुमति पहले से मौजूद होती है और हमें इसे अतिरिक्त रूप से प्राप्त करने की आवश्यकता नहीं होती है, जैसे निम्नलिखित स्टार्टअप कमांड:

#带有sys_admin 启动docker, 关闭apparmor(否则无法mount)
docker run --rm -it --cap-add=SYS_ADMIN --security-opt="apparmor=unconfined" ubuntu:20.04 /bin/bash 

CAP_SYS_ADMIN अनुमति वाले docker सीधे अगले चरण "release_agent संशोधित करें" पर जा सकते हैं। बिना CAP_SYS_ADMIN अनुमति वाले docker को शुरू करने और भेद्यता को दोहराने का कमांड:

टूल डाउनलोड करें