macOSのCUPSに存在するローカル権限昇格の脆弱性CVE-2026-39875について、実証コード(PoC)が公開されました。この脆弱性を悪用すると、権限を持たないローカルユーザーがroot権限で任意のファイル書き込みを実行できてしまいます。
この脆弱性は、macOS 26.6、15.7.8、14.8.8よりそれぞれ前のバージョンのmacOS Tahoe、Sequoia、Sonomaに影響します。問題はAppleが実装するCommon Unix Printing System、具体的には特権を持つcupsdデーモン内に存在します。
この脆弱性はユーザーの操作を必要とせず、プリンター登録と印刷ジョブ処理の過程で発生する2つのロジック上の欠陥を連鎖させることでトリガーできます。Dallas Dubs氏は、macOS Tahoe 26.4.1、macOS Sequoia 15.7.5、macOS Sonoma 14.8.5でこの問題を実証しました。
1つ目の問題は、信頼境界を越えて特権を持つLocal認証トークンが転送されてしまうというものです。CUPSは新規登録されたプリンターを確認する際、設定されたdevice-uriで指定されたプリンターバックエンドに有効な認証トークンを転送します。
この動作は、バックエンドが信頼できるものであるという前提に基づいています。しかし、権限を持たないローカルユーザーは、自分が制御するリスナーを指すdevice-uriを持つプリンターを登録できてしまいます。
攻撃者は悪意のあるプリンターを登録し、確認処理を強制的に行わせることで、cupsdから有効なLocal認証トークンを受け取ることができます。
このトークンは本来、信頼された印刷サブシステム内にとどまるべきものですが、実際には攻撃者が制御するエンドポイントに露出してしまいます。取得したトークンは、別のプリンターを登録する際に再利用可能です。
2つ目の欠陥は、プリンター登録処理の中で再現可能なタイミングの隙間に発生します。認証の検証が完了する前に、cupsdがroot権限でファイル書き込みを実行してしまう場合があるのです。
この特権操作は認証結果に基づいて適切に制御されておらず、書き込み先のファイルパスと内容は攻撃者の影響を受ける状態のままです。公開されたPoCはpython3 poc.pyで実行され、これらの弱点を3段階で連鎖的に悪用します。
まず、ローカルの攻撃者が制御するリスナーを指すバックエンドURIを設定したプリンターを作成し、転送されるLocal認証トークンを取得するプロセスを実行します。
次に、攻撃者はそのトークンを再利用して、System Integrity Protectionで保護された場所以外の任意のパスを対象とするfile://デバイスURIを設定した、2つ目のプリンターを登録します。
最後に、攻撃者はこの2つ目のプリンターに印刷ジョブを送信します。すると、CUPSは攻撃者が制御するジョブデータを、root権限で選択されたファイルシステムの場所に書き込んでしまいます。
PoCはその後、作成されたファイルの所有者がrootであることを確認し、任意のファイル書き込みという条件の悪用に成功したことを実証しています。
ローカル権限昇格の脆弱性と説明されてはいますが、公開されているPoC自体は完全なrootシェルを提供するものではなく、攻撃者の実効ユーザーIDを自動的に変更するものでもありません。
その代わりに、任意のファイルをroot権限で書き込めるプリミティブを実証するものであり、書き込み可能なパスやローカルの設定、攻撃者が改変可能なファイルを利用する特権サービスの有無次第では、非常に大きな影響を及ぼす可能性があります。
組織は、該当するmacOS 26.6、15.7.8、または14.8.8向けのAppleのセキュリティアップデートを適用すべきです。セキュリティチームも、ローカルのプリンター登録権限を見直し、特に想定外のローカルリスナーアドレスやfile://デバイスURIを使用している不審なCUPSプリンターエントリがないか調査することが推奨されます。
この問題はDallas Dubs氏が独自に発見しました。Appleはこれに加え、NVIDIA AI Red TeamのAaron Grattafiori氏、XBreach.ai、Nosebeard LabsのAndreas Jaegersberger氏とRo Achterberg氏の功績も認めています。
SOC調査の死角を解消し、ANY.RUNで脅威をより早期に封じ込めることで、対応コストと業務への影響を削減できます。
翻訳元: https://cyberpress.org/poc-exploit-released-macos-cups-flaw/