
شرح لثغرة CVE-2017-1002101 مع نموذج "exploit"/هروب
بعد سماعي عن الثغرة واتباعي هذا الدليل، أردت استكشاف الأمور أكثر قليلاً. يحتوي هذا المستودع على عدد من نشرات الـ pods والنصوص المساعدة التي توضح آلية الهجوم بأبسط طريقة ممكنة حتى يتمكن مسؤولو ومشغّلو Kubernetes من الفهم الكامل لخطورة الثغرة والمخاطر المحتملة. يجب أن تكون مستخدمًا مصادقًا عليه أو قادرًا على التحكم في مواصفات/قالب الـ pod وقت الإنشاء، لذا فمن غير المرجح أن يكون هذا الهروب مجهولاً ما لم يُدمج مع هجمات أخرى مثل هذا.
عندما يقوم الـ Kubelet بتركيب (mount) وحدة تخزين أو secret أو configmap وما إلى ذلك، فإنه يتبع الروابط الرمزية (symlinks) الموجودة داخل وحدة التخزين بشكل غير صحيح إلى مواقع خارج النطاق الذي يجب أن يبقى فيه. ولأن الـ Kubelet يعمل بصلاحيات الجذر (root)، فهذا يعني أنه يمكن خداعه لتركيب أجزاء متميزة من نظام ملفات المضيف داخل حاوية pod غير متميزة.
كان نهجي هو استخدام pod واحد يحتوي على حاويتين "عاديتين". إحدى الحاويات تنشئ الرابط الرمزي إلى / أو /home/ubuntu، بينما تدخل الأخرى في حلقة انهيار (crashloop) حتى ينجح ذلك (مما يفرض إعادة تركيب وحدة التخزين واتباع مسار ذلك الرابط الرمزي)، مما يسمح للمستخدم بتنفيذ أوامر داخل الحاوية الثانية والوصول إلى نقطة التركيب.
ملاحظة: تعمل هذه الأمثلة دون تعديل على مضيف Ubuntu 16.04، ولكن يمكن تعديلها بسهولة لإعدادات أخرى.
./run-as-root.sh إذا كانت مجموعتك (cluster) "قياسية" إلى حد ما../run-as-root-no-chroot.sh أو ./run-as-user-1000.sh للحصول على أشكال أخرى مختلفة.إنها حقًا حالة "يجب التحديث فورًا". لسوء الحظ، فإن الحلول البديلة المذكورة هنا ليست عملية جدًا لمعظم المستخدمين. تقريبًا جميع الإصدارات السابقة معرضة للثغرة.