Компания Qualys выявила две уязвимости в инструментах apport (CVE-2025-5054) и systemd-coredump (CVE-2025-4598), применяемых для обработки core-файлов, генерируемых после аварийного завершения процессов. Уязвимости позволяют получить доступ к core-файлам, сохранённым после аварийного завершения suid-приложений или некоторых системных фоновых процессов, в памяти которых могут содержаться прокэшированные учётные данные или ключи шифрования. Утилита apport автоматически вызывается для сохранения core-дампов в Ubuntu, а systemd-coredump в Red Hat Enterprise Linux 9+, Fedora и многих других дистрибутивах Linux. Продемонстрирована техника атаки, в ходе которой создавались условия для аварийного завершения suid-приложения unix_chkpwd и получения доступа к core-файлу с дампом состояния во время краха. В сохранённом core-дампе присутствовали хэши паролей пользователей системы, остававшиеся в памяти аварийно завершившегося процесса после загрузки содержимого /etc/shadow. Возможность эксплуатации уязвимостей продемонстрирована в Ubuntu 24.04 и Fedora 40/41, но предполагается, что и другие дистрибутивы подвержены подобным атакам. Обе уязвимости вызваны состоянием гонки, позволяющем подменить аварийно завершившийся suid-процесс на другой процесс в момент после начала обработки ядром аварийного завершения, но до проверки обработчиком в пространстве пользователя параметров процесса через /proc/pid/files. Вызов apport и systemd-coredump осуществляется следующим образом: ядро, получив информацию об аварийном завершении процесса, вызывает обработчик, указанный в файле /proc/sys/kernel/core_pattern, после чего передаёт ему содержимое core-дампа через входной поток. Генерация core-дампа и запуск обработчика происходит не мгновенно и этого времени достаточно, чтобы подменить завершившийся suid-процесс на обычный процесс пользователя. В случае подмены запущенный обработчик core-дампов будет считать, что сбой произошёл не в suid-процессе, а в обычном пользовательском приложении и, соответственно, сохранит core-файл с возможностью доступа обычного пользователя, а не только администратора. Атака на apport сводится к следующим шагам:
Источник: https://www.opennet.ru/opennews/art.shtml?num=63328
- Ответвляется новый процесс и вызывается функция execve() для запуска suid-программы, такой как unix_chkpwd. Пропускается время, необходимое для загрузку suid-программой конфиденциальных данных в память (в случае unix_chkpwd ожидается загрузка хэшей паролей всех пользователей системы из файла /etc/shadow). До окончания выполнения команды процессу отправляется сигнал SIGSEGV или SIGSYS для аварийного завершения. В ответ на аварийное завершение ядро формирует core-дамп и запускает процесс apport для обработки core-дампа в пространстве пользователя. После запуска apport, но до начала разбора аварийно завершившемуся процессу отправляется сигнал SIGKILL, а сам процесс заменяется на другой без флага suid. Для обхода проверок в apport новый процесс создаётся внутри отдельных пространств имён (user, pid и mount namespace). apport подключается к unix-сокету /run/apport.socket в созданном для нового процесса пространстве имён точек монтирования и отправляет файловый дескриптор для доступа к core-дампу.
Источник: https://www.opennet.ru/opennews/art.shtml?num=63328