
Доказательство концепции для CVE-2026-112445 — локальное повышение привилегий в macOS, при котором непривилегированный пользователь консоли злоупотребляет заданием launchd com.apple.xpc.uscwoap и TIOCSTI для получения прав root.
В 2020 году кто-то задал вопрос на GitHub: Что такое uscwoap? macOS уже перешла на zsh, так почему же com.apple.xpc.uscwoap по-прежнему вызывает Bash?
Ответ показал конфигурацию задания. В нём был установлен флаг BootShell, и все три стандартных потока были подключены к консоли. Исходя из этого, комментатор предположил, что задание может быть задействовано при загрузке системы из однопользовательского режима.
Конфигурация com.apple.xpc.uscwoap находится в системном каталоге LaunchDaemons. Соответствующие поля показаны ниже:
Label = com.apple.xpc.uscwoap
BootShell = true
ProcessType = Interactive
Program = /bin/bash
ProgramArguments = [bash, -sh]
StandardInPath = /dev/console
StandardOutPath = /dev/console
StandardErrorPath = /dev/console
Задание принадлежит системному домену launchd и не указывает менее привилегированную учётную запись для запуска, поэтому Bash работает от имени root. StandardInPath подключает его стандартный ввод к /dev/console. Bash интерпретирует ввод, получаемый от этого устройства, как команды.
Учётная запись без прав администратора, вошедшая в активную графическую консоль, может запустить это задание через интерфейс управления заданиями launchd без учётных данных администратора. В результате процесс Bash работает с UID 0. Несмотря на флаг BootShell, этот путь запуска также доступен в обычном сеансе рабочего стола.
Root-оболочка получает свои команды из /dev/console. В этом сеансе графического входа устройство принадлежит учётной записи без прав администратора, тогда как процесс Bash, читающий команды из него, работает от имени root. Таким образом, граница привилегий отделяет источник ввода от процесса, исполняющего его.
Вывод терминала и очередь ввода терминала служат разным целям: первый отображает текст, тогда как вторая хранит символы, ожидающие чтения программой. Поэтому процесс, способный влиять на очередь ввода, может влиять на то, что Bash читает из стандартного ввода.
TIOCSTI — это интерфейс терминала для имитации ввода путём вставки символов в очередь ввода. В затронутых сборках процесс, работающий под учётной записью текущего пользователя консоли, может использовать этот механизм для влияния на ввод в /dev/console. Root-оболочка, запущенная системным заданием, читает эти символы с того же устройства.
Bash интерпретирует символы как команды и исполняет их со своими root-привилегиями. Этот путь ввода не выполняет проверку авторизации администратора для процесса, поставляющего символы, что позволяет вводу непривилегированного пользователя превращаться в команды, исполняемые от имени root.
Apple присвоила этой проблеме идентификатор CVE-2026-112445, но не включила его в свой бюллетень по безопасности. Причина этого упущения неизвестна.
macOS 27.2 удаляет конфигурацию com.apple.xpc.uscwoap.