У ядрі 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-ідентифікатор проблемі поки не присвоєно, оновлення ядра та пакетів у дистрибутивах не опубліковано. У випущених кілька годин тому ядрах 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
