
गंभीर runC कंटेनर एस्केप भेद्यता (CVE-2026-Pending) के लिए सिमलिंक रेस कंडीशन के साथ प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जिसमें Go PoC, विश्लेषण और पैच अनुशंसा शामिल है।
गंभीरता: क्रिटिकल (CVSS 9.8)
घटक: opencontainers/runc (libcontainer)
भेद्यता प्रकार: CWE-59: फ़ाइल एक्सेस से पहले अनुचित लिंक रिज़ॉल्यूशन ('लिंक फ़ॉलोइंग')
runc के maskPaths फ़ंक्शन में एक क्रिटिकल भेद्यता मौजूद है। कंटेनर के अंदर संवेदनशील पथों (जैसे /proc/kcore) को मास्क करते समय, runc os.OpenFile(path, O_PATH, 0) का उपयोग O_NOFOLLOW फ़्लैग के बिना करता है। यह एक दुर्भावनापूर्ण कंटेनर प्रक्रिया को लक्षित पथ को होस्ट की संवेदनशील फ़ाइल (जैसे /etc/shadow) के सिमलिंक से बदलने की अनुमति देता है, जिससे runc कंटेनर पथ के बजाय होस्ट फ़ाइल पर माउंट ऑपरेशन करता है।
शामिल exploit.go कर्नेल व्यवहार प्रदर्शित करता है जो इस बायपास की अनुमति देता है।
Linux वातावरण में संकलित करें और चलाएं (या रिकर्सन परीक्षण करते समय CAP_SYS_ADMIN वाले कंटेनर में):
go run exploit.go
// Vulnerable Code Pattern in runC:
// 1. Path is typically provided as a string (e.g. from config)
// 2. runC calls os.OpenFile(path, O_PATH...)
// 3. MISSING: unix.O_NOFOLLOW flag
// Result: Kernel follows symlink if attacker swapped the path.
पैच आवश्यक:
मास्किंग के लिए गंतव्य पथ खोलते समय unix.O_NOFOLLOW शामिल करने के लिए libcontainer/rootfs_linux.go अपडेट करें।
- dstFh, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC, 0)
+ dstFh, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC|unix.O_NOFOLLOW, 0)
exploit.go: Go में कार्यात्मक PoC कोड।analysis.md: रेस कंडीशन का विस्तृत तकनीकी विवरण।cve_draft.md: सबमिशन के लिए रिपोर्ट टेम्पलेट।अस्वीकरण: यह कोड केवल सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए है।