2020年、誰かがGitHubで疑問を投げかけた: uscwoapとは何か? macOSはすでにzshに切り替わっていたのに、なぜcom.apple.xpc.uscwoapは依然としてBashを起動していたのか?
ある返信がそのジョブの設定を示していた。BootShellフラグが設定されており、3つの標準ストリームすべてがコンソールに接続されていた。これに基づき、コメント投稿者はこのジョブがシングルユーザーモードからシステムを起動する際に関与している可能性があると示唆した。
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の設定を削除する。