
Повышение привилегий от непривилегированного пользователя до root в macOS Sonoma, Sequoia и Tahoe. Исправлено в macOS 26.6 / 15.7.8 / 14.8.8.
Повышение привилегий от непривилегированного пользователя до root через уязвимость в CUPS, затрагивающую macOS Tahoe, Sequoia и Sonoma до версий macOS 26.6 / 15.7.8 / 14.8.8.



Уязвимость возникает из-за двух связанных логических ошибок в привилегированном демоне cupsd.
1. Привилегированный токен аутентификации передаётся через границу доверия.
Когда CUPS опрашивает только что зарегистрированный принтер, он пересылает действительный токен локальной аутентификации бэкенду принтера — конечной точке, указанной в device-uri принтера. Поскольку непривилегированный пользователь контролирует этот device-uri, он может зарегистрировать принтер, указывающий на подконтрольный ему слушатель, и получить токен, который никогда не должен был покидать границу доверенной подсистемы. Архитектура предполагает, что бэкенд является доверенным; возможность непривилегированных пользователей регистрировать принтеры нарушает это предположение.
2. Файловый ввод-вывод с привилегиями root доступен до завершения проверки аутентификации.
В надёжно воспроизводимом временном окне во время регистрации принтера cupsd выполняет запись в файл с привилегиями root до завершения проверки аутентификации. Привилегированный ввод-вывод не зависит от результата проверки аутентификации, и как путь назначения, так и содержимое файла находятся под влиянием атакующего в момент выполнения записи.
python3 poc.py
Proof of concept связывает обе ошибки в три этапа.
Этап 1 — Перехват токена.
Атакующий регистрирует принтер, чей device-uri указывает на подконтрольный ему локальный слушатель, затем инициирует опрос. cupsd пересылает действительный токен локальной аутентификации на подконтрольный атакующему слушатель.
Этап 2 — Повторное использование токена.
Атакующий повторно использует перехваченный токен для регистрации второго принтера с device-uri вида file://, нацеленного на произвольный, не защищённый SIP путь по его выбору.
Этап 3 — Произвольная запись с привилегиями root.
Атакующий отправляет задание печати с подконтрольным ему содержимым на второй принтер. cupsd записывает данные задания по указанному пути с привилегиями root. Взаимодействие с пользователем не требуется ни на одном этапе.
После этого скрипт проверит, что файл был создан с привилегиями root, тем самым демонстрируя уязвимость.
Независимо обнаружено Dallas Dubs; Apple также выражает благодарность Aaron Grattafiori — NVIDIA AI Red Team, XBreach.ai, Andreas Jaegersberger и Ro Achterberg из Nosebeard Labs