محققان امنیتی از 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، که بخشی از بسته دبیان است، شناسایی شد. آسیب پذیری اول (
برای حل مشکل، Bernstein اجرای فرآیندهای qmail را با محدودیت کلی در حافظه موجود ("softlimit -m12345678") توصیه کرد، در این صورت مشکل مسدود می شود. به عنوان یک روش جایگزین حفاظت، محدود کردن حداکثر اندازه پیام پردازش شده از طریق فایل «کنترل/دادهبایت» نیز ذکر شده است (به طور پیشفرض با تنظیمات پیشفرض ایجاد نمیشود qmail آسیبپذیر است). علاوه بر این، "control/databytes" در برابر حملات محلی کاربران سیستم محافظت نمی کند، زیرا این محدودیت فقط توسط qmail-smtpd در نظر گرفته شده است.
مشکل روی بسته تاثیر می گذارد
منبع: opennet.ru