
CVE-2025-31133 PoC
यह दस्तावेज़ runc भेद्यता CVE-2025-31133 के लिए प्रदान की गई प्रूफ-ऑफ-कॉन्सेप्ट (PoC) स्क्रिप्ट की कार्यप्रणाली की व्याख्या करता है।
runc के maskedPaths हैंडलिंग में एक सिम्बोलिक लिंक रेस कंडीशन।maskedPaths की सुरक्षाओं को बायपास कर सकता है, जिससे वह होस्ट सिस्टम पर संवेदनशील फ़ाइलों में लिख सकता है। यह एक कंटेनर एस्केप है।/proc/sys/kernel/core_pattern फ़ाइल को संशोधित करके भेद्यता को सुरक्षित रूप से प्रदर्शित करना।"pwned" स्ट्रिंग लिखता है और होस्ट पर मनमाना कोड नहीं निष्पादित करता है। यह मूल मान को पुनर्स्थापित करने के निर्देश भी प्रदान करता है।कंटेनर के OCI विनिर्देश (config.json) में maskedPaths सुविधा एक सुरक्षा तंत्र है जिसे कंटेनरों को संवेदनशील सिस्टम फ़ाइलों तक पहुँचने से रोकने के लिए डिज़ाइन किया गया है। यह कंटेनर के अंदर इन संवेदनशील पथों के ऊपर /dev/null (एक खाली डिवाइस फ़ाइल) को बाइंड-माउंट करके काम करता है, जिससे वे प्रभावी रूप से अपठनीय और अलिखनीय बन जाते हैं।
यह भेद्यता (CVE-2025-31133) एक Time-of-Check to Time-of-Use (TOCTOU) रेस कंडीशन है। यह एक्सप्लॉइट निम्नानुसार काम करता है:
runc कंटेनर सेट करता है, तो यह संवेदनशील पथ (जैसे, /proc/sys/kernel/core_pattern) को मास्क करने वाले बाइंड माउंट के स्रोत के रूप में कंटेनर के rootfs से dev/null फ़ाइल का उपयोग करने की तैयारी करता है।runc द्वारा rootfs/dev/null का पथ हल करने और वास्तव में माउंट ऑपरेशन करने के बीच समय की एक छोटी खिड़की होती है।rootfs/dev/null फ़ाइल को एक वैध डिवाइस नोड और होस्ट पर लक्षित फ़ाइल (/proc/sys/kernel/core_pattern) की ओर इशारा करने वाले सिम्बोलिक लिंक के बीच लगातार और बहुत तेज़ी से स्वैप करती है।runc अपना माउंट ऑपरेशन ठीक उसी क्षण करेगा जब rootfs/dev/null एक सिमलिंक होगा। इससे कर्नेल सिमलिंक का अनुसरण करता है, और /proc/sys/kernel/core_pattern के लिए इच्छित मास्किंग ऑपरेशन विफल हो जाता है।यह PoC /proc/sys/kernel/core_pattern में लिखने के लिए इस तकनीक का उपयोग करता है, जो ऐसे एक्सप्लॉइट्स के लिए एक सामान्य लक्ष्य है क्योंकि इसे संशोधित करने से किसी प्रक्रिया के क्रैश होने पर होस्ट पर मनमाना कोड निष्पादन हो सकता है। हालाँकि, यह PoC केवल एक हानिरहित स्ट्रिंग लिखता है ताकि यह साबित हो सके कि राइट प्रिमिटिव मौजूद है।
poc.sh स्क्रिप्ट ऊपर वर्णित पूरी प्रक्रिया को स्वचालित करती है।
सेटअप और क्लीनअप:
runc बाइनरी, कंटेनर नाम और rootfs पथ के लिए वेरिएबल परिभाषित करती है।cleanup फ़ंक्शन शामिल है जो सुनिश्चित करता है कि स्क्रिप्ट से पहले बनाए गए कोई भी कंटेनर या फ़ाइलें हटा दी जाएँ। यह फ़ंक्शन बाहर निकलने, बाधित होने या समाप्त होने पर स्वचालित रूप से कॉल किया जाता है।तैयारी:
/proc/sys/kernel/core_pattern की मूल सामग्री को एक अस्थायी फ़ाइल में सहेजती है। इसका उपयोग बाद में यह सत्यापित करने के लिए किया जाता है कि एक्सप्लॉइट सफल हुआ या नहीं और उपयोगकर्ता को सिस्टम पुनर्स्थापित करने में मदद करने के लिए।./rootfs) और एक config.json फ़ाइल बनाती है।config.json स्पष्ट रूप से /proc/sys/kernel/core_pattern को maskedPaths के अंतर्गत सूचीबद्ध करता है—ठीक वही सुविधा जिसे एक्सप्लॉइट बायपास करने का लक्ष्य रखता है।रेस फ़ंक्शन (symlink_race)
पूर्वापेक्षाएँ:
runc का एक भेद्य संस्करण।busybox-static स्थापित (कंटेनर के शेल के लिए)।runc चलाने और /proc को संशोधित करने के लिए रूट विशेषाधिकार (sudo)।चरण:
poc.sh के रूप में सहेजें।chmod +x poc.sh।sudo ./poc.sh।[+] EXPLOIT SUCCEEDED! संदेश दिखाई देता है, तो इसका मतलब है कि रेस कंडीशन जीत ली गई। होस्ट का /proc/sys/kernel/core_pattern कंटेनर के अंदर से सफलतापूर्वक संशोधित किया गया, जो भेद्यता की पुष्टि करता है।[-] Exploit did not succeed. दिखाई देता है, तो इस प्रयास में रेस नहीं जीती गई। रेस कंडीशन संभाव्य होती हैं और सिस्टम के समय और लोड पर काफी हद तक निर्भर करती हैं। स्क्रिप्ट को कुछ और बार चलाने का प्रयास करें।PoC एक सिस्टम फ़ाइल को संशोधित करेगा। इसे उसकी मूल स्थिति में पुनर्स्थापित करने के लिए, स्क्रिप्ट द्वारा सुझाई गई कमांड चलाएँ:
# The 'ORIGINAL_PATTERN' will be the actual value from your system
echo 'original_core_pattern_value' | sudo tee /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_patternrootfs/dev/null को हटाता है।rootfs/dev/null से लक्षित होस्ट फ़ाइल (/proc/sys/kernel/core_pattern) तक एक सिम्बोलिक लिंक बनाता है।rootfs/dev/null को एक उचित कैरेक्टर डिवाइस (mknod) के रूप में फिर से बनाता है।निष्पादन:
symlink_race फ़ंक्शन को एक बैकग्राउंड प्रक्रिया के रूप में शुरू किया जाता है।runc run ... निष्पादित करती है। यह वह समय है जब runc maskedPaths लागू करने का प्रयास करेगा।runc exec का उपयोग करती है: echo 'pwned' > /proc/sys/kernel/core_pattern।सत्यापन:
/proc/sys/kernel/core_pattern की वर्तमान सामग्री पढ़ती है।"pwned" स्ट्रिंग और मूल मान से करती है।[+] EXPLOIT SUCCEEDED! या [-] Exploit did not succeed. संदेश प्रिंट करती है।