آسیب پذیری قابل بهره برداری از راه دور در سرور ایمیل qmail

محققان امنیتی از Qualys نشان داد فرصت بهره برداری آسیب پذیری در سرور ایمیل qmail، معروف در سال 2005 (CVE-2005-1513)، اما بدون اصلاح باقی ماند زیرا نویسنده qmail استدلال کرد که ایجاد یک اکسپلویت کاری غیرواقعی است که می تواند برای حمله به سیستم ها در پیکربندی پیش فرض استفاده شود. Qualys توانست اکسپلویتی را تهیه کند که این فرض را رد می کند و به شخص اجازه می دهد تا با ارسال یک پیام طراحی شده ویژه، اجرای کد از راه دور را بر روی سرور آغاز کند.

مشکل ناشی از سرریز عدد صحیح در تابع stralloc_readyplus() است که می تواند هنگام پردازش یک پیام بسیار بزرگ رخ دهد. عملیات به یک سیستم 64 بیتی با بیش از 4 گیگابایت حافظه مجازی نیاز داشت. زمانی که آسیب‌پذیری در ابتدا در سال 2005 مورد تجزیه و تحلیل قرار گرفت، دانیل جی. برنشتاین استدلال کرد که این فرض در کد که اندازه آرایه تخصیص‌یافته همیشه در مقدار 32 بیتی است، مبتنی بر این واقعیت است که هیچ‌کس گیگابایت حافظه برای هر فرآیند فراهم نمی‌کند. در طول 15 سال گذشته، سیستم های 64 بیتی روی سرورها جایگزین سیستم های 32 بیتی شده اند و مقدار حافظه عرضه شده و پهنای باند شبکه به طور چشمگیری افزایش یافته است.

نگهدارندگان بسته qmail یادداشت برنشتاین را در نظر گرفتند و حافظه موجود را هنگام شروع فرآیند qmail-smtpd محدود کردند (به عنوان مثال، در Debian 10 این محدودیت روی 7 مگابایت تنظیم شده است). اما مهندسان Qualys دریافتند که این کافی نیست و علاوه بر qmail-smtpd، می‌توان یک حمله از راه دور بر روی فرآیند qmail-local نیز انجام داد که در همه بسته‌های آزمایش شده بدون محدودیت باقی ماند. به عنوان اثبات، یک نمونه اولیه اکسپلویت تهیه شد که برای حمله به بسته دبیان با qmail در پیکربندی پیش فرض مناسب بود.
برای سازماندهی اجرای کد از راه دور در هنگام حمله، سرور به 4 گیگابایت فضای دیسک آزاد و 8 گیگابایت رم نیاز دارد.
این اکسپلویت به شما امکان می دهد هر دستور پوسته ای را با حقوق هر کاربر در سیستم اجرا کنید، به جز برای کاربران ریشه و سیستمی که زیردایرکتوری خود را در فهرست "/home" ندارند (فرآیند qmail-local با حقوق راه اندازی می شود. کاربر محلی که تحویل به او انجام می شود).

حمله انجام می شود
از طریق ارسال یک پیام نامه بسیار بزرگ، از جمله چندین خط سرصفحه، به اندازه تقریباً 4 گیگابایت و 576 مگابایت. پردازش چنین رشته ای در qmail-local منجر به سرریز اعداد صحیح در هنگام تلاش برای ارسال پیام به کاربر محلی می شود. یک سرریز عدد صحیح منجر به سرریز بافر هنگام کپی کردن داده ها و امکان بازنویسی صفحات حافظه با کد libc می شود. با دستکاری طرح داده های ارسال شده، می توان آدرس تابع "open()" را بازنویسی کرد و آن را با آدرس تابع "system()" جایگزین کرد.

در مرحله بعد، در فرآیند فراخوانی ()qmesearch در qmail-local، فایل “.qmail-extension” از طریق تابع open() باز می شود که منجر به اجرای واقعی تابع می شود.
system(.qmail-extension"). اما از آنجایی که بخش «افزونه» فایل بر اساس آدرس گیرنده تولید می‌شود (مثلاً «localuser-extension@localdomain»)، مهاجمان می‌توانند با تعیین کاربر «localuser-;command» ترتیبی دهند که دستور ارسال شود تا اجرا شود. ;@localdomain" به عنوان گیرنده پیام.

در طول تجزیه و تحلیل کد، دو آسیب‌پذیری نیز در پچ اضافی qmail-verify، که بخشی از بسته دبیان است، شناسایی شد. آسیب پذیری اول (CVE-2020-3811) به شما اجازه می دهد تا تأیید آدرس ایمیل را دور بزنید و دوم (CVE-2020-3812) منجر به نشت اطلاعات محلی می شود. به طور خاص، اولین آسیب‌پذیری به شما امکان می‌دهد تا تأیید صحت آدرس مورد استفاده در اکسپلویت را برای ارسال یک فرمان دور بزنید (تأیید برای آدرس‌های بدون دامنه، مانند «localuser-;command;» کار نمی‌کند). آسیب‌پذیری دوم می‌تواند برای بررسی وجود فایل‌ها و دایرکتوری‌ها در سیستم، از جمله مواردی که فقط برای روت در دسترس هستند (اجراهای qmail-verify با حقوق ریشه)، از طریق تماس مستقیم با کنترل‌کننده محلی استفاده شود.

برای حل مشکل، Bernstein اجرای فرآیندهای qmail را با محدودیت کلی در حافظه موجود ("softlimit -m12345678") توصیه کرد، در این صورت مشکل مسدود می شود. به عنوان یک روش جایگزین حفاظت، محدود کردن حداکثر اندازه پیام پردازش شده از طریق فایل «کنترل/داده‌بایت» نیز ذکر شده است (به طور پیش‌فرض با تنظیمات پیش‌فرض ایجاد نمی‌شود qmail آسیب‌پذیر است). علاوه بر این، "control/databytes" در برابر حملات محلی کاربران سیستم محافظت نمی کند، زیرا این محدودیت فقط توسط qmail-smtpd در نظر گرفته شده است.

مشکل روی بسته تاثیر می گذارد netqmail، در مخازن دبیان گنجانده شده است. مجموعه ای از وصله ها برای این بسته آماده شده است که هم آسیب پذیری های قدیمی از سال 2005 (با افزودن محدودیت های حافظه سخت به کد تابع alloc()) و هم مشکلات جدید در qmail-verify را حذف می کند. بصورت جداگانه آماده شده نسخه به روز شده پچ qmail-verify. توسعه دهندگان شاخه ها notqmail وصله های خود را برای جلوگیری از مشکلات قدیمی آماده کردند و همچنین شروع به کار برای حذف همه سرریزهای اعداد صحیح ممکن در کد کردند.

منبع: opennet.ru

اضافه کردن نظر