LINUX.ORG.RU

Обход аутентификации сервера OpenSSH на системах musl

 , ,


1

4

OpenSSH позволяет войти в систему под пользователем, парольный вход в систему которому был выключен путем установки ‘*’ в поле хеша пароля. Для того нужно передать любой пароль длиннее 256 символов. Уязвимы только системы с включенной парольной аутентификацией и выключенным PAM. Затронуты все системы, основанные на musl: Alpine Linux, OpenWRT, buildroot — с настройками по умолчанию — и другие. Проблема существует с 2016 года, исправлена в openssh 10.6p2.

>>> Подробнее

anonymous

Проверено: maxcom ()
Последнее исправление: maxcom (всего исправлений: 2)
Ответ на: комментарий от ckotctvo

А где написано, что установленный errno обязательно означает ошибку?

в мануале: All four functions set errno when they fail

В твоей цитате ничего не сказано про errno для случая, когда они не fail.

Manhunt ★★★★★
()
Ответ на: комментарий от firkax

В рамках функций crypt* установленный errno сам по себе означает что ошибка была.

All four functions set errno when they fail.

Единственно что не определено, это что за ошибку обозначает конкретный errno отличный от нуля.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 1)
Ответ на: комментарий от WatchCat

Все четыре функции, если фейлятся, устанавливают errno.

Пояснение (а то вдруг неясно): если функция зафейлилась, то в errno лежит какое-то полезное значение, которое функция туда записана при аварийном выходе. Если функция не фейлилась, то такую ситуацию данная фраза никак не описывает.

И вообще, если б ты писал что-то на си, ты бы данную логику работы знал безо всяких манов, она почти везде одинаковая.

firkax ★★★★★
()
Ответ на: комментарий от WatchCat

В рамках функций crypt* установленный errno сам по себе означает что ошибка была.

А если ошибки нет - функция не обязана сбрасывать errno в 0. И на один лишь errno ориентироваться нельзя, потому что иногда бывают баги в реализациях, когда ошибка есть, а errno равен 0.

liksys ★★★★
()
Ответ на: комментарий от firkax

Не верю в такие совпадения, почему именно ‘*’ и именно в crypt? Это чей-то план, надо смотреть другие коммиты того кто внёс изменения.

Nohack
()
Ответ на: комментарий от Nohack

Тут мог быть и не план, и не совпадение, а глупость. Логика например такая: мы знаем что в passwd звёздочками традиционно обозначаются хеши отсутствующих паролей, а тут у нас тоже что-то отсутствующее (не смогли посчитать), давайте возьмём пример и сделаем так же. Более того, если на вход дать звёздочку то на выходе там уже не звёздочка будет, т.е. частично они всё-таки подумали о случае когда кто-то их результат сравнил с звёздочкой из passwd. А вот почему нельзя было (даже в рамках дурацкой идеи по замене null на спецстроку) всегда возвращать эту «не звёздочку» - это да, вопрос. Может и правда аккуратно замаскированный под глупость бекдор.

С другой стороны, ну где ты видел что-то серьёзное с sshd на musl? Непонятно кого этим можно взломать.

firkax ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.