Уразливість «sshole» в OpenSSH: вхід у заблоковані паролем акаунти на musl‑Linux
Дослідник розкрив ваду «sshole» в OpenSSH на дистрибутивах Linux із бібліотекою musl: зловмисник може увійти в акаунти, де паролі начебто вимкнені, надіславши надто довгий пароль.
У OpenSSH виявили ваду «sshole», яка дає змогу заходити на деякі musl‑базовані Linux‑системи, навіть якщо для акаунта вимкнено парольну автентифікацію. Проблема стосується, зокрема, Alpine Linux, OpenWrt, Buildroot і Yocto за певної конфігурації.
Як це працює
За даними дослідника Озґюна Кюльтекіна, баг існує з 2016 року через взаємодію OpenSSH із бібліотекою musl. Щоб замаскувати різницю в часі відповіді й не дозволити визначати наявні імена користувачів (CVE-2016-6210), у 2016 році OpenSSH почав хешувати паролі навіть для акаунтів без придатних хешів.
У Linux для блокування входу паролем у полі пароля файлу /etc/shadow часто ставлять символ *. У musl функція crypt() повертає * у разі збою хешування, зокрема коли надісланий пароль довший за 256 байтів. У підсумку OpenSSH порівнює повернене * зі збереженим *, і вхід помилково зараховується як успішний.
Вразливість не дозволяє обходити справжні паролі для акаунтів із валідними хешами.
Кому загрожує
- Сервери OpenSSH на дистрибутивах з musl (Alpine Linux, OpenWrt, Buildroot, Yocto).
- Вимкнено PAM (за замовчуванням у пакеті openssh-server в Alpine Linux).
- Увімкнено автентифікацію паролем по SSH.
- Є хоча б один акаунт із * у полі пароля в /etc/shadow.
- Існує інший акаунт із валідним хешем пароля.
Дослідник попереджає: офіційні образи Alpine Linux для AWS і Azure містять дефолтний акаунт alpine із привілеями doas без пароля — це може відкрити зловмиснику шлях до root.
Системи на glibc (Debian, Ubuntu, Fedora) і конфігурації з PAM не вразливі.
Що робити адміністраторам
Проблему виправлено в OpenSSH 10.6p2. Користувачам Alpine Linux радять оновити пакети командою apk upgrade openssh.
Як тимчасове пом’якшення — вимкнути паролі в SSH (рядок PasswordAuthentication no у конфігурації сервера) й перезапустити службу.
Як перевірити можливу експлуатацію
Перегляньте журнали автентифікації на предмет успішних входів паролем для акаунтів, де це заборонено. В Alpine Linux це можна зробити так: grep "Accepted password" /var/log/messages.
Якщо бачите успішний вхід для акаунта alpine, перевірте, чи вимкнено в нього паролі: grep '^alpine:' /etc/shadow. Якщо в полі пароля стоїть *, але в журналах є «Accepted password», це може свідчити про використання вразливості.
Як знайшли
Кюльтекін виявив проблему за допомогою агентів на основі штучного інтелекту, які виконали близько 17 600 тестів автентифікації з різними конфігураціями OpenSSH, пошкодженими хешами та надмірно довгими паролями.