release_agent exploit - Relative Paths to PIDs
अधिक जानकारी के लिए https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html से ब्लॉग पोर्ट की जांच करें। यह केवल एक सारांश है:
यह तकनीक कंटेनर के भीतर से होस्ट कोड निष्पादित करने के लिए एक विधि का वर्णन करती है, जो स्टोरेज-ड्राइवर कॉन्फ़िगरेशन द्वारा उत्पन्न चुनौतियों को पार करती है जो होस्ट पर कंटेनर की फ़ाइल प्रणाली के पथ को अस्पष्ट करती हैं, जैसे कि काता कंटेनर या विशिष्ट devicemapper
सेटिंग्स।
मुख्य चरण:
प्रोसेस आईडी (PIDs) का पता लगाना: लिनक्स प्सेडो-फाइल सिस्टम में
/proc/<pid>/root
प्रतीकात्मक लिंक का उपयोग करके, कंटेनर के भीतर किसी भी फ़ाइल को होस्ट की फ़ाइल प्रणाली के सापेक्ष एक्सेस किया जा सकता है। यह होस्ट पर कंटेनर की फ़ाइल प्रणाली के पथ को जानने की आवश्यकता को दरकिनार करता है।PID बाशिंग: होस्ट पर PIDs के माध्यम से खोजने के लिए एक ब्रूट फोर्स दृष्टिकोण का उपयोग किया जाता है। यह
/proc/<pid>/root/<file>
पर एक विशिष्ट फ़ाइल की उपस्थिति की जांच करके किया जाता है। जब फ़ाइल मिलती है, तो यह संकेत करता है कि संबंधित PID उस प्रक्रिया से संबंधित है जो लक्षित कंटेनर के भीतर चल रही है।निष्पादन को ट्रिगर करना: अनुमानित PID पथ को
cgroups release_agent
फ़ाइल में लिखा जाता है। यह क्रियाrelease_agent
के निष्पादन को ट्रिगर करती है। इस चरण की सफलता की पुष्टि आउटपुट फ़ाइल के निर्माण की जांच करके की जाती है।
शोषण प्रक्रिया
शोषण प्रक्रिया में अधिक विस्तृत क्रियाओं का एक सेट शामिल है, जिसका उद्देश्य कंटेनर के भीतर चल रही प्रक्रिया के सही PID का अनुमान लगाकर होस्ट पर एक पेलोड निष्पादित करना है। यह इस प्रकार विकसित होता है:
पर्यावरण को प्रारंभ करें: होस्ट पर एक पेलोड स्क्रिप्ट (
payload.sh
) तैयार की जाती है, और cgroup हेरफेर के लिए एक अद्वितीय निर्देशिका बनाई जाती है।पेलोड तैयार करें: पेलोड स्क्रिप्ट, जिसमें होस्ट पर निष्पादित होने वाले आदेश होते हैं, लिखी जाती है और इसे निष्पादन योग्य बनाया जाता है।
Cgroup सेट करें: cgroup को माउंट और कॉन्फ़िगर किया जाता है। यह सुनिश्चित करने के लिए
notify_on_release
ध्वज सेट किया जाता है कि जब cgroup को जारी किया जाता है तो पेलोड निष्पादित होता है।ब्रूट फोर्स PID: एक लूप संभावित PIDs के माध्यम से दोहराता है, प्रत्येक अनुमानित PID को
release_agent
फ़ाइल में लिखता है। यह प्रभावी रूप से पेलोड स्क्रिप्ट कोrelease_agent
के रूप में सेट करता है।निष्पादन को ट्रिगर और जांचें: प्रत्येक PID के लिए, cgroup का
cgroup.procs
लिखा जाता है, यदि PID सही है तोrelease_agent
के निष्पादन को ट्रिगर करता है। लूप तब तक जारी रहता है जब तक पेलोड स्क्रिप्ट का आउटपुट नहीं मिल जाता, जो सफल निष्पादन को इंगित करता है।
ब्लॉग पोस्ट से PoC:
Last updated