🕳 И немного таймлайна... баг OpenSSH зрел 46 лет! 🟢 1980 год: Разраб вставляет символ * в поле пароля для системных учеток UNIX. Подразумевая что это не хэш и сбрутфорсить его невозможно, значит, залогиниться нельзя. 🟢 2012 год: Разрабы библиотеки musl решают, что если функция шифрования crypt() ломается, отдавать NULL опасно - софт может словить сегфолт. Пусть лучше она будет возвращать ошибку... угадайте какую? ... Ту самую звёздочку *. Костыль номер раз 🩼 🟢 Спустя 3 недели: Те же разрабы musl замечают, что слишком длинные пароли выжирают проц в нуль (и можно задудосить). Запиливают лимит... всё, что длиннее 256 символов дропается. А раз это ошибка, то функция выплевывает *. Костыль номер два 🩼 🟢 2016 год: В OpenSSH чинят багу. Если юзера нет в системе, сервер генерит фейковую соль, чтобы хацкер по времени ответа не вычислил валидные логины. Очередная заплатка поверх костыля 🩼 🟢 2022 год: Мейнтейнеры Alpine Linux зачем-то меняют залоченный пароль рута в /etc/shadow с ! на *, чтобы нормально работали SSH-ключи в модных облаках. Схема идеально замкнулась... ты стучишься по SSH под рутом (у которого в базе висит *). Вводишь 300 любых символов. Функция crypt() падает по лимиту длины ➡️ возвращает * ➡️ OpenSSH сравнивает её с тем, что лежит в базе (а там тоже *) ➡️ У тебя root 🎩 Прикольно еще то, как эту дичь нашли несколько дней назад... кто-то просто натравил рой ИИ-агентов на разные сборки OpenSSH и скормил им 17 000 кривых, мусорных логинов. Нейронка брутфорсила логику, пока связка musl без PAM не сработала. https://sshhole.com/ И этой связке 46 лет! Типичный 🍺 Сисадмин
Обнаружение уязвимости в Alpine Linux, позволяющей получить root-доступ через SSH
Похожие посты
- ❤ 32
- 👍 9
- 🤯 131
- 😁 70
- 🔥 12
- ❤ 9
- 🤣 4
- 💯 3
- 😁 386
- 🎉 31
- 🍾 16
- 😭 12
- ❤ 4
- 👍 3