آسیب پذیری اجرای کد با امتیاز Root در OpenSSH
- يكشنبه, ۱۷ تیر ۱۴۰۳، ۰۹:۵۶ ق.ظ
آسیب پذیری بنام regreSSHion در OpenSSH کشف شده که به مهاجم احرازهویت نشده، امکان اجرای کد از راه دور با امتیاز root را در لینوکس های مبتنی بر glibc می دهد.
منظور از سیستمهای لینوکسی مبتنی بر glibc، سیستم عامل های لینوکسی هستند که برای عملکردهای اصلیشون به کتابخونه C GNU (glibc) متکی می باشند. کتابخونه ی C GNU یا glibc، مجموعه ای از کتابخونه های پایه برای زبان برنامه نویسی C هستند که کارکردهای اساسی مانند مدیریت حافظه، ورودی/خروجی و دسترسی به سیستم فایل رو ارائه می دهند. این کتابخانه بطور گسترده در توزیع های محبوب لینوکسی مانند Ubuntu ، Debian ، Fedora، CentOS ، SUSE استفاده می شود.
OpenSSH هم یک سری ابزار شبکه ای روی پروتکل Secure Shell (SSH) هستند، که برای لاگین امن، مدیریت سرور از راه دور و انتقال فایل از طریق SCP و SFTP استفاده می شود.آسیب پذیری توسط محققین Qualys و در مه 2024 کشف شده و شناسه CVE-2024-6387 را دارد. آسیب پذیری از نوع race condition و در signal handler مربوط به sshd هست و شدت آن بالا و دارای امتیاز 8.1 می باشد.
سیگنالها رویدادهای خاصی هستند که به برنامه ها اطلاع می دند باید کاری را انجام دهند. مثلا وقتی کاربر کلید Ctrl+C را می زند در حقیقت یک سیگنالی ارسال می شود.
در sshd، یک سیگنال خاص به نام SIGALRM برای نشان دادن زمان سپری شدن LoginGraceTime (بطور پیش فرض 120 ثانیه) استفاده می شود. اگر کاربر در این مدت با موفقیت احراز هویت نکند، sshd سیگنال SIGALRM رو دریافت کرده و فرآیند احراز هویت متوقف می شود.
با این حال، این باگ در sshd به مهاجمین این امکان را می دهد تا از race condition در SIGALRM handler سوء استفاده کنند. این handler مسئول پردازش سیگنال SIGALRM است. وقتی که این سیگنال دریافت می شود، handler چندین تابع دیگر را فراخوانی می کند، از جمله تابع syslog برای ثبت رویداد در log سیستم.
مشکل اینجاست که برخی از توابعی که توسط SIGALRM handler فراخوانی می شوند، async-signal-safe نیستند. یعنی آنها برای اجرا در شرایطی که race condition وجود دارد، طراحی نشدند. مهاجم می تواند از این race condition برای اجرای کد دلخواه با امتیاز root سوء استفاده کند.
به گفته ی محققین Qualys، مهاجم با اکسپلویت این آسیب پذیری می تواند با بالاترین امتیاز کد دلخواه رو اجرا کند که منجر به کنترل کامل سیستم، نصب بدافزار، دستکاری داده، نصب بکدور برای دسترسی پایدار و همچنین امکان حرکات جانبی را فراهم می کند.
اگرچه شدت آسیب پذیری بالاست اما به گفته ی محققین Qualys، اکسپلویت کردن regreSSHion سخت است، چون برای دسترسی به خرابی حافظه نیاز به اجرای متعدد می باشد و این در حقیقت برای آسیب پذیری های race condition یه موضوع کاملا طبیعی است. اما این محققان اشاره کردند که ابزارهای هوش مصنوعی می توانند بازی را عوض کنند.
برای جزییات بیشتر در خصوص این آسیب پذیری، میتونید رایتاپ فنی خود محققین را مطالعه کنید.
نسخه های آسیب پذیر
آسیب پذیری regreSSHion سرورهای OpenSSH روی لینوکس از نسخه ی 8.5p1 به بالا به غیر از 9.8p1 رو تحت تاثیر قرار می دهد. نسخه های 4.4p1 به بالا به غیر از 8.5p1 بدلیل اصلاحیه برای CVE-2006-5051، تحت تاثیر CVE-2024-6387 نیستند.
نسخه های قبل از 4.4p1، تحت تاثیر این آسیب پذیری هستند مگر اینکه اصلاحیه های CVE-2006-5051 و CVE-2008-4109 رو اعمال کرده باشند. سیستم های OpenBSD بدلیل مکانیزمی که در سال 2001 معرفی شده، تحت تاثیر این آسیب پذیری نیستند. محققان گفتند که سیستم های macOS و ویندوزی هم میتوانند تحت تاثیر این آسیب پذیری باشند اما قابلیت اکسپلویت شدنشون هنوز تایید نشده و نیاز به تحقیق جداگانه ای داره.
اصلاح آسیب پذیری
برای اینکه آسیب پذیری regreSSHion رو در OpenSSH اصلاح کنید یا شدتش رو کاهش بدید، باید مراحل زیر انجام را بدهید:
- آخرین بروزرسانی (9.8p1) را برای OpenSSH نصب کنید.
- دسترسی SSH رو با استفاده از کنترل های مبتنی بر شبکه مانند فایروالها محدود کنید و برای جلوگیری از حرکات جانبی، بخش بندی شبکه (network segmentation) را اجرا کنید.
- اگر سرور OpenSSH را نمیتوانید بروز کنید، LoginGraceTime را در فایل پیکربندی sshd روی 0 تنظیم کنید، اما توجه داشته باشید که این کار می تواند سرور را در معرض حملات DoS قرار بدهد.
نتایج Shodan و Censys بیش از 14 میلیون سرور OpenSSH رو نشان می دهند اما خود محققای Qualys اعلام کردند که براساس داده های CSAM 3.0 حدود 700 هزار سرور آسیب پذیر وجود دارد.