Тревожный звонок systemd, или Как «повесить» init-систему простой консольной командой
1Иллюстрация с сайта GitHub
Linux-администратор и основатель сервиса SSLMate Эндрю Эйер (Andrew Ayer) опубликовал в своём блоге заметку, как с помощью консольной команды из 48 символов привести systemd в нерабочее состояние.
Эндрю обнаружил «поразительно банальный баг» в init-системе systemd, появившийся там более двух лет назад (в версии systemd 209). Если через systemd-notify отправить пустое (из 0 символов) сообщение в UNIX-сокет /run/systemd/notify, доступный для всех пользователей, то systemd получит сообщение и не сможет выполнить проверку на его длину. Результат — прав любого локального Linux-пользователя достаточно для отказа от обслуживания критичного системного сервиса.
Сама команда выглядит следующим образом:
NOTIFY_SOCKET=/run/systemd/notify systemd-notify «»
Некоторые энтузиасты отмечают, что для реализации задуманного им потребовалось обернуть её в бесконечный цикл (while true). Уязвимость уже устранена (#4234 в GitHub) — пропатченная версия пакета systemd для Debian, например, получила версию 231-9, но пока имеет статус нестабильной.
Дэвид Тимоти Штраусс (David Timothy Strauss), технический директор Pantheon, отметил, что критика Эйера является преувеличенной, а описанная им уязвимость — «незначительная проблема в безопасности». По его уверениям, эта ошибка не «рушит» systemd, а приводит её в «нестабильное состояние»: «Некоторые службы, которые пытаются обратиться к systemd, в ответ получат таймаут в течение 30 секунд (по умолчанию), если systemd недоступна».
Рич Фелкер (Rich Felker), автор Linux-библиотеки musl, отмечает, что обнаруженная проблема не столько проблема безопасности, сколько тревожный звонок для нераздельной архитектуры systemd: «Systemd не создана для того, чтобы её разбивали на меньшие части, которые могут безопасно падать и восстанавливаться — ни с точки зрения безопасности, ни с точки зрения надёжности. У вас один большой монолитный процесс: если какой-то его компонент ломается, рушится всё остальное. Это большая проблема в архитектуре, на которую Эйер пролил свет. Это не большая уязвимость в безопасности, а брешь в архитектуре системной разработки».
Постоянная ссылка к новости: http://www.nixp.ru/news/13795.html. Дмитрий Шурупов по материалам Threatpost.Com, Andrew Ayer.
Исследователи безопасности нашли 26 уязвимостей в USB-драйверах разных ОС — 18 из них на Linux
Прощание с LiMux: Полный возврат Мюнхена с Linux на Windows обойдётся почти в 50 миллионов евро 3 19
Лаборатория Касперского: Linux-ботнеты — причина 70 % DDoS-атак
Уязвимость CVE-2016-5195 (Dirty COW) в ядре Linux позволяла 9 лет превышать привилегии пользователя 1
Новый механизм безопасной загрузки Oracle Linux вызвал критику экспертов 4
Исправлена опасная уязвимость в установке Ubuntu Linux по умолчанию 10 12
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
крику-то крику, всё пропало, всё упало.
попробовал у себя … ничего! службы можно дальше рестартить, ПК корректно перезагружается.
неприятный баг, который скоро исправят, и не более того.
А как насчёт последнего абзаца новости-то? Это разве «ничего»?
Так ведь об этом кричали с самого начала противники systemd. Так что многие могут «злорадно потирая руки» сказать: «А мы говорили!»
во всех копипастах забывают про while true почему-то.
Ушли от принципа KISS — получаем нежданчики. Все закономерно. :)