SSHole: на musl без PAM аккаунт со звёздочкой в shadow принимает длинный пароль. Обновите OpenSSH до 10.6p2

5 ноября 2026 вышел OpenSSH 10.6p2: в portable-сборке закрыли критичный обход парольной аутентификации на Linux с musl libc, когда sshd собран и запущен без PAM. Разбор дыры и условия атаки собраны на sshhole.com, нашёл Özgün Kültekin (Wakefield).

Кому это важно: Alpine, OpenWRT, Buildroot, Yocto и куча Docker-образов на musl. На glibc (Debian, Ubuntu, Fedora), через PAM, на Dropbear или OpenBSD дыра по описанию sshhole не бьёт.

Как устроен обход

В /etc/shadow у «залоченных» и key-only аккаунтов часто стоит одна звёздочка *: это не хеш, и пароль к нему не должен совпасть. На musl функция crypt() при ошибке (в том числе из-за слишком длинного пароля, лимит 256 байт для sha512crypt) возвращает строку "*", а не NULL.

sshd без PAM для «невалидных» и для учёток со звёздочкой всё равно гоняет пароль через чужую соль (старый фикс таймингов CVE-2016-6210). Если в shadow у цели *, а crypt() на длинном пароле тоже отдаёт "*", сравнение сходится: любой пароль длиной примерно 257-1024 символа открывает такой аккаунт.

На официальных Alpine-образах AWS/Azure под удар попадает дефолтный пользователь alpine со звёздочкой и passwordless doas, то есть по сути root. Нужны ещё включённые password-логины и рядом хотя бы один аккаунт с настоящим хешем пароля.

Что сделать

Обновите OpenSSH до 10.6p2. На Alpine:

apk upgrade openssh
# или временно:
# echo "PasswordAuthentication no" > /etc/ssh/sshd_config.d/00-no-passwords.conf
# rc-service sshd restart

В логах ищите удачные password-логины к учёткам, у которых в shadow стоит *: на sshhole.com и в репозитории oz9un/sshole есть подсказки, как это выглядит.

Если у вас Alpine/OpenWRT/musl-контейнеры с OpenSSH без PAM и password-логинами, ставьте 10.6p2 или гасите PasswordAuthentication, не откладывая.

Источники и ссылки


Комментарии загружаются…