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 Bashing: होस्ट पर 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
लिखा जाता है, जिससेrelease_agent
का निष्पादन होता है अगर PID सही है। लूप जारी रहता है जब तक पेलोड स्क्रिप्ट का आउटपुट मिलता है, जिससे सफल निष्पादन की पुष्टि होती है।
ब्लॉग पोस्ट से PoC:
Last updated