ثغرة أمنية في مجموعة أدوات إدارة حزم Snap

حددت شركة Qualys الثغرة الخطيرة الثالثة هذا العام (CVE-2022-3328) في الأداة المساعدة snap-confine، والتي تأتي مع علامة جذر SUID وتستدعيها عملية snapd لإنشاء بيئة قابلة للتنفيذ للتطبيقات الموزعة في حزم قائمة بذاتها في شكل المفاجئة. تسمح الثغرة الأمنية لمستخدم محلي لا يتمتع بأي امتيازات بتنفيذ التعليمات البرمجية كجذر في تكوين Ubuntu الافتراضي. تم إصلاح المشكلة في إصدار snapd 2.57.6. تم إصدار تحديثات الحزمة لجميع فروع Ubuntu المدعومة.

ومن المثير للاهتمام أن الثغرة الأمنية المعنية قد تم تقديمها أثناء عملية إصلاح ثغرة أمنية مماثلة في شهر فبراير في snap-confine. تمكن الباحثون من إعداد ثغرة أمنية توفر الوصول الجذري إلى Ubuntu Server 22.04، والتي، بالإضافة إلى الثغرة الأمنية في snap-confine، تتضمن أيضًا ثغرتين أمنيتين في عملية متعددة المسارات (CVE-2022-41974، CVE-2022-41973). المرتبط بتجاوز فحص السلطة عند إرسال الأوامر المميزة والعمل غير الآمن باستخدام الروابط الرمزية.

سبب الثغرة الأمنية في snap-confine هو وجود حالة سباق في الدالة must_mkdir_and_open_with_perms()، والتي تمت إضافتها للحماية من استبدال الدليل /tmp/snap.$SNAP_NAME برابط رمزي بعد التحقق من المالك، ولكن قبل استدعاء نظام التحميل استدعاء لربط الدلائل المثبت عليها للحصول على حزمة بتنسيق snap. كانت الحماية المضافة هي إعادة تسمية الدليل /tmp/snap.$SNAP_NAME إلى دليل آخر في /tmp باسم عشوائي إذا كان موجودًا وغير مملوك للجذر.

عند استغلال عملية إعادة تسمية الدليل /tmp/snap.$SNAP_NAME، استفاد الباحثون من حقيقة أن snap-confine يقوم أيضًا بإنشاء دليل /tmp/snap.rootfs_XXXXXX لجذر محتويات حزمة snap. يتم اختيار الجزء "XXXXXX" من الاسم بشكل عشوائي بواسطة mkdtemp()، ولكن يمكن التحقق من صحة الحزمة المسماة "rootfs_XXXXXX" في وظيفة sc_instance_name_validate (أي الفكرة هي أنه سيتم تعيين $SNAP_NAME على "rootfs_XXXXXX" ثم عملية إعادة التسمية سيؤدي إلى استبدال الدليل /tmp/snap.rootfs_XXXXXX بأداة الجذر الجذر).

من أجل تحقيق الاستخدام المتزامن لـ /tmp/snap.rootfs_XXXXXX وإعادة تسمية /tmp/snap.$SNAP_NAME، تم إطلاق حالتين من snap-confine. بمجرد إنشاء المثيل الأول /tmp/snap.rootfs_XXXXXX، سيتم حظر العملية وسيبدأ المثيل الثاني باسم الحزمة rootfs_XXXXXX، مما يتسبب في أن يصبح الدليل المؤقت للمثيل الثاني /tmp/snap.$SNAP_NAME هو الدليل الجذر /tmp/snap .rootfs_XXXXXX من الأول. مباشرة بعد اكتمال إعادة التسمية، تعطل المثيل الثاني، وتم استبدال /tmp/snap.rootfs_XXXXXX بمعالجة حالة السباق، كما حدث عند استغلال ثغرة فبراير. بعد الاستبدال، تمت إزالة قفل التنفيذ من المثيل الأول وتمكن المهاجمون من التحكم الكامل في الدليل الجذر المفاجئ.

كانت الخطوة الأخيرة هي إنشاء رابط رمزي /tmp/snap.rootfs_XXXXXX/tmp، والذي تم استخدامه بواسطة وظيفة sc_bootstrap_mount_namespace() لربط الدليل الحقيقي القابل للكتابة /tmp بأي دليل في نظام الملفات، منذ استدعاء mount() يتبع الروابط الرمزية قبل التثبيت. يتم حظر هذا التثبيت من خلال قيود AppArmor، ولكن لتجاوز هذا الحظر، استخدمت البرمجيات المستغلة اثنتين من نقاط الضعف المساعدة في المسارات المتعددة.

المصدر: opennet.ru

إضافة تعليق