Уязвимость в Linux-подсистеме pidfd, позволяющая прочитать недоступные пользователю файлы
В ядре Linux выявлена (https://www.openwall.com/lists/oss-security/2026/05/15/2) четвёртая (1 (https://www.opennet.ru/opennews/art.shtml?num=65325), 2 (https://www.opennet.ru/opennews/art.shtml?num=65395), 3 (https://www.opennet.ru/opennews/art.shtml?num=65441)) за последние две недели критическая уязвимость, позволяющая пользователю поднять свои привилегии в системе. Опубликовано (https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn) два рабочих эксплоита: sshkeysign_pwn (https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn/blob/main/sshkeysign_pwn.c) даёт возможность непривилегированному пользователю прочитать содержимое закрытых хостовых SSH-ключей /etc/ssh/ssh_host_*_key, а chage_pwn (https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn/blob/main/chage_pwn.c) - прочитать содержимое файла /etc/shadow с хэшами паролей пользователей.
Сведения об уязвимости не были запланированы для раскрытия, но один из исследователей безопасности на основе предложенного для ядра патча (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=31e62c2ebbfdc3fe3dbdf5e02c92a9dc67087a3a) смог определить (https://x.com/spendergrsec/status/2054974174926430322) суть уязвимости, позволяющей прочитать файлы, доступные только пользователю root, например, /etc/shadow. В добавленном в ядро изменении корректировалась логика использования функции get_dumpable() в ptrace при определении уровня доступа в функции ptrace_may_access().
Непосредственно уязвимость вызвана состоянием гонки, приводящим к возможности непривилегированного доступа к файловому дескриптору pidfd после обращения к файлу из suid root процесса. В момент времени между открытием файла и сбросом привилегий в suid-программе (например, через функцию setreuid), возникает ситуация, когда приложение, запустившее suid root программу, через дескриптор pidfd может обратиться к открытому в suid-программе файлу, даже если это не позволяют права доступа на файл.
Окно для эксплуатации возникает из-за того, что функция "__ptrace_may_access()" пропускает проверку возможности доступа к файлу, если поле task->mm оказывается выставлено в значение NULL после выполнения exit_mm(), но до вызова exit_files(). В данный момент системный вызов pidfd_getfd считает, что идентификатор пользователя (uid) вызывающего процесса, соответствует идентификатору, которому разрешён доступ к файлу. Примечательно, что ранее на проблему обращали внимание (https://lore.kernel.org/all/20201016024019.1882062-1-jannh@google.com/) ещё в 2020 году, но она осталась неисправленной.
В эксплоите (https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn/blob/main/chage_pwn.c), получающем содержимое /etc/shadow, атака сводится к цикличному запуску через fork+execl приложения /usr/bin/chage с флагом suid root, читающего содержимое /etc/shadow. После того как процесс ответвился выполняется системный вызов pidfd_open (https://man7.org/linux/man-pages/man2/pidfd_open.2.html) и осуществляется цикличный перебор доступных pidfd-дескрипторов через системный вызов pidfd_getfd (https://man7.org/linux/man-pages/man2/pidfd_getfd.2.html) и их проверка через /proc/self/fd. В эксплоите sshkeysign_pwn похожие манипуляции осуществляются с suid root программой ssh-keysign.
CVE-идентификатор проблеме пока не присвоен, обновление ядра и пакетов в дистрибутивах не опубликованы. В выпущенных (https://www.kernel.org/) несколько часов назад ядрах 7.0.7, 6.18.30 и 6.12.88 уязвимость не устранена. На момент написания новости можно использовать только патч (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=31e62c2ebbfdc3fe3dbdf5e02c92a9dc67087a3a). Обсуждаются (https://www.openwall.com/lists/oss-security/2026/05/15/3) возможные обходные пути блокирования уязвимости, такие как выставление
sysctl kernel.yama.ptrace_scope (https://www.kernel.org/doc/Documentation/security/Yama.txt) или удаление флага suid root с исполняемых файлов в системе (как минимум с утилит ssh-keysign и chage, используемых в эксплоитах).
Источник: https://www.opennet.ru/opennews/art.shtml?num=65452 (https://www.opennet.ru/opennews/art.shtml?num=65452)
https://www.opennet.ru/opennews/art.shtml?num=65452