В ядре Linux выявлена уязвимость (пятая за последние две недели), позволяющая непривилегированному пользователю читать файлы, доступные только root. Уже опубликованы два рабочих эксплоита: sshkeysign_pwn читает закрытые SSH-ключи хоста (/etc/ssh/ssh_host_*_key), а chage_pwn — хэши паролей из /etc/shadow.
Проблема вызвана состоянием гонки в подсистеме pidfd. В момент между открытием файла suid root-программой и сбросом привилегий (через setreuid) возникает окно, когда __ptrace_may_access() пропускает проверку доступа, если task->mm = NULL после exit_mm(), но до exit_files(). В этом окне системный вызов pidfd_getfd считает, что uid вызывающего процесса совпадает с uid, которому разрешён доступ к файлу.
На проблему обращали внимание ещё в 2020 году, но она осталась неисправленной. CVE-идентификатор пока не присвоен, обновления ядра и дистрибутивов не опубликованы (ядра 7.0.7, 6.18.30 и 6.12.88 не защищены). Доступен только патч. Временные обходные пути: установить
sysctl kernel.yama.ptrace_scope=1 или удалить suid root с утилит ssh-keysign и chage.Linux / Линукс 🥸