В компоненте systemd-coredump, обеспечивающем обработку core-файлов, генерируемых после аварийного завершения процессов, выявлена уязвимость (CVE-2022-4415), позволяющая непривилегированному локальному пользователю определить содержимое памяти привилегированных процессов, запущенных с флагом suid root. Наличие проблемы в конфигурации по умолчанию подтверждено в дистрибутивах openSUSE, Arch, Debian, Fedora и SLES.
Уязвимость вызвана отсутствием корректной обработки sysctl-параметра fs.suid_dumpable в systemd-coredump, который при выставленном по умолчанию значении 2 разрешает генерацию core-дампов для процессов с флагом suid. Подразумевается, что на записываемые ядром core-файлы suid-процессов должны выставляться права доступа, разрешающие чтение только пользователю root. Утилита systemd-coredump, которая вызывается ядром для сохранения core-файлов, сохраняет core-файл под идентификатором root, но дополнительно предоставляет доступ к core-файлам на основе ACL, допускающий чтение на основе идентификатора владельца, изначально запустившего процесс.
Указанная особенность позволяет загружать core-файлы без оглядки на то, что программа может сменить идентификатор пользователя и выполняться с повышенными привилегиями. Атака сводится к тому, что пользователь может запустить suid-приложение и отправить ему сигнал SIGSEGV, после чего загрузить содержимое 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.