UNIXシステムへの攻撃: CUPSを介した攻撃、Part I
要約
- CVE-2024-47176:
cups-browsed <= 2.0.1 は UDP INADDR_ANY:631 にバインドされており、攻撃者が制御する URL への Get-Printer-Attributes IPP リクエストをトリガーできる
- CVE-2024-47076:
libcupsfilters <= 2.1b1 の cfGetPrinterAttributes5 は、IPP サーバーから返された IPP 属性を検証またはサニタイズしないため、攻撃者が制御するデータを CUPS システムに渡すことができる
- CVE-2024-47175:
libppd <= 2.1b1 の ppdCreatePPDFromIPP2 は、一時 PPD ファイルに IPP 属性を書き込む際に検証またはサニタイズを行わず、攻撃者が制御するデータを注入できる
- CVE-2024-47177:
cups-filters <= 2.0.1 の foomatic-rip は、FoomaticRIPCommandLine PPD パラメーターを通じて任意のコマンド実行を許可する
影響
- リモートの未認証攻撃者が既存プリンターの IPP URL を悪意ある URL に置き換えたり、新しいプリンターをインストールしたりでき、印刷ジョブ開始時に任意のコマンドを実行できる
侵入経路
- WAN / 公開インターネット: リモート攻撃者がポート 631 に UDP パケットを送信する。認証は不要
- LAN: ローカル攻撃者が zeroconf / mDNS / DNS-SD 広告をスプーフィングし、同じコードパスを通じて RCE を達成できる
影響を受けるシステム
- 大半の GNU/Linux ディストリビューション
- 一部の BSD
- Google Chromium / ChromeOS(可能性あり)
- Oracle Solaris
- その他
対策
cups-browsed サービスを無効化して削除する
- システムの CUPS パッケージを更新する
- システムを更新できない場合は、UDP ポート 631 とすべての DNS-SD トラフィックを遮断する
紹介
- 数週間前、新しいノートPCに Ubuntu をセットアップしていた際、UDP ポートを監視しているサービスを確認するために
netstat -anu コマンドを実行した
- ポート 631 で
cups-browsed が UDP を使ってすべてのネットワークインターフェースで待ち受け、応答していることを発見した
cups-browsed は新しいプリンターを自動的にシステムへ追加する役割を持つ
cups-browsed とは?
cups-browsed は CUPS システムの一部で、新しいプリンターを検出して自動的にシステムへ追加する
- デフォルト設定ファイルはコメントアウトされており、誰でも接続できるよう許可されている
スタックバッファオーバーフローと競合状態
cups-browsed は oss-fuzz のカバレッジに含まれていない
process_browse_data 関数では、スタックバッファオーバーフローと競合状態が発生する可能性がある
- これらの問題は開発者と CERT に報告されているが、まだパッチは適用されていない
found_cups_printer に戻る
found_cups_printer 関数はパケットから URL を抽出し、cfGetPrinterAttributes 関数に渡す
- この URL は攻撃者が制御するサーバーへ接続される
インターネット印刷プロトコル(IPP)
- IPP はクライアントデバイスとプリンター間の通信のためのプロトコルである
- 攻撃者が制御するプリンター属性を返すことで、システムにプリンターを追加できる
GN⁺ のまとめ
- この記事は、CUPS システムの脆弱性を悪用してリモートコード実行を達成する方法を説明している
- CUPS に関連するさまざまな脆弱性があり、これによって攻撃者はシステムを制御できる
- これらの脆弱性にはまだパッチがなく、ユーザーは CUPS サービスを無効化するか更新する必要がある
- 類似機能を持つ他のプロジェクトとしては、
LPRng と CUPS の最新版がある
まだコメントはありません。