Systemd позволяет получить права суперпользователя на дистрибутивах Linux

Проблема связана с недействительным именем пользователя в unit-файлах.

Получить права суперпользователя на дистрибутиве Linux, использующем для инициализации системный менеджер systemd, можно с помощью недействительного имени пользователя в файле systemd.unit.

В Linux во избежание путаницы между числовыми идентификаторами пользователя (UID) и буквенно-числовыми именами пользователя, последние не должны начинаться с чисел. Тем не менее, в некоторых современных дистрибутивах, таких как RHEL7 и CentOS, это разрешено. Systemd не позволяет создавать unit-файлы с недействительным именем пользователя, однако другие инструменты могут создавать такие файлы. Если systemd столкнется с недействительным именем пользователя в unit-файле, например, «0day», менеджер проигнорирует параметр и создаст запрашиваемый сервис. При этом unit-файл будет запущен с правами суперпользователя.

Сообщения о проблеме стали появляться на GitHub еще неделю назад. Тем не менее, один из главных разработчиков systemd Леннарт Поттеринг(Lennart Poettering) заявил, что ПО работает, как положено и отказался вносить какие-либо изменения. «Не считаю нужным что-то исправлять в systemd. Я понимаю, это раздражает, но все-таки: имя пользователя явно недействительное», – отметил разработчик.

В Linux-сообществе с мнением Потетринга согласны далеко не все. По словам бельгийского разработчика Маттиаса Гениара (Mattias Geniar), проблема может считаться уязвимостью, поскольку проводимый systemd синтаксический анализ параметра User= в unit-файлах с недействительным именем пользователя дает привилегии суперпользователя. Другое дело, если бы предоставлялись права пользователя, отметил Гениар. Как отметил разработчик, уязвимость вызывает некоторые опасения, однако не является критической из-за ограниченного вектора атак (для эксплуатации уязвимости нужны права администратора).

Systemd – системный менеджер, демон инициализации других демонов в Linux, пришедший на замену используемого ранее SysV. Его особенностью является интенсивное распараллеливание запуска служб в процессе загрузки системы, что позволяет существенно ускорить запуск операционной системы.