
سكريبت للتحقق مما إذا كانت بيئة الحاويات عرضة للهروب من الحاوية عبر CVE-2022-0492
سكريبت للتحقق مما إذا كانت بيئة الحاوية معرضة لـ الهروب من الحاويات عبر CVE-2022-0492
في 4 فبراير، أعلنت لينكس عن CVE-2022-0492، وهي ثغرة جديدة لتصعيد الامتيازات في النواة.
CVE-2022-0492 تمثل خطأ منطقيًا في مجموعات التحكم (cgroups)، وهي ميزة في لينكس تُشكل لبنة أساسية للحاويات. تبرز هذه الثغرة كواحدة من أبسط عمليات تصعيد الامتيازات في لينكس التي تم اكتشافها مؤخرًا: النواة كشفت عن عملية مُمتازة لمستخدمين غير مُمتازين.
لحسن الحظ، فإن التحصينات الأمنية الافتراضية في معظم بيئات الحاويات كافية لمنع الهروب من الحاوية. الحاويات التي تعمل مع AppArmor أو SELinux محمية. ومع ذلك، إذا كنت تشغل حاويات بدون تطبيق أفضل ممارسات التحصين، أو بامتيازات إضافية، فقد تكون معرضًا للخطر. قسم "هل أنا متأثر؟" يسرد تكوينات الحاويات المعرضة للخطر ويقدم تعليمات حول كيفية اختبار ما إذا كانت بيئة الحاوية معرضة للخطر.
بصرف النظر عن الحاويات، يمكن للثغرة أيضًا السماح لعمليات المضيف الجذرية التي لا تمتلك قدرات، أو عمليات المضيف غير الجذرية التي تمتلك قدرة CAP_DAC_OVERRIDE، بتصعيد الامتيازات والحصول على جميع القدرات. قد يسمح هذا للمهاجمين بالتحايل على إجراء تحصين تستخدمه خدمات معينة، والتي تُسقط القدرات في محاولة للحد من التأثير في حالة حدوث اختراق.
CVE-2022-0492 هي الآن ثالث ثغرة في النواة في الأشهر الأخيرة تسمح للحاويات الخبيثة بالهروب. في جميع الثغرات الثلاث، كان تحصين الحاويات باستخدام Seccomp وأي من AppArmor أو SELinux كافيًا لمنع الهروب من الحاوية.
يتطلب تثبيت cgroupfs القدرة CAP_SYS_ADMIN في مساحة اسم المستخدم التي تستضيف مساحة اسم cgroup الحالية. بشكل افتراضي، تعمل الحاويات بدون CAP_SYS_ADMIN، وبالتالي لا يمكنها تثبيت cgroupfs في مساحة اسم المستخدم الأولية. ولكن من خلال استدعاء النظام unshare()، يمكن للحاويات إنشاء مساحات أسماء مستخدم و cgroup جديدة حيث تمتلك القدرة CAP_SYS_ADMIN ويمكنها تثبيت cgroupfs.

الشكل 1 – حاوية تنشئ مساحة اسم مستخدم جديدة حيث ستحصل على القدرة CAP_SYS_ADMIN.
لا يمكن لكل حاوية إنشاء مساحة اسم مستخدم جديدة – يجب أن يكون المضيف الأساسي قد مكّن مساحات أسماء المستخدم غير المميزة. هذا هو الإعداد الافتراضي في إصدارات أوبونتو الأخيرة، على سبيل المثال. نظرًا لأن Seccomp يحظر استدعاء النظام unshare()، فقط الحاويات التي تعمل بدون Seccomp يمكنها إنشاء مساحة اسم مستخدم جديدة. الحاوية الموضحة في لقطة الشاشة المرفقة تعمل بدون Seccomp، AppArmor أو SELinux.

الشكل 2 – الحاوية تثبت cgroup الذاكرة في مساحتي اسم المستخدم و cgroup الجديدتين.
في لقطة الشاشة أعلاه، نجحت الحاوية في تثبيت cgroup للذاكرة، ولكن قد تلاحظ أن ملف release_agent غير مدرج في الدليل المُثبت!
كما ذُكر سابقًا، يكون ملف release_agent مرئيًا فقط في cgroup الجذر. أحد القيود عند تثبيت cgroupfs في مساحة اسم cgroup هو أنك تثبت cgroup الذي تنتمي إليه، وليس cgroup الجذر.

الشكل 3 – الحاوية تثبت cgroup RDMA الجذر في مساحتي اسم المستخدم و cgroup الجديدتين.
لاستغلال الثغرة، نحتاج إلى كتابة وكيل إصدار خبيث إلى ملف release_agent. كما هو موضح في الشكل 3 أعلاه، هذا الملف مملوك للجذر، لذلك فقط عمليات الحاوية الجذرية يمكنها تعيين وكيل الإصدار. الشكل 4 يوضح الحاوية وهي تعيين وكيل الإصدار، بينما الشكل 5 يظهر حاوية غير جذرية تفشل في ذلك.

الشكل 4 – حاوية جذرية تعيين وكيل الإصدار.

الشكل 5 – الحاوية غير الجذرية لا يمكنها تعيين وكيل الإصدار.
الخطوة الأخيرة للهروب هي استدعاء release_agent المُهيأ، والذي لا يتطلب أي امتيازات. نظرًا لأن هذه الخطوة قابلة دائمًا للتنفيذ، فليس لها أي تأثير على ما إذا كانت البيئة معرضة لـ CVE-2022-0492، وقررنا تركها. لا يزال بإمكانك رؤية كيف يبدو الاستغلال الكامل في لقطة الشاشة أدناه.

الشكل 6 – استغلال CVE-2022-0492 للهروب من الحاوية، عبر مساحات أسماء المستخدم.
بدلاً من إنشاء مساحات أسماء مستخدم و cgroup جديدة، يمكن استغلال أبسط إذا تم منح الحاوية القدرة CAP_SYS_ADMIN. الحاوية التي تعمل مع القدرة CAP_SYS_ADMIN مسموح لها بتثبيت cgroupfs دون أي أسئلة. كمكافأة، معظم الحاويات اليوم تعمل بدون مساحات أسماء cgroup، مما يعني أن cgroup المُثبت سيكون cgroup الجذر المضيف وملف release_agent.

الشكل 7 – في مساحة اسم cgroup الأولية، تثبيت cgroupfs سيؤدي دائمًا إلى تثبيت cgroup الجذر، بغض النظر عن cgroup الخاص بالحاوية.
حتى مع القدرة CAP_SYS_ADMIN، لا يزال AppArmor و SELinux يمنعان التثبيت، لذا الحاويات التي تعمل بأي منهما لا يمكنها استغلال CVE-2022-0492. الشكل 8 يظهر حاوية تعمل بدون AppArmor و SELinux، ومع القدرة CAP_SYS_ADMIN، تستغل CVE-2022-0492 للهروب.

الشكل 8 – استغلال CVE-2022-0492 للهروب من الحاوية عبر القدرة CAP_SYS_ADMIN.
CVE-2022-0492 تمثل ثغرة أخرى في لينكس يمكن استغلالها للهروب من الحاوية. لحسن الحظ، البيئات التي تتبع أفضل الممارسات محمية من هذه الثغرة. البيئات ذات الضوابط الأمنية الضعيفة التي تستضيف حاويات غير موثوقة أو مكشوفة للعامة معرضة لخطر كبير، كما هو متوقع. كالعادة، من الأفضل ترقية مضيفيك إلى إصدار نواة مُصلح.
نوصي بشدة بتشغيل الحاويات مع تمكين Seccomp وأي من AppArmor أو SELinux، للحماية من هذه الثغرة ومن ثغرات اليوم الصفري المستقبلية في لينكس. العديد من ثغرات تصعيد الامتيازات في نواة لينكس يمكن استغلالها للهروب من الحاوية فقط عندما يُسمح للحاوية بإنشاء مساحة اسم مستخدم جديدة، أو بعبارة أخرى، عندما تعمل الحاوية بدون Seccomp.
© 2022 - Not Sofiane Hamlaooui - جعل العالم مكانًا أفضل 🌎