Уязвимости в apport и systemd-coredump, позволяващи извличане на хешове на паролите на потребителите на системата

Компания 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 се свежда до следните стъпки:

  • Създава се нов процес и се извиква функцията 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-дампа.

За да получи необходимия идентификатор за новия процес, съвпадащ с идентификатора на suid-процеса, преди да изпрати сигнала SIGSEGV, suid-процесът се спира със сигнал SIGSTOP и по време на спирането циклично се стартират нови процеси, докато не бъде получен PID с предшествуващ номер, близък до заменяемия suid-процес. След промяна на номерирането на PID на suid-процеса се изпращат сигналите SIGSEGV и SIGCONT, след което се изпраща SIGKILL и циклично се стартират нови процеси, за да се постигне същият PID, какъвто е при suid-процеса.

Що се отнася до systemd-coredump, от една страна, провеждането на атака срещу него е по-лесно, тъй като няма необходимост да се заменя suid-процес с процес в отделно потребителско пространство и е достатъчно да се постигне съвпадение на AT_UID и AT_EUID. От друга страна, systemd-coredump е написан на C и се стартира достатъчно бързо, което дава по-малко време за замяна, за разлика от apport, който е написан на Python и по време на инициализация зарежда различни pyc-файлове. Подобен проблем се решава с изкуствено забавяне на systemd-coredump — при извикване на suid-файла се предава много голям брой аргументи на командния ред, което създава необходимото забавяне, което възниква по време на обработката на /proc/pid/cmdline.

При анализа на уязвимости, изследователите също така откриха, че systemd-coredump не указва флага «%d» в /proc/sys/kernel/core_pattern при настройка на повикването, което позволява на нападателя да предизвика аварийно прекратяване на фонови процеси, изпълнявани с права root и създаващи други процеси с изменение на идентификатора на потребителя на непривилегирован потребител, под който се извършва атаката. Тази възможност позволява атака не само на setuid-приложения, но и на такива процеси като sshd-сесия (OpenSSH), sd-pam (systemd) и cron, за получаване на конфиденциални данни, останали в тяхната памет, като затворени ключове, хешове на пароли от /etc/shadow, канарейски етикети от стека и данни за заобикаляне на адресната пространство на рандомизация (ASLR).

Можете да следите публикацията на обновления на пакетите в дистрибуциите на страниците: Debian, Ubuntu, RHEL, openSUSE, Fedora, Gentoo, Arch. Като обходен вариант за блокиране на уязвимостите се предлага да се деактивира запазването на core-дампове за suid-програми и процеси, които сбросват привилегии, задавайки параметъра /proc/sys/fs/suid_dumpable на стойност 0. За цялостно разрешаване на проблема са необходими изменения в ядрото на Linux, реализиращо възможността за предаване на информация за аварийно приключил процес чрез механизма pidfd (pidfd е свързан с конкретни процеси и за разлика от pid не се преназначава).

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster