محققان شرکت فایرآی در جریان بررسی ماشین‌های آلوده Solaris، ابزار بهره‌جویی (Exploit Tool) را شناسایی کردند که امکان سوءاستفاده از یک آسیب‌پذیری تا آن زمان ناشناخته را فراهم می‌کند. آسیب‌پذیری مذکور به شرکت اوراکل به‌عنوان سازنده سیستم عامل Solaris گزارش و این شرکت آن را در مجموعه‌به‌روزرسانی‌های موسوم به Critical Patch Update ماه اکتبر خود ترمیم و اصلاح کرد.
به گزارش معاونت بررسی مرکز افتا به نقل از سایت fireeye، در این مطلب به خلاصه‌ای از گزارش فایرآی در خصوص این آسیب‌پذیری با شناسه CVE-۲۰۲۰-۱۴۸۷۱ پرداخته شده است.
کتابخانه Pluggable Authentication Modules – به اختصار PAM – از آسیب‌پذیری مذکور تأثیر می‌پذیرد. این کتابخانه، Solaris را قادر به اصالت‌سنجی کاربران می‌کند. در عین حال امکان پیکربندی پارامترهای اصالت‌سنجی (نظیر پیچیدگی و انقضای رمز عبور) را به‌صورت متمرکز برای راهبران فراهم می‌سازد.
CVE-۲۰۲۰-۱۴۸۷۱ یک خطای سرریز حافظه (Buffer Overflow) از نوع Stack-based است که از ضعفی در یکی از توابع PAM با نام parse_user_name ناشی می‌شود. خلاصه‌ای از کد این تابع در زیر قابل مشاهده است.

static int

parse_user_name(char *user_input, char **ret_username)

{

            register char *ptr;

            register int index = ۰;

            char username[PAM_MAX_RESP_SIZE];

       /* … */

            ptr = user_input;

       /* … */

             /*

             * username will be the first string we get from user_input

             * – we skip leading whitespaces and ignore trailing whitespaces

             */

            while (*ptr != ‘\۰’) {

                  if ((*ptr == ‘ ‘) || (*ptr == ‘\t’))

                               break;

                  else {

                               username[index] = *ptr;

                               index++;

                               ptr++;

                  }

            }

             /* ret_username will be freed in pam_get_user(). */

            if ((*ret_username = malloc(index + ۱)) == NULL)

                  return (PAM_BUF_ERR);

            (void) strcpy(*ret_username, username);

            return (PAM_SUCCESS);

}

امکان بهره‌جویی از این آسیب‌پذیری در زمانی که یک نام کاربری با طولی بیشتر از PAM_MAX_RESP_SIZE (طول ۵۱۲ بایت) به parse_user_name ارسال شود فراهم می‌شود. محققان فایرآی احتمال می‌دهند که CVE-۲۰۲۰-۱۴۸۷۱ برای دهه‌ها وجود داشته است. یکی از دلایل مطرح شده آن است که تنها زمانی امکان بهره‌جویی فراهم می‌شود که برنامه محدودیتی در خصوص طول نام‌های کاربری لحاظ نکرده باشد. برای مثال، در مواردی نرم‌افزارهای قابل دسترس در شبکه پالایش طول نام کاربری را بر روی سرور SSH اعمال نمی‌کنند و همین موضوع موجب می‌شود تا امکان بهره‌جویی فراهم شود.
اصالت‌سنجی موسوم به SSH Keyboard-Interactive یک سازوکار اصالت‌سنجی Passthrough است که در آن پودمان SSH به‌عنوان واسط درخواست‌ها و پاسخ‌ها میان سرور کتابخانه PAM و کلاینت‌های آن عمل می‌کند. این سازوکار به‌نحوی طراحی شده بوده که از حالات خاصی از اصالت‌سنجی نظیر روش “دو مرحله‌ای” (Two-factor) بدون نیاز به اعمال تغییر در پودمان SSH پشتیبانی کند. با دست‌درازی به تنظیمات SSH کلاینت برای اعمال اصالت‌سنجیKeyboard-Interactive  و درخواست نام کاربری بجای ارسال آن از طریق ابزارهای معمول، مهاجم خواهد توانست ورودی نامحدودی را به تابع parse_user_name ارسال کند.
برای تشخیص سریع آسیب‌پذیر بودن نسخ مختلف Solaris محققان فایرآی نمونه اثبات‌گری (Proof of Concept) را توسعه داده‌اند که با فراهم کردن بستر بهره‌جویی، نسبت به از کارانداختن سرور SSH تلاش می‌کند. کلاینت استاندارد OpenSSH تمامی گزینه‌های مورد نیاز برای حساس کردن این آسیب‌پذیری را فراهم کرده است.

نمایش پیام ” Authentication failed” توسط کلاینت SSH به‌معنای آسیب‌پذیر بودن سرور است. در صوت غیرآسیب‌پذیر بودن PAM و وارد کردن یک نام کاربری طولانی، سرور SSH مجدد درخواست نام کاربری می‌کند.
وجود آسیب‌پذیری سرریز حافظه در کتابخانه PAM همچنین می‌تواند موجب شود که سرور SSH مشابه با آنچه که در تصویر زیر نشان داده شده از کار بیفتد. چنانچه سرور SSH بدون هیچ دیباگر پیوست شده از کار بیفتد سیستم عامل یک crash dump را در /core ایجاد می‌کند. در حقیقت وجود یک /core نشأت گرفته شده از sshd بر روی ماشین Solaris می‌تواند نشانه‌ای از مورد بهره‌جویی قرار گرفتن این آسیب‌پذیری باشد.

سیستم‌های متأثر از آسیب‌پذیری مذکور به شرح زیر است:

  •     برخی نسخ Solaris ۹
  •     تمامی نسخ Solaris ۱۰
  •     Solaris ۱۱,۰
  • گر چه تابع parse_user_name در Solaris ۱۱,۱ و نسخ بعد از آن، قبل از اعمال اصلاحیه مربوطه آسیب‌پذیر تلقی می‌شوند اما در این نسخ اعمال تغییرات غیرمرتبط بر روی کتابخانه PAM موجب پالایش طول نام کاربری قبل از دریافت آن توسط تابع آسیب‌پذیر شده و در عمل امکان بهره‌جویی در بستر SSH فراهم نمی‌شود. اما اگر تابع parse_user_name به روش دیگری نیز قابل دسترس باشد ممکن بودن بهره‌جویی از آن محتمل خواهد بود.
  •     Illumos، نسخه OpenIndiana ۲۰۲۰,۰۴

اوراکل در مهر ماه اقدام به عرضه اصلاحیه آسیب‌پذیری مذکور برای نسخ ۱۰ و ۱۱ سیستم عامل Solaris کرد.
نظر به پایان پشتیبانی Solaris ۹، اوراکل اصلاحیه‌ای برای آن عرضه نکرده است. برای Solaris ۹ و در مواردی که امکان اعمال اصلاحیه برای نسخ ۱۰ و ۱۱ این سیستم عامل برای سازمان فراهم نیست فایرآی پیاده‌سازی راهکار موقت زیر را توصیه کرده است:
۱-    ویرایش /etc/ssh/sshd_config
۲-    افزودن خطوط ChallengeResponseAuthentication no و KbdInteractiveAuthentication no
۳-    راه‌اندازی مجدد سرور SSH
باید توجه داشت در حالی که این راهکار فرصت بهره‌جویی از آسیب‌پذیری را از طریق اصالت‌سنجی SSH Keyboard-Interactive از مهاجم سلب می‌کند اما ممکن است راه‌های دیگری نیز برای حمله به تابع parse_user_name فراهم باشد؛ لذا ارتقای سیستم‌های Solaris ۹ و اعمال به‌روزرسانی‌ زیر (برای دیگر نسخ آسیب‌پذیر) توصیه اصلی و مؤثر در مقابله با بهره‌جوهای مبتنی بر این آسیب‌پذیری است.https://www.oracle.com/security-alerts/cpuoct۲۰۲۰.html#AppendixSUNSمشروح گزارش فایرآی در لینک زیر قابل دریافت و مطالعه است:https://www.fireeye.com/blog/threat-research/۲۰۲۰/۱۱/critical-buffer-overflow-vulnerability-in-solaris-can-allow-remote-takeover.html(با سپاس از شرکت مهندسی شبکه گستر برای همکاری در تهیه این گزارش)