خانه » آسیب‌پذیری DirtyClone در کرنل لینوکس امکان افزایش سطح دسترسی کاربران لوکال به روت را از طریق بسته‌های کلون‌شده فراهم می‌کند

آسیب‌پذیری DirtyClone در کرنل لینوکس امکان افزایش سطح دسترسی کاربران لوکال به روت را از طریق بسته‌های کلون‌شده فراهم می‌کند

توسط Vulnerbyte_News
13 بازدید

آسیب‌پذیری DirtyClone یک ضعف امنیتی جدید در کرنل لینوکس است که به خانواده آسیب‌پذیری‌های DirtyFrag تعلق دارد و امکان افزایش سطح دسترسی (Privilege Escalation) تا سطح root را برای کاربران لوکال فراهم می‌کند. آسیب‌پذیری DirtyClone که با شناسه CVE-2026-43503 و امتیاز CVSS 8.8 ردیابی می‌شود، از طریق سوءاستفاده از بسته‌های شبکه کلون‌شده (Cloned Packets) و دستکاری حافظه مبتنی بر فایل (File-backed Memory)، مسیر دستیابی به دسترسی root را هموار می‌کند.

این ضعف امنیتی در 25 ژوئن 2026 توسط تیم JFrog Security Research همراه با انتشار نخستین اکسپلویت عمومی برای این واریانت تشریح شد. همچنین پچ این آسیب‌پذیری در تاریخ 21 می به شاخه اصلی (Mainline) کرنل لینوکس اضافه شده است؛ بنابراین، سیستم‌هایی که هنوز این به‌روزرسانی را دریافت نکرده‌اند، همچنان در معرض سوءاستفاده قرار دارند.

مکانیزم فنی آسیب‌پذیری DirtyClone در کرنل لینوکس

این آسیب‌پذیری DirtyClone زمانی رخ می‌دهد که کرنل لینوکس در فرآیند کپی داخلی یک بسته شبکه به‌دلیل عملکرد دو تابع کمکی، یک فلگ امنیتی (Safety Flag) را از دست می‌دهد. این فلگ مشخص می‌کند که فرگمنت‌های بسته شبکه با حافظه یک فایل روی دیسک به‌اشتراک گذاشته شده‌اند و از دست رفتن آن می‌تواند زمینه سوءاستفاده از این آسیب‌پذیری را فراهم کند.

در سناریوی حمله، مهاجم ابتدا یک فایل باینری دارای دسترسی بالا مانند /usr/bin/su  را در حافظه بارگذاری کرده و سپس صفحات حافظه آن را به یک بسته شبکه (Network Packet) متصل می‌کند. پس از آن، کرنل را وادار می‌کند تا یک نسخه کلون‌شده از این بسته ایجاد کند. این بسته کلون‌شده از یک تونل IPsec تحت کنترل مهاجم عبور می‌کند و در مرحله رمزگشایی، بررسی‌های احراز هویت باینری با بایت‌های دلخواه مهاجم بازنویسی می‌شود. در نتیجه، هر بار که دستور su اجرا شود، بدون انجام فرآیند احراز هویت، دسترسی root در اختیار کاربر قرار می‌گیرد.

چرا شناسایی این حمله دشوار است؟

نکته مهم این است که در این حمله، فایل اصلی روی دیسک هیچ‌گاه تغییر نمی‌کند و تمام دستکاری‌ها تنها روی نسخه‌ای از فایل که در حافظه کرنل قرار دارد، اعمال می‌شوند. به همین دلیل، ابزارهای بررسی یکپارچگی فایل (File Integrity) هیچ تغییری را شناسایی نمی‌کنند و این حمله نیز هیچ ردپایی در لاگ‌های ممیزی (Audit Logs) بر جای نمی‌گذارد. هرچند با راه‌اندازی مجدد (Reboot) سیستم، نسخه اصلی باینری دوباره در حافظه بارگذاری می‌شود، اما در آن زمان مهاجم معمولاً پیش از هرگونه بررسی یا واکنش، به دسترسی root دست یافته است.

پیش‌نیازهای سوءاستفاده از آسیب‌پذیری DirtyClone

برای سوءاستفاده از آسیب‌پذیری DirtyClone، مهاجم باید مجوز CAP_NET_ADMIN را برای پیکربندی یک تونل IPsec روی رابط Loopback در اختیار داشته باشد. در توزیع‌های Debian و Fedora، قابلیت ایجاد فضاهای نام کاربری توسط کاربران عادی (Unprivileged User Namespaces) به‌صورت پیش‌فرض فعال است؛ بنابراین، یک کاربر لوکال می‌تواند با ایجاد یک فضای نام کاربری جدید، این مجوز را به دست آورد.

در Ubuntu 24.04 و نسخه‌های جدیدتر، AppArmor ایجاد فضاهای نام کاربری را محدود می‌کند؛ ازاین‌رو، مسیر پیش‌فرض سوءاستفاده از این آسیب‌پذیری مسدود می‌شود. با این حال، از آنجا که حافظه کش صفحات (Page Cache) در سطح میزبان (Host Level) میان تمام فضاهای نام کاربری مشترک است، هرگونه تغییری که در یک فضای نام کاربری ایجاد شود، تمام پردازه‌های در حال اجرا روی همان سیستم را تحت تأثیر قرار می‌دهد.

سیستم‌هایی که بیشترین ریسک را در برابر این آسیب‌پذیری دارند عبارتند از:

  • سرورهای چندمستاجری (Multi-tenant)
  • سامانه‌های اجرای یکپارچه‌سازی مداوم (CI Runners)
  • میزبان‌های کانتینر (Container Hosts)
  • کلاسترهای کوبرنتیز (Kubernetes Clusters) که در آن‌ها کاربران غیرقابل‌اعتماد امکان ایجاد فضای نام کاربری را دارند.

محققان JFrog Security Research نیز موفق شده‌اند سوءاستفاده عملی از این آسیب‌پذیری را روی سیستم‌های Debian، Ubuntu و Fedora با پیکربندی پیش‌فرض فضای نام کاربری با موفقیت تأیید کنند.

چهارمین آسیب‌پذیری از یک الگوی تکرارشونده

آسیب‌پذیری DirtyClone چهارمین ضعف افزایش سطح دسترسی است که طی ماه‌های اخیر با یک الگوی مشترک در کرنل لینوکس شناسایی شده است. وجه مشترک تمام این آسیب‌پذیری‌ها این است که حافظه مبتنی بر فایل به‌اشتباه به‌عنوان داده یک بسته شبکه پردازش می‌شود و در ادامه، یک عملیات شبکه به‌جای کپی کردن داده، محتوای همان حافظه را مستقیماً بازنویسی می‌کند.

در ماه‌های اخیر، آسیب‌پذیری‌های این خانواده به‌ترتیب زیر شناسایی شده‌اند:

  • آسیب‌پذیریCopy Fail با شناسه CVE-2026-31431 نخستین مورد از این خانواده بود که در اواخر آوریل شناسایی شد. این آسیب‌پذیری با سوءاستفاده از ماژول algif_aead امکان نوشتن چهار بایت در حافظه کش صفحات را فراهم می‌کرد.
  • آسیب‌پذیری DirtyFrag با شناسه‌های CVE-2026-43284 و CVE-2026-43500 در 7 می شناسایی شد. این آسیب‌پذیری با زنجیره‌سازی مسیرهای IPsec ESP و RxRPC، امکان انجام عملیات نوشتن دلخواه را برای مهاجم فراهم می‌کرد.

آسیب‌پذیری Fragnesia با شناسه  CVE-2026-46300 نیز در 13 می شناسایی شد. این آسیب‌پذیری با سوءاستفاده از یک باگ حذف فلگ (Flag-dropping) در تابع  skb_try_coalesce()، موفق به دور زدن پچ ارائه‌شده برای DirtyFrag می‌شد.

آسیب‌پذیری DirtyClone

چرا پچ‌های قبلی نتوانستند خانواده DirtyFrag را متوقف کنند؟

هر یک از پچ‌های  منتشرشده، تنها بخشی از مسیرهای اجرای کد را مسدود کردند، اما مسیرهای دیگری همچنان بدون اصلاح باقی ماندند. اکسپلویت ارائه‌شده برای آسیب‌پذیری DirtyClone عمدتاً بر تابع pskb_copy_fclone() متمرکز است، هرچند تابع skb_shift() نیز تحت تأثیر این ضعف قرار دارد. با این حال، اصلاحیه جامع‌تر مربوط به CVE‑2026‑43503 فراتر از این توابع عمل کرده و سایر توابع کمکی انتقال فرگمنت‌ها (Fragment Transfer Helpers) را نیز پوشش می‌دهد؛ مسیرهایی که در آن‌ها نیز امکان از دست رفتن فلگ Shared‑frag وجود دارد.

با این وجود، منشأ اصلی این آسیب‌پذیری یک تابع کمکی دارای ضعف نیست، بلکه نقض یک قاعده طراحی (Contract) در کرنل است. بر این اساس، تمام مسیرهای اجرای کد که مسئول انتقال فرگمنت‌های skb هستند، باید در تمامی مراحل بیت Shared-frag  را حفظ کنند. از دست رفتن این بیت در هر یک از این مسیرها می‌تواند منجر به شکل‌گیری یک آسیب‌پذیری جدید شود.

سازوکار شبکه بدون کپی (Zero‑Copy) در کرنل لینوکس این امکان را فراهم می‌کند که حافظه مبتنی بر فایل مستقیماً به‌عنوان داده بسته‌های شبکه استفاده شود. در چنین معماری‌ای، از دست رفتن تنها یک فلگ در هر نقطه از زنجیره پردازش می‌تواند یک بهینه‌سازی عملکردی را به قابلیتی برای نوشتن دلخواه در حافظه (Write Primitive) تبدیل کند. در عمل، هر یک از این آسیب‌پذیری‌ها مسیری از اجرای کد را آشکار کرده‌اند که در آن قاعده طراحی مربوط به حفظ این فلگ رعایت نشده است.

در همین راستا، Hyunwoo Kim، پژوهشگر اصلی آسیب‌پذیری DirtyFrag, در تاریخ 16 می یک پچ چندبخشی برای کرنل لینوکس ارائه کرد که چندین تابع کمکی انتقال فرگمنت باقی‌مانده را پوشش می‌داد. این اصلاحیه ترکیبی در 21 می وارد کرنل اصلی شد (Commit: 48f6a5356a33)، در 23 می به‌عنوان CVE-2026-43503 ثبت گردید و در نهایت در 24 می همراه با انتشار Linux v7.1-rc5 در دسترس قرار گرفت.

توصیه‌های امنیتی

برای رفع آسیب‌پذیری DirtyClone، توصیه می‌شود در اسرع وقت کرنل سیستم‌عامل خود را به‌روزرسانی کنید. این اصلاحیه در نسخه Upstream کرنل در v7.1-rc5 اعمال شده و سپس به شاخه‌های پایدار (Stable) و LTS نیز بک‌پورت شده است. همچنین توزیع‌های اصلی لینوکس شامل Ubuntu، Debian و SUSE برای این آسیب‌پذیری اطلاعیه‌های امنیتی منتشر کرده‌اند و برای Red Hat نیز یک مورد گزارش در Bugzilla ثبت شده است.

اگر در حال حاضر امکان نصب به‌روزرسانی وجود ندارد، می‌توان با چند اقدام موقت سطح حمله را کاهش داد. نخست، می‌توان فضاهای نام کاربری را محدود کرد؛ به‌عنوان مثال در Debian و Ubuntu با تنظیم مقدار kernel.unprivileged_userns_clone=0 این قابلیت غیرفعال می‌شود، در حالی‌که در سایر توزیع‌ها این محدودسازی از طریق مکانیزم‌های متفاوتی انجام می‌گیرد. همچنین می‌توان با غیرفعال‌سازی ماژول‌های کرنل esp4، esp6 و rxrpc سطح ریسک را کاهش داد. هرچند این اقدام ممکن است عملکرد IPsec و AFS را مختل کند و تنها در شرایطی مؤثر است که این ماژول‌ها به‌صورت قابل بارگذاری استفاده شوند، نه اینکه مستقیماً در کرنل کامپایل شده باشند.

نکات مهم امنیتی:

  • این اقدامات صرفاً موقتی هستند و به هیچ عنوان جایگزین نصب پچ‌های امنیتی نمی‌شوند.
  • هدف از اعمال این تنظیمات تنها کاهش سطح حمله است.
  • با توجه به ماهیت این دسته از آسیب‌پذیری‌ها، همچنان این احتمال وجود دارد که در آینده نیز CVEهای جدیدی در همین مسیر شناسایی و گزارش شوند.
  • در نهایت، تنها راهکار قطعی برای آسیب‌پذیری DirtyClone نصب به‌روزرسانی‌های رسمی کرنل و دریافت پچ‌های توزیع است؛ سایر روش‌ها صرفاً برای کاهش ریسک موثر هستند.

با توجه به ماهیت این دسته از آسیب‌پذیری‌ها، احتمال تداوم شناسایی موارد جدید در خانواده DirtyFrag همچنان وجود دارد. هر تابعی که توصیفگرهای فرگمنت شبکه (Fragment Descriptors) را بدون حفظ فلگ Shared-frag منتقل کند، می‌تواند به‌عنوان یک آسیب‌پذیری جدید مطرح شود. بنابراین، در فرآیند بررسی امنیتی باید تمامی مسیرهایی مورد بازبینی قرار گیرند که در آن‌ها هنگام انتقال فرگمنت‌ها، مقادیر skb_shinfo()->flags دستکاری می‌شود.

منابع

همچنین ممکن است دوست داشته باشید

پیام بگذارید