کلیه حقوق مطالب متعلق به Vulnerlab است. بازنشر با ذکر منبع مجاز است.

تحلیل آسیب پذیری CVE-2024-53141

Missing Range Check vulnerability CVE-2024-53141

۱. مقدمه

آسیب‌پذیری CVE-2024-53141 در هسته لینوکس (Linux Kernel)، زیرسامانه Netfilter و ماژول ipset، ناشی از فقدان بررسی محدوده (Missing Range Check) در تابع bitmap_ip_uadt می‌باشد. این نقص زمانی رخ می‌دهد که ویژگی IPSET_ATTR_IP_TO وجود نداشته باشد، اما IPSET_ATTR_CIDR تعریف شده باشد؛ در این شرایط، مقادیر ip و ip_to جابه‌جا شده و بررسی محدوده ورودی به‌درستی انجام نمی‌شود. در نتیجه، مهاجم محلی دارای سطح دسترسی لازم می‌تواند با ارسال ورودی‌های دست‌کاری‌شده، دسترسی خارج از محدوده حافظه (Out-of-Bounds Access) را ایجاد کرده و به‌طور بالقوه محرمانگی، یکپارچگی و دسترس‌پذیری سیستم را تحت تأثیر قرار دهد. این آسیب‌پذیری دارای شدت بالا (High) و امتیاز CVSS 3.1 برابر با 7.8 است.

   ۱.۱ خلاصه ای از مشخصات CVE

بر اساس آخرین قوانینkernelCTF، مؤلفه nftables  در زیرسیستم Netfilter غیرفعال است. با این حال، برخی مؤلفه های Netfilter مانند ipset همچنان به صورت پیش فرض فعال هستند. آسیب پذیری CVE-2024-53141 یک آسیب پذیری دسترسی خارج از محدوده (Out-of-Bounds Access) است که در جریان kernelCTF مورد بهره برداری قرار گرفته است. اصلاح این آسیب پذیری در این commit انجام شده است. در این نوشته، علت ریشه ای (Root Cause) آسیب پذیری و نحوه بهره برداری از آن را تحلیل خواهم کرد.

ابزار  ipset در  Netfilter برای مدیریت مجموعه هایی (Sets) از آدرس های IP، شبکه ها و پورت ها استفاده می شود. این ابزار امکان گروه بندی چندین آدرس IP، محدوده (Range) یا شبکه را در قالب یک مجموعه واحد فراهم می کند تا مدیریت آن ها با کارایی بیشتری انجام شود. یا به عبارتی دیگر زیرسیستم ipset در Linux Kernel چارچوبی برای مدیریت کارآمد مجموعه هایی از آدرس های IP، شبکه ها و شماره پورت ها است که برای Packet Filtering با کارایی بالا مورد استفاده قرار می گیرد و معمولا در کنار iptables یا nftables به کار می رود.

این زیرسیستم از انواع مختلف Set پشتیبانی می کند که هر یک برای موارد استفاده متفاوت بهینه سازی شده اند؛ از جمله bitmap:ip. این نوع Set برای ذخیره سازی و جستجوی کارآمد یک محدوده پیوسته از آدرس های IPv4 با استفاده از یک ساختار داده Bitmap طراحی شده است. بر اساس اطلاعات منتشرشده در NVD، آسیب‌پذیری CVE-2024-53141 در هسته لینوکس با اعمال اصلاحیه‌ای در زیرسامانه Netfilter و ماژول ipset برطرف شده است. این اصلاحیه با هدف افزودن بررسی محدوده (Range Check) ازدست‌رفته در تابع bitmap_ip_uadt و حذف بررسی‌های غیرضروری انجام شده است.

هنگامی که ویژگی tb[IPSET_ATTR_IP_TO] وجود ندارد، اما ویژگی tb[IPSET_ATTR_CIDR] موجود است، مقادیر ip و ip_to تا حدودی جابه‌جا می‌شوند. بنابراین، بررسی محدوده (Range Check) برای ip باید در مرحله بعد انجام شود، اما این بخش از کد پیاده‌سازی نشده است و به نظر می‌رسد آسیب‌پذیری ناشی از همین موضوع باشد. در نتیجه، باید بررسی‌های محدوده ازدست‌رفته اضافه شوند و بررسی‌های محدوده غیرضروری حذف شوند.

      ۱.۱.۱ معیارها (Metricx)  – CVSS V3.x

Vector:  CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Base Score:7.8 HIGH

NIST: NVD

Vector:  CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Base Score:7.8 HIGH

CNA: kernel.org

      ۱.۱.۲ شمارش نقاط ضعف (Weakness Enumeration)

Source

CWE Name

CWE-ID

NIST

Insufficient Information

NVD-CWE-noinfo

 
 

 

 

      ۱.۱.۳ پیکربندی‌های نرم‌افزاری شناخته‌شده تحت تأثیر (Known Affected Software Configurations)

Up to (excluding)
4.19.325

From (including)
2.6.39

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

Up to (excluding)
6.6.64

From (including)
4.20

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

Up to (excluding)
6.11.11

From (including)
6.7

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

Up to (excluding)
6.12.2

From (including)
6.12

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

نسخه­‌های تست شده از پلتفرم که توسط این آسیب­‌پذیری پشتیبانی می شود:

نسخه کرنل تست شده در آزمایشگاه 6.6.62 است و روی x64 ubuntu 24.04 نصب شده است. اما بر اساس سایت nist نسخه های آسیب پذیر بیشتر است و در جدول مربوطه ذکر شده است.

سناریوی اجرا و ملزومات اجرای آسیب‌­پذیری:

سناریو اجرا به شرح زیر است:

  1. پیش از هرچیز باید نسخه کرنل آسیب پذیر و سرویس های پیش نیاز نصب و راه اندازی شده باشد.
  2. پس از آن باید kaslr غیر فعال شود و کرنل پیش فرض در grub به نسخه آسیب پذیر تغییر داده شود.
  3. سپس اقدام به اجرای سرویس های مورد نظر میکنیم.
  4. پس از آن باید آدرس کرنل base را دستی در سورس کد تنظیم کنیم و سورس را کامپایل کنیم.
  5. پس از آن اکسپولیت را اجرا کرده و به ما دسترسی شل با سطح دسترسی کاربر ریشه یا روت میدهد.(در poc ها kaslr هم دارد اما در تست های انجام شده کار نکرد که برای کشف علت در نسخه سیستم عامل فوق نیازمند تحلیل جهت کشف مشکل بود که در این سند انجام نشده است.)

   ۱.۲ سناریوی اجرای آسیب پذیری

ما در این بخش به نحوه اجرای آسیب پذیری در محیط اجرا و شرح فایل‌های ارائه شده، می‌پردازیم. محیطی که در بخش قبل به آن اشاره شد، کاملا آماده است. کافیست ماشین را روشن کرده و مراحل را مطابق زیر انجام دهید:

توجه: نام کاربری test و با رمز عبور 1 مشترک برای این کاربر و کاربر root است.

توجه: نسخه راهنما در دسکتاپ وجود دارد، آن را اجرا کنید و مراحل را مطابق آن انجام دهید.

  • باز کردن دو ترمینال
  • در ترمینال اول دستورات زیر را وارد می‌کنیم:
 
 

 

 

				
					cd /home/test/CVE-2024-53141_cos_mitigation/exploit/cos-109-17800.372.31
sudo cat /proc/kallsyms | grep core_pattern
gnome-text-editor exploit.c

				
			
  • پس از باز شدن سورس باید مقدار ثابت core_pattern را با بخش های hard-coded در متن عوض کنید. مطابق تصویر زیر آدرس ffffffffb786d580 را جایگزین مقادیر پیش فرض کرده و تغییرات را ذخیره می‌کنیم:
Missing Range Check vulnerability CVE-2024-53141
  • سپس اقدام به کامپایل سورس می‌کنیم:
				
					make exploit_org
				
			
  • پس از آن دستورات و سرویس‌های مورد نظر را اجرا می‌کنیم (اکثر دستورات آن جهت تحلیل استفاده شده است):
آسیب‌پذیری CVE-2024-53141 - آسیب‌پذیری هسته لینوکس (Linux Kernel)
آسیب‌پذیری bitmap_ip_uadt - اکسپلویت CVE-2024-53141 - تحلیل آسیب‌پذیری هسته لینوکس - رفع آسیب‌پذیری هسته لینوکس
  • حال ترمینال جدیدی باز کنید (چون این ترمینال دستورات با روت اجرا شده است، ترمینال دیگری باز می‌کنیم تا سطح دسترسی آن پایین باشد)
				
					cd /home/test/CVE-2024-53141_cos_mitigation/exploit/cos-109-17800.372.31
whoami
id

				
			
Linux Kernel Netfilter ipset security vulnerability Out-of-Bounds Access
  • با اجرای دستورات بالا مشاهده می‌کنیم که کاربر عادی است و سپس اقدام به اجرای دستورات زیر جهت اجرای PoC و تست آن خواهیم کرد:
				
					./exploit_org
whoami
id

				
			
آسیب‌پذیری CVE-2024-53141 - آسیب‌پذیری هسته لینوکس (Linux Kernel) - آسیب‌پذیری Netfilter ipset - آسیب‌پذیری امنیتی هسته لینوکس - آسیب‌پذیری ناشی از عدم بررسی محدوده (Missing Range Check)

۱.۳ تحلیل آسیب پذیری

۱.۳.۱ تحلیل آسیب پذیری و علت وقوع آن

در ادامه ما ترجمه دو سند تحلیلی از دو محقق را ارائه خواهیم کرد:

مقاله اول:
۱.۳.۱.۱ مرور کلی

ابزار  ipset در Netfilter برای مدیریت مجموعه هایی (Sets) از آدرس های IP، شبکه ها و پورت ها استفاده می شود. این ابزار امکان گروه بندی چندین آدرس IP، محدوده (Range) یا شبکه را در قالب یک مجموعه واحد فراهم می کند تا مدیریت آن ها با کارایی بیشتری انجام شود.

پردازه ها می توانند از طریق  NETLINK با ipset تعامل داشته باشند. دستورات پشتیبانی شده و Handlerهای مربوط به آن ها در متغیر  ip_set_netlink_subsys_cb[] تعریف شده اند. برای استفاده از ipset، ابتدا باید با استفاده از دستور IPSET_CMD_CREATE یک مجموعه ایجاد کنید. پس از ایجاد مجموعه، می توانید با استفاده از دستور IPSET_CMD_ADD آدرس های IP جدیدی را به آن اضافه کنید.

				
					static const struct nfnl_callback ip_set_netlink_subsys_cb[IPSET_MSG_MAX] = {
	// [...]
[IPSET_CMD_CREATE] = { // [1]
	.call       = ip_set_create,
	.type       = NFNL_CB_MUTEX,
	.attr_count = IPSET_ATTR_CMD_MAX,
    .policy     = ip_set_create_policy,
},
// [...]
[IPSET_CMD_ADD] = { // [2]
	.call       = ip_set_uadd,
	.type       = NFNL_CB_MUTEX,
	.attr_count = IPSET_ATTR_CMD_MAX,
	.policy     = ip_set_adt_policy,
  },
  // [...]

};
				
			

مقالات مرتبط

wpChatIcon
wpChatIcon