آسیب‌پذیری حیاتی در Exim که اجازه می‌دهد تا کد روی سرور با امتیازات روت اجرا شود.

در سرور ایمیل Exim شناخته شده است بحرانی آسیب پذیری (CVE-2019-10149) که می تواند منجر به اجرای کد از راه دور در سرور با حقوق ریشه در هنگام پردازش یک درخواست ساخته شده خاص شود. امکان بهره برداری از مشکل در نسخه های 4.87 تا 4.91 شامل یا هنگام ساخت با گزینه EXPERIMENTAL_EVENT ذکر شده است.

در پیکربندی پیش‌فرض، حمله می‌تواند بدون پیچیدگی‌های غیرضروری توسط یک کاربر محلی انجام شود، زیرا ACL "تأیید = گیرنده" اعمال می‌شود که بررسی‌های اضافی را برای آدرس‌های خارجی انجام می‌دهد. هنگامی که تنظیمات تغییر می کنند، می تواند یک حمله از راه دور رخ دهد، مانند عمل به عنوان یک MX ثانویه برای دامنه دیگر، حذف "verify=recipient" ACL، یا تغییرات خاصی در local_part_suffix). حمله از راه دور نیز در صورتی امکان‌پذیر است که مهاجم بتواند اتصال به سرور را به مدت 7 روز باز نگه دارد (مثلاً ارسال یک بایت در دقیقه برای دور زدن یک بازه زمانی). در عین حال، این امکان وجود دارد که بردارهای حمله ساده تری برای بهره برداری از راه دور از مشکل وجود داشته باشد.

این آسیب پذیری به دلیل تأیید نادرست آدرس گیرنده در تابع deliver_message() تعریف شده در فایل /src/deliver.c ایجاد می شود. با دستکاری فرمت آدرس، مهاجم می‌تواند به جایگزینی داده‌های خود در آرگومان‌های یک فرمان فراخوانی شده از طریق تابع execv() با حقوق ریشه دست یابد. عملیات نیازی به استفاده از تکنیک‌های پیچیده مورد استفاده برای سرریز بافر یا تخریب حافظه ندارد، جایگزینی ساده کاراکتر کافی است.

مشکل مربوط به استفاده از ساختار برای تبدیل آدرس است:

deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->address));
deliver_domain = expand_string(
string_sprintf("${domain:%s}", new->address));

تابع ()expand_string یک ترکیب کننده بیش از حد پیچیده است، از جمله تشخیص دستور "${run{command arguments}" که منجر به راه اندازی یک کنترل کننده خارجی می شود. بنابراین، برای حمله در یک جلسه SMTP، یک کاربر محلی فقط باید دستوری مانند «RCPT TO «username+${run{...}}@localhost» را ارسال کند، جایی که localhost یکی از میزبان‌های فهرست local_domains است. و نام کاربری نام یک کاربر محلی موجود است.

اگر سرور به عنوان یک رله نامه کار می کند، کافی است دستور 'RCPT را از راه دور به "${run{...}}@relaydomain.com" ارسال کنید، جایی که relaydomain.com یکی از میزبان های فهرست شده در relay_to_domains است. بخش تنظیمات از آنجایی که Exim به طور پیش فرض حالت امتیاز را حذف نمی کند (deliver_drop_privilege = false)، دستورات ارسال شده از طریق "${run{...}}" به عنوان root اجرا می شوند.

قابل ذکر است که آسیب پذیری بود حذف شده است در نسخه 4.92 منتشر شده در فوریه، بدون تاکید بر اینکه این اصلاح ممکن است منجر به مشکلات امنیتی شود. هیچ دلیلی وجود ندارد که باور کنیم که آسیب‌پذیری عمدی توسط توسعه‌دهندگان Exim پنهان شده است، زیرا این مشکل در طی رفع شد. رفع می کند شکستی که هنگام انتقال آدرس‌های نادرست رخ می‌دهد و آسیب‌پذیری توسط Qualys در طول ممیزی تغییرات در Exim شناسایی شد.

اصلاحی برای نسخه‌های قبلی که همچنان در توزیع‌ها استفاده می‌شوند در حال حاضر فقط به عنوان موجود است پچ. نسخه های اصلاحی شعب قبلی برای رفع مشکل برای 11 ژوئن برنامه ریزی شده است. به روز رسانی بسته آماده است دبیان, اوبونتو, openSUSE. قوس لینوکس и کلاه نمدی مردانه آنها نسخه 4.92 را ارائه می دهند که در آن مشکل ظاهر نمی شود. مشکل RHEL و CentOS مستعد نیست، از آنجایی که Exim در مخزن بسته معمولی آنها گنجانده نشده است.

منبع: opennet.ru

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