Уязвимост в подсистемата pidfd на Linux, позволяваща достъп до недостъпни за потребителя файлове

В ядрото на Linux бе открито петото (1, 2, 3) критично уязвимо за последните две седмици, позволяващо на потребител да повиши привилегиите си в системата. Публикувани са два работещи експлойта: sshkeysign_pwn, който позволява на непривилегирован потребител да прочете съдържанието на защитените хостови SSH-ключове /etc/ssh/ssh_host_*_key, а chage_pwn — да чете съдържанието на файла /etc/shadow с хашовете на паролите на потребителите.

Информацията за уязвимостта не беше планирана за разкритие, но един от изследователите по сигурността, на базата на предложен патч за ядрото, успя да определи същността на уязвимостта, позволяваща прочита на файлове, достъпни само за потребителя 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) на извикващия процес съответства на идентификатора, на който е разрешен достъпът до файла. Забележително е, че на проблема беше обърнато внимание още през 2020 година, но той остана неизправен.

В експлойта, който получава съдържанието на /etc/shadow, атаката се свежда до циклично стартиране чрез fork+execl на приложението /usr/bin/chage с флаг suid root, което чете съдържанието на /etc/shadow. След като процесът се отклони, се извършва системен повик pidfd_open и се извършва цикличен обход на наличните pidfd дескриптори чрез системно повикване pidfd_getfd и тяхната проверка чрез /proc/self/fd. В експлойта sshkeysign_pwn подобни манипулации се извършват с suid root програмата ssh-keysign.

CVE идентификаторът на проблема все още не е присвоен, обновления на ядрото и пакетите в дистрибуциите не са публикувани. В издадените преди няколко часа ядрa 7.0.7, 6.18.30 и 6.12.88 уязвимостта не е отстранена. В момента на писането на новината може да се използва само пач. Обсъждат се възможни обходни пътища за блокиране на уязвимостта, като задаване на sysctl kernel.yama.ptrace_scope=3 или премахване на флага suid root от изпълняемите файлове в системата (поне от утилитите ssh-keysign и chage, използвани в експлойтите).

Допълнение: Уязвимостта получи идентификатор CVE-2026-46333. Сформирани са обновления на ядрото на Linux 7.0.8, 6.18.31, 6.12.89, 6.6.139, 6.1.173, 5.15.207 и 5.10.256 с отстраняване на уязвимостта. Статусът на отстраняване на уязвимостите в дистрибуциите може да се оцени на следните страници: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora.

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

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