یک آسیبپذیری (CVE-2021-4204) در زیرسیستم eBPF شناسایی شده است که به شما امکان میدهد کنترلکنندهها را در داخل هسته لینوکس در یک ماشین مجازی خاص با JIT اجرا کنید و به کاربر محلی غیرمجاز اجازه میدهد تا به افزایش امتیاز دست یابد و کد خود را در سطح هسته لینوکس این مشکل از زمان هسته لینوکس 5.8 ظاهر شده است و ثابت نشده است (از جمله نسخه 5.16). وضعیت بهروزرسانیهایی که برای رفع مشکل در توزیعها ایجاد میشوند را میتوان در این صفحات دنبال کرد: Debian، RHEL، SUSE، Fedora، Ubuntu، Arch. اعلام شده است که یک اکسپلویت کاری ایجاد شده است که قرار است در 18 ژانویه منتشر شود (به کاربران و توسعه دهندگان یک هفته فرصت داده شده تا آسیب پذیری را برطرف کنند).
این آسیبپذیری ناشی از تأیید نادرست برنامههای eBPF است که برای اجرا ارسال شدهاند. زیرسیستم eBPF عملکردهای کمکی را ارائه می دهد که استفاده صحیح از آنها توسط یک تأیید کننده خاص تأیید می شود. برخی از توابع نیاز به ارسال یک مقدار PTR_TO_MEM به عنوان آرگومان دارند و برای جلوگیری از سرریزهای احتمالی بافر، تأیید کننده باید اندازه حافظه مرتبط با آرگومان را بداند. برای توابع bpf_ringbuf_submit و bpf_ringbuf_discard، دادههای مربوط به اندازه حافظه منتقلشده به تأییدکننده گزارش نشد، که میتوان از آن برای بازنویسی مناطق حافظه فراتر از مرز بافر هنگام اجرای کد eBPF طراحیشده ویژه استفاده کرد.
برای انجام یک حمله، کاربر باید بتواند برنامه BPF خود را بارگذاری کند، و بسیاری از توزیعهای اخیر لینوکس این توانایی را بهطور پیشفرض مسدود میکنند (از جمله دسترسی غیرمجاز به eBPF اکنون بهطور پیشفرض در خود هسته ممنوع است، از نسخه 5.16 شروع میشود). به عنوان مثال، این آسیبپذیری را میتوان در پیکربندی پیشفرض در اوبونتو 20.04 LTS مورد سوء استفاده قرار داد، اما در محیطهای Ubuntu 22.04-dev، Debian 11، openSUSE 15.3، RHEL 8.5، SUSE 15-SP4 و Fedora 33 تنها در صورتی ظاهر میشود که سرپرست را تنظیم کرده باشد. پارامتر kernel.unprivileged_bpf_disabled به 0. به عنوان راه حلی برای مسدود کردن آسیب پذیری، می توانید با دستور "sysctl -w kernel.unprivileged_bpf_disabled=1" از اجرای برنامه های BPF توسط کاربران غیرمجاز جلوگیری کنید.
منبع: opennet.ru