یک آسیبپذیری (CVE-2022-0185) در Filesystem Context API ارائه شده توسط هسته لینوکس شناسایی شده است که به کاربر محلی اجازه میدهد تا امتیازات ریشه در سیستم را به دست آورد. محققی که مشکل را شناسایی کرد، نمایشی از یک اکسپلویت را منتشر کرد که به شما امکان میدهد کد را بهعنوان ریشه در اوبونتو 20.04 در پیکربندی پیشفرض اجرا کنید. برنامه ریزی شده است که کد اکسپلویت ظرف یک هفته پس از انتشار یک به روز رسانی که این آسیب پذیری را برطرف می کند، در GitHub ارسال شود.
این آسیبپذیری در تابع legacy_parse_param() در VFS وجود دارد و به دلیل عدم بررسی صحیح حداکثر اندازه پارامترهای ارائه شده در سیستمهای فایلی است که از Filesystem Context API پشتیبانی نمیکنند. ارسال پارامتری که خیلی بزرگ است میتواند باعث سرریز متغیر عدد صحیح مورد استفاده برای محاسبه اندازه دادههای نوشتهشده شود - کد دارای یک بررسی سرریز بافر "if (len > PAGE_SIZE - 2 - اندازه)" است، که اینطور نیست. اگر مقدار اندازه بزرگتر از 4094 باشد، برای سرریز اعداد صحیح از کران پایین کار کنید (سرریز عدد صحیح، هنگام ریختن 4096 - 2 - 4095 به int بدون علامت، نتیجه 2147483648 است).
این خطا به هنگام دسترسی به یک تصویر سیستم فایل مخصوص طراحی شده اجازه می دهد تا باعث سرریز بافر و بازنویسی داده های هسته به دنبال منطقه حافظه اختصاص داده شده شود. برای سوء استفاده از آسیبپذیری، باید حقوق CAP_SYS_ADMIN داشته باشید، یعنی. اختیارات مدیر مشکل این است که اگر سیستم پشتیبانی از فضای نام کاربری را فعال کرده باشد، یک کاربر غیرمجاز می تواند چنین مجوزهایی را در یک کانتینر مجزا به دست آورد. به عنوان مثال، فضای نام کاربری به طور پیش فرض در اوبونتو و فدورا فعال است، اما در دبیان و RHEL فعال نیست (مگر اینکه از پلتفرم های جداسازی کانتینر استفاده شود).
این مشکل از زمان هسته لینوکس 5.1 ظاهر شده است و در به روز رسانی های دیروز 5.16.2، 5.15.16، 5.10.93، 5.4.173 برطرف شد. بهروزرسانیهای بستهای که این آسیبپذیری را برطرف میکنند قبلاً برای RHEL، Debian، Fedora و Ubuntu منتشر شدهاند. این اصلاح هنوز در Arch Linux، Gentoo، SUSE و openSUSE در دسترس نیست. به عنوان یک راه حل امنیتی برای سیستم هایی که از جداسازی کانتینر استفاده نمی کنند، می توانید مقدار sysctl "user.max_user_namespaces" را روی 0 تنظیم کنید: echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p /etc/ sysctl.d/userns.conf
منبع: opennet.ru