Linux

特定の条件下で、攻撃者はオープンソース印刷システム CUPS の複数のコンポーネントの脆弱性を連鎖させ、脆弱なマシン上でリモートから任意のコードを実行することが可能です。

CVE-2024-47076 (libcupsfilters)、CVE-2024-47175 (libppd)、CVE-2024-47176 (cups-browsed)、CVE-2024-47177 (cups-filters)として追跡され、Simone Margaritelliによって発見されたこれらのセキュリティ欠陥は、デフォルト設定のシステムには影響しません。

CUPS(Common UNIX Printing Systemの略)は、Linuxシステム上で最も広く使われている印刷システムであり、FreeBSD、NetBSD、OpenBSDやその派生版などのUnixライクなオペレーティングシステムを実行しているデバイスでも一般的にサポートされています。

そのコンポーネントの1つがcups-browsedデーモンであり、このデーモンはローカルネットワークからネットワークプリンターや共有プリンターを検索し、そのマシンで印刷できるようにする。これは、ウィンドウズやマックがリモート・ネットワーク・プリンターをネットワーク上で検索し、印刷できるようにするのと似ている。

Margaritelli氏は、cups-browsedデーモンが有効になっている場合(ほとんどのシステムでは有効になっていない)、UDPポート631をリッスンすることを発見した。また、デフォルトでは、ネットワーク上のどのデバイスからでも新しいプリンターを作成するためのリモート接続を許可する。

彼は、悪意のあるPostScript Printer Description (PPD)プリンタを作成し、UDPポート631で動作している公開されたcups-browsedサービスに手動でアドバタイズできることを発見した。

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

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

Commands added using the foomatic-rip filter
foomatic-ripフィルターを使って追加されるコマンド(Simone Margaritelli)

世界への影響は限定的

これはリモート・コード実行の連鎖であるが、攻撃者が脆弱性を悪用して実際にリモート・コード実行を達成するためには、いくつかの障害を克服しなければならないことに最初から留意すべきである。

第一に、標的となるシステムが、通常デフォルトでは有効になっていないcups-browsedデーモンを有効にし、ネットワーク上にUDPポートを公開していなければならない。次に、攻撃者はユーザーを騙して、ローカルネットワーク上にある悪意のあるプリンターサーバーから印刷させなければならない。

「このバグの連鎖は、ローカルネットワーク上のプリンターを偽装することに依存しており、そのプリンターは、ネットワーク・ディスカバリーによって自動的に追加される。次に、検証されていない変数が、CUPSシステムの他の脆弱性を悪用してコードを実行するために使用されますが、印刷ジョブがトリガーされたときにのみ実行されます」とSonatypeのフィールドCTOであるイルッカ・トゥルネンは述べている

「これはRCEですが、攻撃者がUDP経由でコンピュータに接続できる必要があり、そのUDPはネットワーク接続時に広く無効化され、サービスは通常デフォルトではオンになっていません。現実世界への影響は低いと思われます。

このような理由から、Red Hatはこの欠陥の重大度を「重要」ではなく「重要」と評価した

‘sのテストでは、Linuxサーバーのほとんどはデフォルトでサービスが有効になっていなかったが、Ubuntu VMの1つは有効になっていたまた、自分のLinuxデバイスでcups-browsedがデフォルトで有効になっていることをTwitterで指摘した人もいる

パッチはないが緩和策はある

パッチはまだ開発中だが、Red Hatは、管理者がcups-browsedサービスの実行を停止し、エクスプロイトの連鎖を断ち切るために以下のコマンドを使用して再起動時に起動しないようにする緩和策を共有している:

sudo systemctl stop cups-browsed sudo systemctl disable cups-browsed

Red Hatユーザーは、以下のコマンドを使用して、自分のシステムでcups-browsedが実行されているかどうかを調べることもできます:

sudo systemctl status cups-browsed

結果が「Active: inactive (dead)」と表示された場合、エクスプロイトチェーンは停止しており、システムは脆弱ではありません。結果が “running “または “enabled “と表示され、設定ファイル/etc/cups/cups-browsed.confの “BrowseRemoteProtocols “ディレクティブに値 “cups “が含まれている場合、システムは脆弱です。