ثغرة أمنية في مكتبة Rust القياسية

تم التعرف على ثغرة أمنية (CVE-2022-21658) في مكتبة Rust القياسية بسبب حالة سباق في الدالة std::fs::remove_dir_all(). إذا تم استخدام هذه الوظيفة لحذف الملفات المؤقتة في تطبيق مميز، فيمكن للمهاجم تحقيق حذف ملفات وأدلة النظام العشوائية التي لا يستطيع المهاجم عادةً الوصول إليها لحذفها.

سبب الثغرة الأمنية هو التنفيذ غير الصحيح للتحقق من الروابط الرمزية قبل حذف الدلائل بشكل متكرر. بدلاً من منع تتبع الارتباطات الرمزية، يتحقق Remove_dir_all() أولاً مما إذا كان الملف عبارة عن رابط رمزي. إذا تم تعريف الرابط، فسيتم حذفه كملف، وإذا كان دليلاً، فسيتم استدعاء عملية إزالة المحتوى المتكررة. تكمن المشكلة في وجود تأخير بسيط بين الفحص وبدء عملية الحذف.

في الوقت الذي تم فيه إجراء الفحص بالفعل، ولكن عملية تعداد الدلائل للحذف لم تبدأ بعد، يمكن للمهاجم استبدال الدليل بالملفات المؤقتة برابط رمزي. إذا تم الوصول في الوقت المناسب، فستتعامل الدالة Remove_dir_all() مع الرابط الرمزي كدليل وتبدأ في إزالة المحتوى الذي يشير إليه الرابط. على الرغم من أن نجاح الهجوم يعتمد على دقة الوقت المختار لاستبدال الدليل والإصابة في اللحظة المناسبة في المرة الأولى أمر غير مرجح، إلا أنه خلال التجارب تمكن الباحثون من تحقيق هجوم ناجح متكرر بعد تنفيذ الاستغلال داخل بضع ثوان.

تتأثر جميع إصدارات Rust من 1.0.0 إلى 1.58.0. لقد تم حل المشكلة في نموذج التصحيح في الوقت الحالي (سيتم تضمين الإصلاح في الإصدار 1.58.1، المتوقع خلال ساعات قليلة). يمكنك مراقبة إزالة الثغرة الأمنية في التوزيعات على هذه الصفحات: Debian، RHEL، SUSE، Fedora، Ubuntu، Arch، FreeBSD. يُنصح جميع مستخدمي برامج Rust التي تعمل بامتيازات مرتفعة ويستخدمون وظيفة Remove_dir_all بتحديث Rust إلى الإصدار 1.58.1 بشكل عاجل. ومن المثير للاهتمام أن التصحيح الذي تم إصداره لا يحل المشكلة على جميع الأنظمة، على سبيل المثال، في نظام التشغيل REDOX OS وإصدارات macOS قبل 10.10 (Yosemite)، لا يتم حظر الثغرة الأمنية بسبب عدم وجود علامة O_NOFOLLOW، والتي تعمل على تعطيل الرموز الرمزية التالية الروابط.

المصدر: opennet.ru

إضافة تعليق