Уязвимость в systemd, которую можно использовать для блокирования работы системы

В systemd найдена уязвимость (CVE-2019-6454), позволяющая вызвать крах управляющего процесса инициализации (PID1) через отправку непривилегированным пользователем специально оформленного сообщения через шину D-Bus. Разработчики из Red Hat также не исключают возможность применения уязвимости для организации выполнения кода с привилегиями root, но окончательно возможность такой атаки пока не определена.

Манипулируя размером отправляемого через D-Bus сообщения атакующий может сместить указатель за границы выделенной для стека памяти, обойдя защиту «stack guard-page», суть которой в подстановке на границе со стеком страниц памяти, обращение к которым приводит к генерации исключения (page-fault). По мнению исследователя безопасности, выявившего уязвимость, смещение указателя стека возможно только на неиспользуемые страницы памяти (unmapped), что не позволяет организовать выполнение кода в контексте процесса PID1, но даёт возможность атакующему инициировать крах PID1 с последующим переходом ядра Linux в состояние «panic» (в случае краха обработчика PID 1, происходит крах всей системы).

В systemd устанавливается обработчик сигналов, пытающийся перехватить крахи процесса PID1 (segmentation fault) и запускающий shell для восстановления. Но так как в ходе атаки обращение производится к неотражённым страницам памяти (unmapped), ядро не может вызвать данный обработчик сигнала и просто завершает процесс с PID 1, что, в свою очередь, приводит к невозможности продолжения дальнейшей работы и переходу в состояние «panic», требующего перезапуска системы.

Обновления пакетов с устранением уязвимости опубликованы для SUSE/openSUSE, Fedora, Ubuntu и частично для Debian (только для Debian Stretch). Проблема остаётся неисправленной в RHEL. Успешная атака продемонстрирована в Ubuntu 18.10 с systemd 239 и в CentOS 7.6 с systemd 219. В качестве обходного пути защиты может использоваться сборка в GCC c включением опции «-fstack-clash-protection», которая по умолчанию применяется в Fedora 28 и 29.

Следует отметить, что в 2014 году автор системной библиотеки musl выделял среди основных архитектурных проблем systemd излишнюю раздутость обработчика PID1 и ставил под сомнение целесообразность реализации обработчика DBus API на уровне PID1, так как он является серьёзным вектором для проведения атак и может негативно влиять на надёжность всей системы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.