
Prova de conceito para CVE-2026-112445, uma escalada de privilégios local no macOS em que um usuário de console sem privilégios abusa do job launchd com.apple.xpc.uscwoap e do TIOCSTI para obter root.
Em 2020, alguém levantou uma questão no GitHub: O que é o uscwoap? O macOS já tinha mudado para o zsh, então porque é que com.apple.xpc.uscwoap ainda invocava o Bash?
Uma resposta mostrou a configuração da tarefa. Tinha o sinalizador BootShell definido e ligava os três fluxos padrão à consola. Com base nisto, o comentador sugeriu que a tarefa poderia estar envolvida em arrancar o sistema a partir do modo de utilizador único.
A configuração de com.apple.xpc.uscwoap reside no diretório system LaunchDaemons. Os campos relevantes são mostrados abaixo:
Label = com.apple.xpc.uscwoap
BootShell = true
ProcessType = Interactive
Program = /bin/bash
ProgramArguments = [bash, -sh]
StandardInPath = /dev/console
StandardOutPath = /dev/console
StandardErrorPath = /dev/console
A tarefa pertence ao domínio de sistema do launchd e não especifica uma conta com menos privilégios sob a qual correr, pelo que o Bash corre como root. StandardInPath liga a sua entrada padrão a /dev/console. O Bash interpreta a entrada que recebe deste dispositivo como comandos.
Uma conta não administradora com sessão iniciada na consola gráfica ativa pode iniciar esta tarefa através da interface de controlo de tarefas do launchd sem credenciais de administrador. O processo Bash resultante corre com UID 0. Apesar do sinalizador BootShell, este caminho de arranque também está disponível numa sessão de ambiente de trabalho normal.
A shell de root recebe os seus comandos de /dev/console. Nesta sessão de início de sessão gráfico, o dispositivo pertence à conta não administradora, enquanto o processo Bash que lê comandos a partir dele corre como root. Existe, portanto, uma fronteira de privilégios que separa a origem da entrada do processo que a executa.
A saída do terminal e a fila de entrada do terminal servem propósitos diferentes: a primeira apresenta texto, enquanto a segunda contém caracteres à espera de serem lidos por um programa. Um processo que consiga influenciar a fila de entrada pode, portanto, influenciar o que o Bash lê da entrada padrão.
TIOCSTI é uma interface de terminal para simular entrada, inserindo caracteres na fila de entrada. Em compilações afetadas, um processo a correr sob a conta do utilizador atual da consola pode usar este mecanismo para influenciar a entrada em /dev/console. A shell de root lançada pela tarefa de sistema lê esses caracteres a partir do mesmo dispositivo.
O Bash interpreta os caracteres como comandos e executa-os com os seus próprios privilégios de root. Este caminho de entrada não realiza qualquer verificação de autorização de administrador sobre o processo que fornece os caracteres, permitindo que a entrada de um utilizador sem privilégios se torne comandos executados como root.
A Apple atribuiu o CVE-2026-112445 a este problema, mas não incluiu o identificador no seu aviso de segurança. O motivo da omissão é desconhecido.
O macOS 27.2 remove a configuração com.apple.xpc.uscwoap.