Уязвимост в подсистемата 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 след повикване на файл от суид root процес. В момент между отварянето на файла и нулиране на привилегиите в суид програмата (например, чрез функцията setreuid), възниква ситуация, когато приложението, което е стартирало програмата с суид root, може чрез дескриптора pidfd да получи достъп до отворения в суид програмата файл, дори ако правата за достъп до файла не го позволяват.

Възможността за експлоатация възниква, защото функцията "__ptrace_may_access()" пропуска проверката за възможност за достъп до файла, ако полето task->mm е зададено на NULL след извикване на exit_mm(), но преди извикването на exit_files(). В този момент системният повик pidfd_getfd счита, че идентификаторът на потребителя (uid) на извикващия процес съответства на идентификатора, на който е разрешен достъпът до файла. Интересно е, че на проблема вече беше обърнато внимание още през 2020 година, но той остава нерешен.

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

CVE-идентификатор за проблема все още не е присвоен, актуализациите на ядрото и пакетите в дистрибуциите не са публикувани. В издадените преди няколко часа ядра 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