یک آسیبپذیری بحران احراز هویت (CVE-2026-123158) به نام sshole در OpenSSH بر روی توزیعهای لینوکس مبتنی بر musl مانند Alpine شناسایی و افشا شده است. یک مهاجم بدون نیاز به احراز هویت میتواند از طریق احراز هویت مبتنی بر رمز عبور SSH به عنوان حسابی که نباید اصلاً رمز عبور را بپذیرد (از جمله کاربر root) وارد سیستم شود. در یک نصب پیشفرض آلپاین، این به معنای دسترسی root از یک اتصال واحد است، بنابراین سریعاً سیستم خود را پچ کنید.
SSHole
sshole به مهاجمی که میتواند به SSH دسترسی داشته باشد اجازه میدهد با استفاده از هر رمز عبوری بین ۲۵۷ تا ۱۰۲۴ بایت، به حسابی که رمز عبور ندارد وارد شود. این مشکل سرویس sshd را در توزیعهای لینوکس مبتنی بر musl مانند Alpine هدف قرار میدهد؛ یعنی زمانی که sshd رمزهای عبور را بدون PAM بررسی میکند، که این همان نحوه ساخت بسته پیشفرض openssh-server در آلپاین است. یک اتصال برای این کار کافی است و هر بار نیز عمل میکند. پکیج openssh را بهروزرسانی کرده و sshd را مجدداً راهاندازی کنید، یا تا زمان انجام این کار، گزینه PasswordAuthentication no را تنظیم کنید.
این باگ ناشی از نحوه گزارش خطاها توسط تابع ()crypt در musl libc است. از سال ۲۰۱۲، musl به جای NULL، رشته «» را هنگامی که ()crypt با خطا مواجه میشود برمیگرداند، و توابع رمزنگاری SHA-256 و SHA-512 آن، رمزهای عبور طولانیتر از ۲۵۶ بایت را رد میکنند. حسابهای قفلشده و مبتنی بر کلید نیز از «» به عنوان فیلد رمز عبور سایه (shadow password) خود استفاده میکنند. هنگامی که sshd خودش رمزهای عبور را بدون PAM بررسی میکند، رمز عبوری بین ۲۵۷ تا ۱۰۲۴ بایت باعث میشود تابع ()crypt با خطا مواجه شده و «*» را برگرداند. این مقدار با فیلد ذخیرهشده مطابقت پیدا میکند و sshd به مهاجم اجازه ورود میدهد.
کدام سیستمهای Alpine Linux تحت تأثیر قرار میگیرند؟
- sshd بدون PAM ساخته شده باشد (یا با پارامتر
UsePAM noاجرا شود) روی musl libc - گزینه PasswordAuthentication فعال باشد (پیشفرض)
- حداقل یک حساب کاربری دارای «*» به عنوان فیلد رمز عبور خود باشد
- حداقل یک حساب محلی دارای هش SHA-256 یا SHA-512 باشد
روی آلپاین، این شامل بسته openssh-server در نسخههای ۳.۱۶ تا ۳.۲۴ و نسخه edge میشود. سایر سیستمهای مبتنی بر musl مانند OpenWrt، Buildroot و بیلدهای Yocto، و تصاویر کانتینری که sshd را اجرا میکنند نیز ممکن است در معرض خطر sshole باشند. توزیعهای مبتنی بر glibc، سرویس sshd مجهز به PAM، Dropbear و سیستمهای غیرلینوکسی تحت تأثیر sshole قرار نمیگیرند.
نحوه وصله کردن این آسیب پذیری
به OpenSSH نسخه 10.6p2 بهروزرسانی کنید، یا در Alpine به نسخههای:
- openssh 10.6_p2-r0 (edge)
- 10.3_p1-r2 (3.24
- 10.2_p1-r1 (3.23)
- 10.0_p1-r11 (3.22)
- 9.9_p2-r1 (3.21) یا 9.7_p1-r6 (3.20) ارتقا دهید.
پس از آن، سرویس sshd را مجدداً راهاندازی کنید، زیرا ارتقای بسته، سرویس که از قبل در حال اجراست را جایگزین نمیکند.
اگر در حال حاضر قادر به پچ کردن نیستید، تنظیم PasswordAuthentication no این سطح نفوذ را مسدود میکند. همچنین لاگهای احراز هویت را برای عبارت «Accepted password for» در حسابهایی که رمز عبور ندارند جستجو کنید و هر میزبان دارای چنین خطی را به عنوان سیستم هکشده در نظر بگیرید.
شناسایی سیستمهای آسیب پذیر
جهت شناسایی سیستمهایی که تحت تاثیر sshole هستند، بهره برداری از راهکارهای شناسایی آسیب پذیری و مدیریت پچ اکیدا توصیه میشود. اما در صورتی که در حال حاضر فاقد چنین راهکارهایی هستید، روش شناسایی آن بروی سیستم عامل Alpine را بررسی میکنیم.
cat /etc/alpine-release 2>/dev/null || ldd "$(command -v sshd)" | grep -i musl
apk info -v 2>/dev/null | grep '^openssh-server'
sshd -T | grep -Ei '^(usepam|passwordauthentication|permitrootlogin) '
awk -F: '$2=="*" {print $1}' /etc/shadow # accounts with no password
awk -F: '$2 ~ /^\$[56]\$/ {print $1}' /etc/shadow # accounts with a $5$ or $6$ hash
- اگر خط اول چیزی چاپ نکند، sshd روی musl نیست و این نقص اعمال نمیشود.
- اگر دستور sshd -T عبارت
passwordauthentication yesو همچنین یا عدم وجود خط usepam یا عبارتusepam noرا چاپ کند، میزبان تا زمانی که پکیج اصلاحشده را اجرا کند در معرض خطر است. بیلدهای بدون PAM اصلاً خطusepamرا چاپ نمیکنند. - اگر هر دو خط awk نامهایی را چاپ کنند، حسابهای موجود در خروجی اول همانهایی هستند که یک مهاجم میتواند به عنوان آنها وارد سیستم شود.
- دستور sshd -T تنظیمات سراسری را نشان میدهد. یک بلوک Match میتواند ورود با رمز عبور را برای برخی از کاربران یا آدرسها دوباره فعال کند، بنابراین فایل پیکربندی را نیز مطالعه کنید.


0 دیدگاه