آسیب پذیری در زیرسیستم eBPF که امکان اجرای کد در سطح هسته لینوکس را فراهم می کند.

دو آسیب‌پذیری جدید در زیرسیستم eBPF شناسایی شده‌اند که به شما امکان می‌دهد کنترل‌کننده‌ها را در داخل هسته لینوکس در یک ماشین مجازی ویژه با JIT اجرا کنید. هر دو آسیب‌پذیری این امکان را فراهم می‌کنند که کد شما را با حقوق هسته، خارج از یک ماشین مجازی eBPF ایزوله اجرا کنید. اطلاعات مربوط به مشکلات توسط تیم Zero Day Initiative منتشر شد که مسابقه Pwn2Own را اجرا می کند، طی آن امسال سه حمله به لینوکس اوبونتو نشان داده شد که از آسیب پذیری های ناشناخته قبلی استفاده می کردند (چه آسیب پذیری های موجود در eBPF مربوط به این حملات گزارش نشده باشد). .

  • CVE-2021-3490 - این آسیب‌پذیری به دلیل عدم بررسی خارج از محدوده 32 بیتی هنگام انجام عملیات بیتی AND، OR، و XOR در eBPF ALU32 ایجاد می‌شود. یک مهاجم می تواند از این خطا برای خواندن و نوشتن داده ها خارج از محدوده بافر اختصاص داده شده استفاده کند. مشکل عملیات XOR از نسخه هسته 5.7-rc1 و AND و OR - از 5.10-rc1 شروع می شود.
  • CVE-2021-3489 - این آسیب‌پذیری به دلیل خطا در اجرای بافر حلقه ایجاد می‌شود و به این دلیل است که تابع bpf_ringbuf_reserve این احتمال را که اندازه منطقه حافظه اختصاص‌یافته می‌تواند کمتر از اندازه واقعی باشد را بررسی نکرده است. از ringbuf. مشکل از زمان انتشار 5.8-rc1 ظاهر می شود.

وضعیت وصله آسیب‌پذیری‌ها در توزیع‌ها را می‌توان در این صفحات ردیابی کرد: Ubuntu، Debian، RHEL، Fedora، SUSE، Arch. رفع‌ها نیز به صورت وصله (CVE-2021-3489، CVE-2021-3490) در دسترس هستند. اینکه آیا می توان از این مشکل سوء استفاده کرد یا نه بستگی به این دارد که آیا فراخوانی سیستم eBPF در دسترس کاربر باشد یا خیر. به عنوان مثال، در پیکربندی پیش‌فرض در RHEL، بهره‌برداری از آسیب‌پذیری مستلزم برخورداری کاربر از حقوق CAP_SYS_ADMIN است.

به‌طور جداگانه، می‌توانیم آسیب‌پذیری دیگری را در هسته لینوکس به نام CVE-2021-32606 ذکر کنیم که به کاربر محلی اجازه می‌دهد تا امتیازات خود را به سطح ریشه افزایش دهد. این مشکل از زمان هسته لینوکس 5.11 مشهود بوده است و ناشی از یک شرایط مسابقه در اجرای پروتکل CAN ISOTP است که امکان تغییر پارامترهای اتصال سوکت را به دلیل عدم تنظیم قفل های مناسب در تابع isotp_setsockopt () ممکن می کند. هنگام پردازش پرچم CAN_ISOTP_SF_BROADCAST.

پس از بسته شدن سوکت ISOTP، اتصال به سوکت گیرنده به قوت خود باقی می‌ماند، که می‌تواند پس از آزاد شدن حافظه مرتبط با سوکت، به استفاده از ساختارهای مرتبط با سوکت ادامه دهد (استفاده پس از آزاد شدن به دلیل تماس با ساختار isotp_sock که قبلاً با فراخوانی isotp_rcv() آزاد شده است. از طریق دستکاری داده ها، می توانید نشانگر تابع sk_error_report() را لغو کرده و کد خود را در سطح هسته اجرا کنید.

منبع: opennet.ru

اضافه کردن نظر