
CVE-2026-112445에 대한 개념 증명으로, 비특권 콘솔 사용자가 launchd의 com.apple.xpc.uscwoap 작업과 TIOCSTI를 악용하여 root 권한을 획득하는 macOS 로컬 권한 상승 취약점입니다.
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 구성을 제거한다.