
درجة الخطورة: حرجة (CVSS 9.8)
المكوّن: opencontainers/runc (libcontainer)
نوع الثغرة: CWE-59: التحليل غير الصحيح للروابط قبل الوصول إلى الملف ('اتباع الروابط')
توجد ثغرة حرجة في دالة maskPaths الخاصة بـ runc. عند إخفاء المسارات الحساسة (مثل /proc/kcore) داخل الحاوية، يستخدم runc الدالة os.OpenFile(path, O_PATH, 0) دون العلامة O_NOFOLLOW. وهذا يسمح لعملية ضارة داخل الحاوية باستبدال المسار المستهدف برابط رمزي إلى ملف حساس على المضيف (مثل /etc/shadow)، مما يجعل runc ينفذ عمليات التحميل (mount) على ملف المضيف بدلاً من مسار الحاوية.
يُظهر exploit.go المرفق سلوك النواة الذي يتيح هذا التجاوز.
قم بتجميع الكود وتشغيله داخل بيئة لينكس (أو داخل حاوية تمتلك صلاحية 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.
التصحيح المطلوب:
قم بتحديث libcontainer/rootfs_linux.go لتضمين unix.O_NOFOLLOW عند فتح المسارات الوجهة للإخفاء.
- 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: كود PoC عملي بلغة Go.analysis.md: تحليل تقني مفصّل لحالة السباق (race condition).cve_draft.md: قالب تقرير للتقديم.إخلاء مسؤولية: هذا الكود لأغراض البحث الأمني والتعليم فقط.