В systemd найдена (https://www.openwall.com/lists/oss-security/2019/02/18/3) уязвимость (CVE-2019-6454 (https://security-tracker.debian.org/tracker/CVE-2019-6454)), позволяющая вызвать крах управляющего процесса инициализации (PID1) через отправку непривилегированным пользователем специально оформленного сообщения через шину D-Bus. Разработчики из Red Hat также не не исключают (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2019-6454) возможность применения уязвимости для организации выполнения кода с привилегиями 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 (https://bugzilla.novell.com/show_bug.cgi?id=CVE-2019-6454), Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=1678394) и частично для Debian (https://security-tracker.debian.org/tracker/CVE-2019-6454) (только для Debian Stretch). Проблема остаётся неисправленной в RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2019-6454) и Ubuntu (https://people.canonical.com/~ubuntu-security/cve/2019/CVE-2...). Успешная атака продемонстрирована в Ubuntu 18.10 с systemd 239 и в CentOS 7.6 с systemd 219. В качестве обходного пути защиты может использоваться сборка в GCC c включением опции "-fstack-clash-protection", которая по умолчанию применяется в Fedora 28 и 29.
Следует отметить, что в 2014 году автор системной библиотеки musl выделял (https://www.opennet.ru/opennews/art.shtml?num=39050) среди основных архитектурных проблем systemd излишнюю раздутость обработчика PID1 и ставил под сомнение целесообразность реализации обработчика DBus API на уровне PID1, так как он является серьёзным вектором для проведения атак и может негативно влиять на надёжность всей системы.
URL: https://www.openwall.com/lists/oss-security/2019/02/18/3
Новость: https://www.opennet.ru/opennews/art.shtml?num=50168