معرفی اکسپلویت
- پلتفرم آسیبپذیر: OpenSSH’s server (sshd)
- نسخههای آسیبپذیر: از نسخه 8.5p1 تا 9.7p1
- تاریخ ارائه وصله امنیتی: 11 تیر 1403
- نوع آسیبپذیری: Remote Code Execution
- درجه خطر (CVSSv3): 8.1 High
- وضعیت استفاده: انتشار POC (عدم مشاهده بهرهبرداری موفق)
توضیحات فنی
یک آسیبپذیری اجرای کد از راه دور (RCE) با شدت بالا در سرور OpenSSH کشف شده است که با شناسه CVE-2024-6387 ردیابی میشود. سرور OpenSSH (sshd) بخشی از suite OpenSSH و برنامه سمت سرور آن است که به اتصالات SSH ورودی از کلاینتها گوش میدهد.
این کشف به دنبال آسیبپذیری بزرگ دیگری است که چند ماه پیش از کشف این آسیبپذیری در کتابخانه XZ Utils یافت شد و OpenSSH را تحت تأثیر قرار داد. اگرچه CVE-2024-6387 یک نقص جدی است، اما بهرهبرداری از آن در عمل بسیار سخت است و تاکنون استفاده موفق از آن برای حمله به سیستمهای راه دور مشاهده نشده است.
نسخههای آسیبپذیر
آسیبپذیری CVE-2024-6387 نسخههای 8.5p1 تا 9.7p1 از sshd در حال اجرا بر روی glibc-Linux را تحت تأثیر قرار میدهد. تشخیص نسخه sshd بر روی سیستم با استفاده از دستور زیر امکانپذیر است:
ssh -V
جزئیات آسیبپذیری
در طی یک تلاش برای احراز هویت SSH، کاربر یک محدودیت زمانی برای تکمیل این فرآیند دارد که به عنوان مقدار LoginGraceTime بوده و به صورت پیشفرض بر روی 120 ثانیه تنظیم شده است. اگر تا قبل از اتمام این زمان، احراز هویت با موفقیت انجام نشود تابع “sigalarm” فراخوانی و این تابع خود در ادامه سبب فراخوانی توابع مدیریت حافظه در سطح سیستم میشود. مشکل به این دلیل ایجاد میشود که توابعی مانند ()syslog که sigalarm آنها را فراخوانی میکند، async-signal-safe نیستند.
این امر به این معنی است که فراخوانی آنها به وسیله یک کنترلکننده سیگنال، امن نیست. این شرایط میتواند یک شرط مسابقه را ایجاد نماید که منجر به نقض مرزهای حافظه و اجرای کد دلخواه میشود. شرط مسابقه یا race condition زمانی رخ می دهد که دو پردازه یا نخ (thread) تلاش میکنند به یک منبع به طور همزمان دسترسی داشته باشند و باعث ایجاد مشکل در سیستم شوند.
لازم به ذکر است که این آسیبپذیری در گذشته، در نسخههای قبل از 4.4، مشاهده و برطرف شده بود اما مجددا در نسخههای 8.5p1 تا 9.8p1 به وجود آمده است. به وجود آمدن مجدد این آسیبپذیری به دلیل حذف دستور پیشپردازنده زیر از تابع ()sigdie این نرمافزار میباشد. ()sigdie تابعی است که مستقیماً توسط کنترلر SIGALRM فراخوانی می شود:
ifdef DO_LOG_SAFE_IN_SIGHAND#
نسخههای 4.4p1 تا قبل از 8.5p1 به دلیل وجود دستور پیشپردازنده فوق درون تابع ()sigdie، در وصله منتشر شده برای آسیبپذیری CVE-2006-5051، این نقص را ندارند چرا که این دستور سبب میشود این تابع ناامن به یک فراخوانی “exit(1)_” امن هدایت شود. بنابراین، نقص جدید یک پسرفت (regression) است و از این رو regreSSHion، نام گرفته است.
این آسیبپذیری از راه دور در سیستمهای لینوکس مبتنی بر glibc قابل بهرهبرداری است، جایی که تابع ()syslog خود توابع async-signal-unsafe (مثلا ()malloc و ()free) را فراخوانی میکند. برای سوءاستفاده از این آسیبپذیری، مهاجم باید به طور متوسط تقریباً 10000 بار تلاش کند. اما میتوان گفت که OpenBSD آسیبپذیر نیست، زیرا کنترلکننده SIGALRM آن، تابع ()syslog_r را که نسخهای امنتر از ()syslog بوده و توسط OpenBSD ایجاد شده است، فراخوانی میکند.
نحوه وصله آسیبپذیری
بهترین راهکار جهت برطرف نمودن این آسیبپذیری اعمال بهروزرسانی منتشر شده در تاریخ 11 تیر 1403 برای OpenSSH است که از طریق لینک زیر امکان دسترسی به آن وجود دارد:
https://www.openssh.com/
اقدامات کاهشی
به منظور مقابله با تهدیدات احتمالی و جهت حصول اطمینان از امنیت سیستم خود، توصیه میشود ضمن نصب آنتیویروس پادویش، قبل از اعمال وصلههای منتشر شده، بلافاصله اقدامهای کاهشدهنده خطر را که شامل موارد زیر است انجام دهید:
- با استفاده از مولفه دیوارآتش آنتیویروس پادویش امکان محدودسازی آیپیهای مجاز جهت دسترسی به پورت SSH وجود دارد.
- دسترسی SSH را از طریق فایروالها و سایر ابزارهای امنیتی مبتنی بر شبکه محدود سازید.
- جهت محدودسازی دسترسی غیرمجاز و حرکت جانبی، تقسیمبندی شبکه را اعمال کنید.
- در صورتی که بهروزرسانی فوری امکانپذیر نبود، مدیران شبکه میتوانند به عنوان کاهش موقت، مدت زمان ورود به سیستم (LoginGraceTime) را روی صفر تنظیم کنند. با این حال، بنابر هشدار توسعهدهندگان، این اقدام باعث میشود سرور SSH در برابر حملات DDoS مستعدتر شود.