یک متخصص امنیت سایبری ایتالیایی به نام سیمون مارگاریتلی کشف کرده است که هکرها تحت شرایط خاص، میتوانند مجموعهای از آسیب پذیریها را در چندین کامپوننت سیستم چاپ منبع باز CUPS مورد سوء استفاده قرار دهند تا کد دلخواه را از راه دور بر روی ماشینهای آسیب پذیر اجرا کنند.
این آسیب پذیریها که توسط سیمون مارگاریتلی شناسایی شدهاند، عبارتند از:
CVE-2024-47076 (libcupsfilters)
CVE-2024-47175 (libppd)
CVE-2024-47176 (cups-browsed)
CVE-2024-47177 (cups-filters)
نکته: این آسیب پذیریهای امنیتی بر روی سیستمهایی که دارای پیکربندی پیشفرض هستند، قابل اکسپلویت نیستند.
CUPS (مخفف Common UNIX Printing System)، پرکاربردترین سیستم چاپ (پرینت) در سیستمهای لینوکس است و عموماً توسط دستگاههایی که سیستم عاملهای مشابه یونیکس مانند FreeBSD، NetBSD و OpenBSD و مشتقات آنها را اجرا میکنند، پشتیبانی میشود.
ریشه این آسیب پذیری در یکی از کامپوننتهای CUPS به نام cups-browsed daemon نهفته است که شبکه لوکال را برای یافتن چاپگرهای به اشتراک گذاشته شده جستجو میکند و آنها را برای چاپ در دسترس قرار میدهد.
این شبیه به روشی است که ویندوز و مک میتوانند در شبکه، چاپگرهای شبکه راه دور را برای چاپ جستجو کنند.
مارگاریتلی دریافت چنانچه cups-browsed daemon فعال باشد (که به طور پیش فرض در اکثر سیستمها غیر فعال است)، روی پورت UDP 631 تنظیم شده (listen) است و همچنین به طور پیشفرض، به اتصال از راه دور هر دستگاهی در شبکه اجازه میدهد تا یک پرینتر جدید ایجاد کند.
اگر هکر بتواند سرور [1]IPP خود را مستقر و یک چاپگر [2]PPD مخرب ایجاد کند، آنگاه خواهد توانست بهصورت دستی در یک سرویس cups-browsed در حال اجرا روی پورت UDP 631 فعال شود.
در نتیجه دستگاه به طور خودکار از راه دور یک پرینتر مخرب را نصب میکند و آن را برای چاپ در دسترس قرار میدهد، اگر کاربر روی این پرینتر جدید چاپ کند، دستور مخرب روی دستگاه قربانی اجرا میشود.
فرمان اجرا در هنگام چاپ از طریق فیلتر foomatic-rip اضافه میشود که دستورات را بر روی دستگاه اجرا میکند تا کار چاپ به درستی ارائه گردد.
اگرچه در اینجا راجع به یک زنجیره اجرای کد از راه دور صحبت شد، اما هکرها برای استفاده موفق از چنین آسیب پذیریهایی میبایست بر برخی موانع غلبه کنند تا به اجرای کد از راه دور دست یابند.
اولین مورد این است که سیستمهای هدف باید دارای cups-browsed daemon فعال باشند (معمولاً به طور پیش فرض غیرفعال است) تا پورتهای UDP شبکه در دسترس باشند.
دومین مورد این است که مهاجم باید کاربر را فریب دهد تا از یک سرور چاپگر مخرب در شبکه لوکال خود که به طور ناگهانی روی دستگاه ظاهر میشود، استفاده کند.
خوشبختانه در اکثر سرورهای لینوکس، این سرویس به طور پیش فرض فعال نیست، اگرچه در یکی از ماشینهای مجازی آزمایش شده اوبونتو (Ubuntu) فعال بود.
اقدامات متقابل
از آنجایی که پچ ها هنوز در حال توسعه هستند، توسعه دهندگان Red Hat متدهایی را برای مقابله با تهدیدات احتمالی به اشتراک گذاشتهاند. بنابراین به adminها توصیه میشود که cups-browsedها را غیرفعال کرده و از اجرای مجدد سرویس خودداری کنند:
sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
کاربران Red Hat میتوانند از دستور زیر استفاده کنند تا دریابند cups-browsed روی سیستم آنها اجرا میشود یا خیر:
sudo systemctl status cups-browsed
چناچه نتیجه دستور بالا ” Active: inactive (dead)” باشد، زنجیره اکسپلویت غیرفعال بوده و سیستم آسیب پذیر نیست. اما اگر نتیجه ” running” یا ” enabled” باشد و دستورالعمل ” BrowseRemoteProtocols” دارای مقدار ” cups” در فایل پیکربندی /etc/cups/cups-browsed.conf باشد، آنگاه سیستم آسیب پذیر خواهد بود.
Margaritelli در مقاله خود توصیه کرده است که دسترسی به پورت UDP 631 و DNS-SD را مسدود کنید.
[1] Internet Printing Protocol
[2] PostScript Printer Description