در آخرین بهروزرسانیهای هسته لینوکس (Linux kernel)، یک آسیبپذیری امنیتی در بخش BPF شناسایی و برطرف شده است. این مشکل مربوط به نحوه اعتبارسنجی BPF_F_CPU برای شناسههای CPU پراکنده (sparse CPU IDs) است.
جزئیات فنی آسیبپذیری
در معماری BPF، مقدار BPF_F_CPU شناسه CPU هدف را در ۳۲ بیت بالایی از پرچمهای عملیات نقشه (map operation flags) ذخیره میکند. تابع bpf_map_check_op_flags() در نسخههای آسیبپذیر، این شناسه را با num_possible_cpus() مقایسه میکرد. نکته کلیدی این است که num_possible_cpus() تعداد کل CPUهای ممکن را برمیگرداند، نه لزوماً محدوده یا سقف شناسههای CPU را.
سناریوی اکسپلویت
این نقص بهویژه در محیطهای مجازیسازی شده مانند arm64 QEMU guest که دارای حفره در Device-tree مربوط به CPU هستند، قابل مشاهده است. برای مثال، اگر ماسک CPUهای ممکن به صورت 0, 2-3 باشد، یک برنامه در فضای کاربر (userspace) میتواند با استفاده از syscallهای خام bpf()، مقادیری را ارسال کند که منجر به رفتارهای پیشبینی نشده یا ناپایداری در هسته شود.
تأثیر و راهکار
این باگ میتواند منجر به دسترسیهای غیرمجاز یا کرش کردن سیستم (DoS) در محیطهای خاصی از زیرساختهای ابری و مجازی شود. توسعهدهندگان هسته لینوکس با اصلاح منطق مقایسه در تابع اعتبارسنجی، این مشکل را برطرف کردهاند. به مدیران سیستم و مهندسین امنیت توصیه میشود سریعاً هسته سیستمهای خود را به آخرین نسخه پایدار بهروزرسانی کنند.