اطلاعاتی در مورد یک آسیبپذیری اصلاح نشده (0 روزه) (CVE-2023-2156) در هسته لینوکس فاش شده است که اجازه میدهد سیستم را با ارسال بستههای IPv6 طراحیشده خاص (بسته مرگ) متوقف کند. مشکل تنها زمانی ظاهر میشود که پشتیبانی از پروتکل RPL (پروتکل مسیریابی برای شبکههای کم مصرف و با اتلاف) فعال باشد که به طور پیشفرض در توزیعها غیرفعال است و عمدتاً در دستگاههای تعبیهشده که در شبکههای بیسیم با از دست دادن بستههای بالا کار میکنند استفاده میشود.
این آسیبپذیری به دلیل پردازش نادرست دادههای خارجی در کد تجزیه پروتکل RPL ایجاد میشود، که منجر به شکست ادعا و رفتن هسته به حالت وحشت میشود. هنگام قرار دادن داده های به دست آمده از تجزیه سرآیند بسته IPv6 RPL در ساختار k_buff (Socket Buffer)، اگر فیلد CmprI روی 15، فیلد Segleft روی 1 و CmprE روی 0 تنظیم شود، بردار 48 بایتی با آدرس ها از حالت فشرده خارج می شود. به 528 بایت می رسد و وضعیتی ظاهر می شود که حافظه اختصاص داده شده برای بافر کافی نیست. در این مورد، تابع skb_push، که برای فشار دادن داده ها به ساختار استفاده می شود، عدم قیاس بین اندازه داده ها و بافر را بررسی می کند و یک حالت وحشت ایجاد می کند تا از نوشتن فراتر از مرز بافر جلوگیری کند.
اکسپلویت مثال: # ما از Scapy برای ایجاد بسته از import scapy.all استفاده می کنیم * سوکت import # از IPv6 از رابط LAN خود استفاده کنید DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # برای ارسال بسته از سوکت استفاده می کنیم sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # بسته را بسازید # Type = 3 این بسته را تبدیل به یک بسته RPL می کند # آدرس ها حاوی 3 آدرس هستند، اما چون CmprI 15 است، # هر هشت از دو آدرس اول است. به عنوان یک آدرس فشرده # Segleft = 1 برای راهاندازی تقویت، CmprI را روی 0 و CmprE را روی 0 تنظیم میکند. :، "a15::"، "a0::"]، segleft=6، lastentry=6xf3) # این بسته شیطانی را ارسال کنید sockfd.sendto(bytes(p)، (DST_ADDR, 8))
قابل ذکر است که توسعه دهندگان کرنل در ژانویه 2022 از این آسیب پذیری مطلع شدند و طی 15 ماه گذشته سه بار سعی کرده اند این آسیب پذیری را برطرف کنند، وصله هایی را در سپتامبر 2022، اکتبر 2022 و آوریل 2023 منتشر کردند، اما هر بار رفع شد. کافی نیست و آسیب پذیری قابل بازتولید نیست. در نهایت، پروژه ZDI که کار را برای رفع آسیبپذیری هماهنگ میکرد، تصمیم گرفت اطلاعات دقیقی را در مورد آسیبپذیری منتشر کند، بدون اینکه منتظر بمانید تا یک تعمیر کار در هسته در دسترس باشد.
بنابراین، این آسیبپذیری هنوز رفع نشده است. به ویژه، پچ موجود در هسته 6.4-rc2 بی اثر است. به کاربران توصیه می شود بررسی کنند که پروتکل RPL در سیستم های آنها استفاده نمی شود، که می تواند با استفاده از دستور sysctl -a | grep -i rpl_seg_enabled
منبع: opennet.ru