
CVE-2026-34990 の概念実証エクスプロイト。CUPS 2.4.16 におけるローカル権限昇格で、CUPS_CREATE_LOCAL_PRINTER とキャプチャしたローカル認証トークンを介した任意ファイル書き込みを悪用する。
CUPS 2.4.16 において CUPS_CREATE_LOCAL_PRINTER を介した任意ファイル書き込みによるローカル権限昇格。
CUPS では、device-uri に file:// パスを指定してローカルプリンターを作成できます。document-format: application/vnd.cups-raw および compression: gzip を指定して印刷ジョブを送信すると、cupsd がジョブデータを展開し、そのパスに直接書き込みます — これは cupsd が実行されているユーザー(通常は root または高い権限を持つサービスアカウント)として行われます。
管理操作に必要なローカル認証トークンは、ipptool の cups-create-local-printer.test を localhost 上の偽の IPP サーバーに向けることで取得できます。CUPS が認証のために接続すると、Authorization: Local <token> ヘッダーを送信するため、CUPS が検証する前にこれを傍受できます。
cups-create-local-printer.test を偽のサーバーに向けて ipptool を実行する — CUPS が認証のためにローカル認証トークンを送信する401 WWW-Authenticate: Local trc="y" を返し、トークンをクリーンに取得するdevice-uri: file:///etc/sudoers.d/<user>-pwn でプリンターを作成するsudo -n /bin/bashcreate_local_printer 呼び出しは競合中もソケットを開いたままにします — これにより、管理操作と印刷ジョブが完了する間、プリンター登録が処理中状態に保たれます。
cups-create-local-printer.test を含む ipptool がインストールされていること(標準の CUPS インストール)# デフォルトでは /etc/sudoers.d/<your-username>-pwn に書き込みます
python3 exploit.py
# カスタムターゲット
CUPS_TARGET=/etc/sudoers.d/youruser-pwn CUPS_ATTACKER=youruser python3 exploit.py
スクリプト内の SUDOERS_LINE を実際のユーザー名に編集してください — デフォルトは aporter です。
エクスプロイトは最大 12 回試行します。各試行では状態をリセットするためにプリンターを削除して再作成します。
許可されたセキュリティテストおよび研究のみを目的としています。