در آخرین بهروزرسانیهای هسته لینوکس (Linux Kernel)، یک آسیبپذیری امنیتی در زیرسیستم BPF برطرف شده است که میتوانست منجر به ایجاد اشارهگرهای معلق (Dangling Pointers) و تخریب حافظه شود.
جزئیات فنی مشکل
این نقص امنیتی زمانی رخ میداد که یک برنامه از نوع LWT_SEG6LOCAL با استفاده از تابع bpf_lwt_seg6_adjust_srh()، مقدار ذخیرهشده در SRH (Segment Routing Header) خود را باطل میکرد و سپس تابع bpf_skb_pull_data() را فراخوانی مینمود.
- در این سناریو، تابع دوم ممکن است باعث تخصیص مجدد حافظه برای
skb->headشود. - این اتفاق منجر میشد تا اشارهگر SRH در سطح CPU به یک ناحیه نامعتبر از حافظه اشاره کند (Dangling Pointer).
- در نهایت، عملیات اعتبارسنجی SRH پس از اجرای برنامه، اقدام به نوشتن دادهها در آن اشارهگر نامعتبر میکرد که ریسک کرش سیستم یا رفتارهای پیشبینی نشده در حافظه را به همراه داشت.
راهکار اصلاحی
برای رفع این مشکل، استفاده از تابع bpf_skb_pull_data() برای برنامههای LWT_SEG6LOCAL ممنوع شده است. با این تغییر، Verifier (بخش اعتبارسنج کد BPF) هرگونه ترکیب ناامن از این توابع کمکی (Helper Functions) را شناسایی و رد میکند تا از وقوع این خطا جلوگیری شود.