
Proof-of-concept per CVE-2026-112445, un'escalation locale di privilegi su macOS in cui un utente console non privilegiato sfrutta il job launchd com.apple.xpc.uscwoap e TIOCSTI per ottenere i privilegi di root.
Nel 2020, qualcuno ha sollevato una domanda su GitHub: Cos'è uscwoap? macOS era già passato a zsh, quindi perché com.apple.xpc.uscwoap invocava ancora Bash?
Una risposta mostrava la configurazione del job. Aveva il flag BootShell impostato e collegava tutti e tre gli stream standard alla console. Sulla base di ciò, il commentatore suggeriva che il job potesse essere coinvolto nell'avvio del sistema dalla modalità utente singolo.
La configurazione di com.apple.xpc.uscwoap risiede nella directory di sistema LaunchDaemons. I campi rilevanti sono mostrati di seguito:
Label = com.apple.xpc.uscwoap
BootShell = true
ProcessType = Interactive
Program = /bin/bash
ProgramArguments = [bash, -sh]
StandardInPath = /dev/console
StandardOutPath = /dev/console
StandardErrorPath = /dev/console
Il job appartiene al dominio di sistema di launchd e non specifica un account con privilegi inferiori con cui essere eseguito, quindi Bash viene eseguito come root. StandardInPath collega il suo standard input a /dev/console. Bash interpreta l'input che riceve da questo dispositivo come comandi.
Un account non amministratore connesso alla console grafica attiva può avviare questo job tramite l'interfaccia di controllo dei job di launchd senza credenziali di amministratore. Il processo Bash risultante viene eseguito con UID 0. Nonostante il flag BootShell, questo percorso di avvio è disponibile anche in una normale sessione desktop.
La shell root riceve i suoi comandi da /dev/console. In questa sessione di login grafico, il dispositivo è di proprietà dell'account non amministratore, mentre il processo Bash che legge i comandi da esso viene eseguito come root. Un confine di privilegio separa quindi la fonte dell'input dal processo che lo esegue.
L'output del terminale e la coda di input del terminale servono a scopi diversi: il primo visualizza il testo, mentre la seconda contiene i caratteri in attesa di essere letti da un programma. Un processo che può influenzare la coda di input può quindi influenzare ciò che Bash legge dallo standard input.
TIOCSTI è un'interfaccia del terminale per simulare l'input inserendo caratteri nella coda di input. Sulle build interessate, un processo in esecuzione con l'account dell'utente della console corrente può utilizzare questo meccanismo per influenzare l'input su /dev/console. La shell root avviata dal job di sistema legge quei caratteri dallo stesso dispositivo.
Bash interpreta i caratteri come comandi e li esegue con i propri privilegi di root. Questo percorso di input non esegue alcun controllo di autorizzazione amministrativa sul processo che fornisce i caratteri, consentendo all'input di un utente non privilegiato di diventare comandi eseguiti come root.
Apple ha assegnato CVE-2026-112445 a questo problema, ma non ha incluso l'identificatore nel suo avviso di sicurezza. Il motivo dell'omissione è sconosciuto.
macOS 27.2 rimuove la configurazione com.apple.xpc.uscwoap.