nixp.ru v3.0

5 ноября 2024,
вторник,
05:43:20 MSK

4 октября 2016, 08:33

Тревожный звонок systemd, или Как «повесить» init-систему простой консольной командой

1
Проблема systemd на примере Ubuntu 16.04; автор: Dave Walker
Проблема systemd на примере Ubuntu 16.04; автор: Dave Walker
Иллюстрация с сайта 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.

fb twitter vk
vasilisc

крику-то крику, всё пропало, всё упало.
попробовал у себя … ничего! службы можно дальше рестартить, ПК корректно перезагружается.
неприятный баг, который скоро исправят, и не более того.

Дмитрий Шурупов

А как насчёт последнего абзаца новости-то? Это разве «ничего»?

arhimedoffs

Так ведь об этом кричали с самого начала противники systemd. Так что многие могут «злорадно потирая руки» сказать: «А мы говорили!»

philosoft

во всех копипастах забывают про while true почему-то.

Aleksdem

Ушли от принципа KISS — получаем нежданчики. Все закономерно. :)