محققان تیم Google Project Zero روشی را برای بهرهبرداری از یک آسیبپذیری (CVE-2020-29661) در پیادهسازی کنترلکننده ioctl TIOCSPGRP از زیرسیستم tty هسته لینوکس منتشر کردند و همچنین مکانیسمهای حفاظتی را که میتواند مانع از این آسیبپذیری شود را به تفصیل بررسی کردند. آسیب پذیری ها
باگ ایجاد این مشکل در هسته لینوکس در 3 دسامبر سال گذشته برطرف شد. این مشکل در هستهها تا نسخه 5.9.13 ظاهر میشود، اما اکثر توزیعها مشکل را در بهروزرسانی بستههای هسته ارائه شده در سال گذشته (Debian، RHEL، SUSE، Ubuntu، Fedora، Arch) برطرف کردهاند. یک آسیب پذیری مشابه (CVE-2020-29660) به طور همزمان در اجرای فراخوان TIOCGSID ioctl یافت شد، اما قبلاً در همه جا برطرف شده است.
این مشکل به دلیل یک خطا در هنگام تنظیم قفل ها ایجاد می شود که منجر به یک شرط مسابقه در کد drivers/tty/tty_jobctrl.c می شود که برای ایجاد شرایط استفاده پس از استفاده آزاد از فضای کاربر از طریق دستکاری ioct با فراخوانی TIOCSPGRP استفاده می شود. یک اکسپلویت کاری برای افزایش امتیاز در دبیان 10 با هسته 4.19.0-13-amd64 نشان داده شده است.
در عین حال، مقاله منتشر شده نه چندان بر تکنیک ایجاد یک اکسپلویت کاری، بلکه بیشتر بر روی ابزارهایی در هسته برای محافظت در برابر چنین آسیبپذیریها تمرکز دارد. نتیجهگیری راحتکننده نیست؛ روشهایی مانند تقسیمبندی حافظه در پشته و کنترل دسترسی به حافظه پس از آزاد شدن در عمل استفاده نمیشوند، زیرا منجر به کاهش عملکرد میشوند و حفاظت مبتنی بر CFI (Control Flow Integrity) که اکسپلویت ها را در مراحل بعدی حمله مسدود می کند، نیاز به بهبود دارد.
هنگام در نظر گرفتن اینکه چه چیزی در درازمدت تفاوت ایجاد می کند، یکی از موارد برجسته استفاده از تحلیلگرهای استاتیک پیشرفته یا استفاده از زبان های ایمن با حافظه مانند گویش های Rust و C با حاشیه نویسی غنی (مانند Checked C) برای بررسی است. حالت در مرحله ساخت قفل ها، اشیاء و اشاره گرها. روشهای حفاظتی همچنین شامل فعال کردن حالت panic_on_oops، تغییر ساختارهای هسته به حالت فقط خواندنی و محدود کردن دسترسی به تماسهای سیستم با استفاده از مکانیسمهایی مانند seccomp است.
منبع: opennet.ru