Уязвимость в systemd, потенциально позволяющая повысить свои привилегии

В системном менеджере systemd выявлена уязвимость (CVE-2020-1712), которая потенциально позволяет добиться выполнения своего кода с повышенными привилегиями через отправку специально оформленного запроса по шине DBus. Проблема исправлена в тестовом выпуске systemd 245-rc1 (решающие проблему патчи: 1, 2, 3). Уязвимость устранена в дистрибутивах Ubuntu, Fedora, RHEL (проявляется в RHEL 8, но не затрагивает RHEL 7), CentOS и SUSE/openSUSE, но на момент написания новости остаётся неисправленной в Debian и Arch Linux.

Уязвимость вызвана обращением к уже освобождённой области памяти (use-after-free), возникающем при асинхронном выполнении запросов к Polkit во время обработки DBus-сообщений. Некоторые DBus-интерфейсы используют кэш для хранения объектов на короткое время и очищают элементы кэша как только шина DBus освободится для обработки других запросов. Если обработчик DBus-метода использует bus_verify_polkit_async(), ему возможно потребуется ожидать завершения действия в Polkit. После готовности Polkit обработчик вызывается повторно и обращается к уже ранее распределённым в памяти данным. Если запрос к Polkit выполняется слишком долго, то элементы в кэше успевают очистится до того, как обработчик DBus-метода будет вызван второй раз.

Из сервисов, позволяющих эксплуатировать уязвимость, отмечается systemd-machined, который предоставляет DBus API org.freedesktop.machine1.Image.Clone, приводящий к временном сохранению данных в кэше и асинхронному обращению к Polkit. Интерфейс org.freedesktop.machine1.Image.Clone доступен всем непривилегированным пользователям системы, которые могут инициировать крах сервисов systemd или потенциально добиться выполнения кода с правами root (прототип эксплоита пока не продемонстрирован). Код, позволяющий эксплуатировать уязвимость, был добавлен в systemd-machined в 2015 году в версии systemd 220 (в RHEL 7.x используется systemd 219).

Источник: http://www.opennet.ru/opennews/art.shtml?num=52340