Уязвимость вызвана отсутствием корректной обработки sysctl-параметра fs.suid_dumpable в systemd-coredump, который при выставленном по умолчанию значении 2 разрешает генерацию core-дампов для процессов с флагом suid. Подразумевается, что на записываемые ядром core-файлы suid-процессов должны выставляться права доступа, разрешающие чтение только пользователю root. Утилита systemd-coredump, которая вызывается ядром для сохранения core-файлов, сохраняет core-файл под идентификатором root, но дополнительно предоставляет доступ к core-файлам на основе ACL, предоставляющему доступ идентификатору владельца, изначально запустившему процесс.
Указанная особенность позволяет загружать core-файлы без оглядки на то, что программа может сменить идентификатор пользователя и выполняться с повышенными привилегиями. Атака сводится к тому, что пользователь может запустить suid-приложение и отправить ему сигнал SIGSEGV, после чего воспользоваться утилитой systemd-coredump для чтения содержимого core-файла, включающего срез памяти процесса во время аварийного завершения.
Например, пользователь может запустить «/usr/bin/su» и в другом терминале завершить его выполнение командой «kill -s SIGSEGV `pidof su`», после чего systemd-coredump сохранит core-файл в каталоге /var/lib/systemd/coredump, выставив для него ACL, разрешающий чтение текущему пользователю. Так как suid-утилита ‘su’ читает в память содержимое /etc/shadow, атакующий может получить доступа к информации о хешей паролей пользователя в системе. Утилита sudo атаке не подвержена, так как запрещает генерацию core-файлов через ulimit.
По заявлению разработчиков systemd уязвимость проявляется начиная с выпуска systemd 247 (ноябрь 2020 года), но по словам выявившего проблему исследователя уязвимости подвержен и выпуск 246.
Уязвимость проявляется если systemd собран с библиотекой libacl (по умолчанию во всех популярных дистрибутивах). Исправление пока доступно в виде патча. Проследить за исправлением в дистрибутивах можно на следующих страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Gentoo, Arch. В качестве обходного пути защиты можно выставить sysctl fs.suid_dumpable в значение 0, отключающее передачу дампов обработчику systemd-coredump.
Источник: http://www.opennet.ru/opennews/art.shtml?num=58373