Common UNIX Printing System (CUPS) の複数の脆弱性:現実での影響は限定的だが

CUPS flaws enable Linux remote code execution, but there’s a catch

2024/09/26 BleepingComputer — オープンソース印刷システムである CUPS に存在する、複数のコンポーネントの一連の脆弱性を連鎖させることに成功したリモートの攻撃者が、特定の条件下において脆弱なマシン上で任意のコードを実行できることが、Simone Margaritelli により明らかにされた。ただし、それらの脆弱性 CVE-2024-47076 (libcupsfilters)/CVE-2024-47175 (libppd)/CVE-2024-47176 (cups-browsed)/CVE-2024-47177 (cups-filters) は、デフォルト・コンフィグレーションのシステムには影響しない。

CUPS (Common UNIX Printing System の略) とは、Linux システムで最も広く使用されている印刷システムであり、FreeBSD/NetBSD/OpenBSD などの Unix 系 OS においても、それらの派生製品がサポートされている。

そのコンポーネントの1つに、”cups-browsed” デーモンがある。このデーモンは、ローカル・ネットワーク上でアドバタイズされたネットワーク・プリンターまたは共有プリンターを検索し、それぞれのマシンからの印刷を可能にするものだ。その方式は、Windows/Mac のネットワークで、リモート・ネットワーク・プリンターを検索して印刷する手順に似ている。

この “cups-browsed” デーモンが有効化されている場合 (大半のシステムでは無効化) に、UDP ポート 631 でリッスンできることをすることを Margaritelli が発見した。

彼は、UDP ポート 631 で実行されている公開された “cups-browsed” サービスに対して手動でアドバタイズできる、悪意の PostScript Printer Description (PPD) プリンターを作成できることも発見しました。ここで懸念されるのは、ネットワーク上の任意のデバイスからのリモート接続で、新しいプリンターを作成できるというデフォルトである。

それにより、悪意のプリンターをリモート・マシンが自動的にインストールし、印刷できるようになってしまう。そして、公開されたサーバのユーザーが新しいプリンターで印刷すると、PPD 内の悪意のあるコマンドがコンピューターのローカルで実行される。

印刷時に実行されるコマンドは、”foomatic-rip” フィルターを通じて追加される。このフィルターは、デバイス上でコマンドを実行し、印刷ジョブが正しくレンダリングされるようにするものだ。

Commands added using the foomatic-rip filter
Commands added using the foomatic-rip filter (Simone Margaritelli)
現実世界への影響は限定的

ここまで、リモート・コード実行チェーンを説明してきたが、この脆弱性を悪用する攻撃者がリモート・コード実行を達成する前提として、いくつかの障害を克服する必要があることに留意する必要がある。

まず、デフォルトでは有効化されているのは稀である “cups-browsed” デーモンが、ターゲット・システム上で有効化されている必要がある。つまり、このデーモンが有効化されていると、UDP ポートがネットワーク上で公開されることになる。続いて、攻撃者は、そこサーバがユーザーのマシン上に現れるようにしてユーザーを騙し、ローカル・ネットワーク上の悪意のプリンター・サーバから印刷を実行させる必要がある。

Sonatype の Field CTO である Ilkka Turunen は、「この、一連のバグにより、ローカル・ネットワーク内のプリンターが偽装される。そして、デフォルト・コンフィグレーションには無いプリンターが、ネットワーク検出により自動的に追加される。そして、CUPS システムの他の脆弱性を悪用することで、印刷ジョブがトリガーされたときにコードを実行するという、未検証の要素がある。この攻撃チェーンは RCE に到達するが、多くのケースで無効化されている UDP 経由でのコンピューター接続を、攻撃者は達成する必要がある。このサービスは、デフォルトで無効化されているのが常であるため、いくつかの緩和策が存在するし。現実世界への影響は低いようだ」と述べている。

これらの理由から Red Hat は、この欠陥の影響を Critical ではなく Important と評価している。

BleepingComputer のテストでは、大半の Linux サーバにおいて、このサービスは無効化されていたが、唯一の例外は Ubuntu VM であり、そこでは有効化されていた。この Linux デバイスでは “cups-browsed” がデフォルトで有効化されていると、 他のユーザーも Twitter で指摘している。

パッチは未提供だが緩和策はある

管理者は以下のコマンドを使用して “cups-browsed” サービスの実行を停止し、再起動時にサービスが起動しないようにできる。このエクスプロイト・チェーンを遮断する緩和策は、Red Hat により共有されたものだ:

sudo systemctl stop cups-browsed
sudo systemctl enable cups-browsed

さらに Red Hat ユーザーは、以下のコマンドを使用することで、自身のシステム上での “cups-browsed” の実行の有無を確認できる:

sudo systemctl status cups-browsed

その結果として、”Active: inactive (dead)” が表示された場合には、このエクスプロイト・チェーンは停止しており、システムは脆弱ではない。その一方で、 “running” もしくは “enabled” が表示され、コンフィグ・ファイル “/etc/cups/cups-browsed.conf” の “BrowseRemoteProtocols” ディレクティブに、値 “cups” が含まれている場合のシステムは脆弱である。