カップのオーバーフロー:プリンターがインクよりもこぼれた場合

Elastic Security Labsでは、認証されていない攻撃者がIPPやmDNSを介してシステムを悪用し、Linux、macOS、BSD、ChromeOS、SolarisなどのUNIXベースのシステムでリモートコード実行(RCE)を引き起こすことができる、CUPS印刷システムの脆弱性の検出と軽減戦略について説明しています。

溢れるカップ:プリンターからインク以外がこぼれる時

Update October 2, 2024

The following packages introduced out-of-the-box (OOTB) rules to detect the exploitation of these vulnerabilities. Please check your "Prebuilt Security Detection Rules" integration versions or visit the Downloadable rule updates site.

  • Stack Version 8.15 - Package Version 8.15.6+
  • Stack Version 8.14 - Package Version 8.14.12+
  • Stack Version 8.13 - Package Version 8.13.18+
  • Stack Version 8.12 - Package Version 8.12.23+

重要なポイント

  • On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) disclosed multiple vulnerabilities affecting the cups-browsed, libscupsfilters, and libppd components of the CUPS printing system, impacting versions <= 2.0.1.
  • この脆弱性により、認証されていないリモートの攻撃者がIPP(Internet Printing Protocol)およびmDNSを介して印刷システムを悪用し、影響を受けるシステムでリモートコード実行(RCE)を実現することができます。
  • この攻撃は、パブリックインターネットまたはローカルネットワークを介して開始でき、認証要件なしでcups-browsedによって公開されるUDPポート 631 標的にします。
  • この脆弱性チェーンには、FoomaticRIPCommandLineディレクティブを通じて任意のコマンドの実行を許可する foomatic-rip フィルターが含まれており、これは 2011 年以降、既知の問題(CVE-2011-2697CVE-2011-2964)ですが、パッチが適用されていません。
  • 影響を受けるシステムには、ほとんどの GNU/Linux ディストリビューション、BSD、ChromeOS、Solaris が含まれ、その多くで cups-browsed サービスがデフォルトで有効になっています。
  • 「Attacking UNIX Systems via CUPS Part I」というタイトルの Margaritelli 氏は、このトピックに関するさらなる研究を発表することを期待しているようです。
  • Elasticは、組織がこれらの脆弱性の潜在的な悪用を検出し、軽減するための保護とガイダンスを提供しています。

CUPS RCEの概要

On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) uncovered a chain of critical vulnerabilities in the CUPS (Common Unix Printing System) utilities, specifically in components like cups-browsed, libcupsfilters, and libppd. These vulnerabilities — identified as CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, and CVE-2024-47177 — affect widely adopted UNIX systems such as GNU/Linux, BSDs, ChromeOS, and Solaris, exposing them to remote code execution (RCE).

この問題の核心は、CUPSコンポーネントの入力検証の欠如であり、これにより攻撃者はインターネット印刷プロトコル(IPP)を悪用できます。 攻撃者は、インターネット(WAN)を介してターゲットのUDPポート 631 に悪意のあるパケットを送信したり、ローカルネットワーク(LAN)内でDNS-SD/mDNSアドバタイズメントを偽装したりして、脆弱なシステムを悪意のあるIPPサーバーに接続させることができます。

コンテキストとして、IPPは、ネットワーク経由で印刷ジョブを送受信するために使用されるアプリケーション層プロトコルです。 これらの通信には、プリンターの状態(紙詰まり、インク低下など)やジョブの状態に関する情報の送信が含まれます。 IPPは、Windows、macOS、Linuxを含むすべての主要なオペレーティングシステムでサポートされています。 プリンターが使用可能な場合、プリンターは (DNS 経由で) プリンターの準備ができたことを示すメッセージを (DNS 経由で) ブロードキャストします。これには、Uniform Resource Identifier (URI) も含まれています。 Linux ワークステーションがこのメッセージを受け取ると、多くの Linux のデフォルト設定では、OS 内で使用するプリンターが自動的に追加および登録されます。 そのため、この場合の悪意のあるプリンターは自動的に登録され、印刷ジョブで使用できるようになります。

接続すると、悪意のあるサーバーは、CUPSがプリンターのプロパティを記述するために使用するPostScriptプリンター記述(PPD)ファイルに挿入される細工されたIPP属性を返します。 これらの操作されたPPDファイルにより、攻撃者は印刷ジョブがトリガーされたときに任意のコマンドを実行することができます。

このチェーンの主要な脆弱性の1つは、FoomaticRIPCommandLineディレクティブを介して任意のコマンドの実行を可能にすることが知られている foomatic-rip フィルターです。 10年以上にわたって脆弱であったにもかかわらず、多くの最新のCUPS実装ではパッチが適用されていないため、リスクがさらに悪化しています。

これらの脆弱性はCVSSスコアが9.9と非常に深刻ですが、cups-browsedを無効にし、UDPポート631をブロックし、CUPSをパッチ適用済みバージョンに更新することで軽減できます。 多くの UNIX システムでは、このサービスがデフォルトで有効になっているため、影響を受ける組織にとってこれは緊急の課題となっています。

ElasticのPOC分析

Elasticの脅威リサーチエンジニアは、@evilsocketが作成したオリジナルの概念実証を最初に見つけましたが、これはリークされていました。 しかし、 cupshax の概念実証(PoC)は、ローカルで実行できるという点から、PoC(概念実証)を利用することにしました。

まず、PoCは、mDNS/ZeroConfを使用してネットワーク上で偽のプリンターサービスを作成および登録する役割を担うカスタムPythonクラスを利用しました。 これは主に、偽のインターネット印刷プロトコル(IPP)プリンターのZeroConfサービスエントリを作成することによって実現されます。

PoCが実行されると、PoCは偽のプリンター広告をブロードキャストし、IPPリクエストをリッスンします。 脆弱なシステムがブロードキャストを見ると、被害者はブロードキャストメッセージで提供されたURLからプリンターの属性を自動的に要求します。 PoCは、CVEの履歴で知られるFoomaticRIPCommandLineパラメータを含むIPP属性で応答します。 被害者は、これらのIPP属性から PostScript Printer Description (PPD)ファイルを生成して保存します。

この時点で、実行を続行するには、印刷ジョブを開始し、それを偽のプリンターに送信することを選択するためのユーザー操作が必要です。 印刷ジョブが送信されると、PPD ファイルは CUPS に印刷ジョブの処理方法を指示します。 付属の FoomaticRIPCommandLine ディレクティブは、被害者のマシンで任意のコマンドを実行することを可能にします。

Cupshax PoCによるエクスプロイトのレビューとテストでは、これらの脆弱なエンドポイントと実行プロセスに関するいくつかの注目すべきハードルと重要な詳細を特定しました。

任意のコマンドを実行してファイルを作成すると、任意のコマンドの実行で報告されたユーザーとグループ、つまり CUPS ユーティリティを使用する Linux システムのデフォルトの印刷グループlpであることに気付きました。したがって、Cupshax PoC/エクスプロイトでは、CUPS の脆弱性と lp ユーザーの両方が悪意のあるペイロードを取得して実行するための十分な権限を持っている必要があります。 デフォルトでは、多くのシステムの lp ユーザーは、リバースシェルなどの効果的なペイロードを実行するためのこれらの権限を持っています。ただし、別の緩和策は、ファイアウォールやIPtablesの強制ポリシーと並んで、AppArmorやSELinuxポリシーなどのLinux内で利用可能なネイティブコントロールを通じて、これらのペイロードが無効になるように lp を制限することです。

多くのデフォルト設定の lp ユーザーは、印刷サービスに必要のないコマンド ( telnetなど) にアクセスできます。 攻撃対象領域を減らすために、不要なサービスを削除し、必要に応じて制限を追加して、 lp ユーザーがそれらを使用できないようにすることをお勧めします。

また、対話型リバースシェルは、 lp ユーザーがログインシェルを持っていないため、この手法ではすぐにはサポートされないことにも注意しました。しかし、いくつかの創造的な戦術により、PoCでこれを達成することができました。 一般的なPoCは、 /tmp/にファイルを書き込むことでエクスプロイトをテストしますが、ほとんどの場合、検出は簡単です。 このファイルを書き込むユーザーは lp されるため、ペイロードをディスクにダウンロードして保存する攻撃者にも同様の動作が発生することに注意してください。

これらの観察結果に加えて、親プロセス foomatic-rip がテレメトリでシェルを実行することが観察されましたが、これは非常にまれです

「Cupshax」POCの実行

これらの脆弱性の影響を実証するために、Living off the land技術を使用してリバースシェルにペイロードを使用するシナリオと、リモートペイロードを取得して実行するという2つの異なるシナリオを実行しようとしました。 これらのアクションは、脆弱なシステムが特定されると、敵対的なグループが利用しようとすることがよくあります。 初期段階では、広範な悪用は観察されていませんが、以下に示すシナリオの一部を再現する可能性があります。

Cupshax PoCを初めて実行しようとしたときは、 lp ユーザーに割り当てられたデフォルトのユーザーグループ、つまり、システムへのリモートアクセスを必要とするユーザーに共通する属性であるインタラクティブログオンに関する制限により、いくつかの小さな障害に直面しました。 ただし、これは、影響を受けるホストシステム上でリモートペイロードをダウンロードし、コンパイルし、実行する能力には影響しませんでした。

リバースシェル呼び出しを中心に継続的なテストが行われ、以下で成功裏に示されました。

影響の評価

  • 過酷: これらの脆弱性には、CVSS スコアが 最大9.9で評価され、重大度を示しています。 CUPS が広く使用されており、これらの脆弱性をリモートで悪用できるため、これはリスクの高い問題となっています。
  • 影響を受けるのは誰ですか? この脆弱性は、主要なGNU/Linuxディストリビューションや、影響を受けるCUPSコンポーネントを実行しているChromeOSやBSDなどの他のオペレーティングシステムを含む、ほとんどのUNIXベースのシステムに影響を与えます。 一般に公開されているシステムやネットワークに公開されているシステムは、特にリスクにさらされています。 さらなるガイダンスと通知は、パッチが利用可能になると、ベンダーから提供される可能性があります。また、さらなる修復手順も提供されます。 CUPSは通常、ローカルホストでリッスンしますが、Shodanレポートでは、75,000を超えるCUPSサービスがインターネット上に公開されている ことが強調 されています。
  • 潜在的な損害: 悪用されると、攻撃者はシステムを制御して任意のコマンドを実行できます。 環境によっては、データ流出、ランサムウェアのインストール、またはその他の悪意のあるアクションにつながる可能性があります。 WAN経由でプリンターに接続されたシステムは、攻撃者が内部ネットワークアクセスを必要とせずにこれを悪用できるため、特に危険にさらされています。

修復

@evilsocketで 強調されている ように、いくつかの修復推奨事項があります。

  • cups-browsedサービスを無効にしてアンインストールします。たとえば、 Red HatUbuntu の推奨事項を参照してください。
  • CUPS パッケージがディストリビューションで利用可能な最新バージョンに更新されていることを確認してください。
  • 更新できない場合は、影響を受ける可能性のあるホストからの UDP ポート 631 と DNS-SD トラフィックをブロックし、前述の推奨事項を調査して、ホスト上の lp ユーザーとグループの構成をさらに強化します。

弾力性のある保護

このセクションでは、現在公開されている脆弱性に関連する疑わしいアクティビティを明らかにするために設計された検出クエリとハンティング クエリについて説明します。 これらのクエリは、プロセスの動作とコマンド実行パターンに焦点を当てることで、本格的な攻撃にエスカレートする前に、潜在的な悪用の試みを特定するのに役立ちます。

cupsd または foomatic-rip シェルの実行

最初の検出ルールは、 foomatic-rip によって生成され、すぐにシェルを起動する Linux システム上のプロセスを対象としています。 これは、正当な印刷ジョブがシェルの実行を必要とすることはめったになく、この動作が悪意のあるアクティビティの強力な指標となるため、効果的です。 注: 任意のコマンドの実行が可能な場合、シェルが必ずしも敵対者の目標であるとは限りません。

process where host.os.type == "linux" and event.type == "start" and
 event.action == "exec" and process.parent.name == "foomatic-rip" and
 process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") 
 and not process.command_line like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")

このクエリでは 33 私たちが実行したすべてのPoC試行を検出することができました。

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_shell_execution.toml

プリンター・ユーザー (lp) シェルの実行

この検出ルールは、デフォルトのプリンターユーザー(lp)が印刷プロセスを処理することを前提としています。 このユーザーを指定することで、親プロセスのリストを広げながら範囲を絞り込み、 cupsdを含めることができます。 現在、RCEが cupsdを通じて悪用される可能性があるという兆候はありませんが、その可能性を排除することはできません。

process where host.os.type == "linux" and event.type == "start" and
 event.action == "exec" and user.name == "lp" and
 process.parent.name in ("cupsd", "foomatic-rip", "bash", "dash", "sh", 
 "tcsh", "csh", "zsh", "ksh", "fish") and process.name in ("bash", "dash", 
 "sh", "tcsh", "csh", "zsh", "ksh", "fish") and not process.command_line 
 like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")

ユーザー名 lpに焦点を当てることで、範囲を広げ、以前と同様に、 33 PoC の実行をすべて検出しました。

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_lp_user_execution.toml

CUPS foomatic-rip 子によるネットワーク接続

このルールは、 foomatic-ripの子プロセスによって開始されたネットワーク接続を識別します。これは、疑念を生じさせる動作です。 通常、正当な操作には送信接続を確立するこれらのプロセスが含まれないため、検出されたアクティビティは綿密に調査する必要があります。 このような通信が環境で予想される場合は、不要なアラートを回避するために、宛先 IP が適切に除外されていることを確認してください。

sequence by host.id with maxspan=10s
  [process where host.os.type == "linux" and event.type == "start" 
   and event.action == "exec" and
   process.parent.name == "foomatic-rip" and
   process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] 
   by process.entity_id
  [network where host.os.type == "linux" and event.type == "start" and 
   event.action == "connection_attempted"] by process.parent.entity_id

親子関係をキャプチャすることで、ネットワーク接続が侵害された可能性のあるアプリケーションから発信されることを確認します。

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/command_and_control_cupsd_foomatic_rip_netcon.toml

CUPS foomatic-rip 子によるファイル作成

このルールは、foomatic-rip の子プロセスによって開始された疑わしいファイル作成イベントを検出します。 現在のすべての概念実証には、 /tmp/内のファイルに書き込むデフォルトのテストペイロードがあるため、このルールはそれをキャッチします。 さらに、攻撃者が悪意のあるペイロードをダウンロードし、その後ファイルを作成するシナリオを検出できます。

sequence by host.id with maxspan=10s
  [process where host.os.type == "linux" and event.type == "start" and 
   event.action == "exec" and process.parent.name == "foomatic-rip" and 
   process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] by process.entity_id
  [file where host.os.type == "linux" and event.type != "deletion" and
   not (process.name == "gs" and file.path like "/tmp/gs_*")] by process.parent.entity_id

このルールでは、デフォルトのcupsd動作を考慮するために/tmp/gs_*除外されますが、セキュリティを強化するために、アラートでより多くのノイズが発生する可能性があることを念頭に置いて、この除外を削除することを選択できます。

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_file_creation.toml

foomatic-rip または cupsd の親からの疑わしい実行

このルールは、 foomatic-ripcupsdの子プロセスによって実行される疑わしいコマンドラインを検出します。 これは、永続化メカニズム、ファイルのダウンロード、エンコード/デコード操作、リバースシェル、Go AwayBinsによる共有オブジェクトの読み込みなど、潜在的に悪意のあるアクティビティを特定することに焦点を当てています。

process where host.os.type == "linux" and event.type == "start" and 
 event.action == "exec" and process.parent.name in 
 ("foomatic-rip", "cupsd") and process.command_line like (
  // persistence
  "*cron*", "*/etc/rc.local*", "*/dev/tcp/*", "*/etc/init.d*", 
  "*/etc/update-motd.d*", "*/etc/sudoers*",
  "*/etc/profile*", "*autostart*", "*/etc/ssh*", "*/home/*/.ssh/*", 
  "*/root/.ssh*", "*~/.ssh/*", "*udev*", "*/etc/shadow*", "*/etc/passwd*",
    // Downloads
  "*curl*", "*wget*",

  // encoding and decoding
  "*base64 *", "*base32 *", "*xxd *", "*openssl*",

  // reverse connections
  "*GS_ARGS=*", "*/dev/tcp*", "*/dev/udp/*", "*import*pty*spawn*", "*import*subprocess*call*", "*TCPSocket.new*",
  "*TCPSocket.open*", "*io.popen*", "*os.execute*", "*fsockopen*", "*disown*", "*nohup*",

  // SO loads
  "*openssl*-engine*.so*", "*cdll.LoadLibrary*.so*", "*ruby*-e**Fiddle.dlopen*.so*", "*Fiddle.dlopen*.so*",
  "*cdll.LoadLibrary*.so*",

  // misc. suspicious command lines
   "*/etc/ld.so*", "*/dev/shm/*", "*/var/tmp*", "*echo*", "*>>*", "*|*"
)

上記のルールで行ったようにコマンドラインを例外とすることで、誤検知を恐れることなく、 cupsd 親も検出するように範囲を広げることができます。

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_suspicious_child_execution.toml

Elasticのアタックディスカバリー

ElasticのAttack Discoveryは、公開済みのコンテンツに加えて、環境内のアラートを分析し、大規模言語モデル(LLM)を活用して脅威を特定することで、コンテキストとインサイトを提供できます。次の例では、Attack Discovery はアクティビティの簡単な概要とタイムラインを提供します。 その後、動作は攻撃チェーンにマップされ、影響を受けるステージが強調表示され、アラートのトリアージに役立ちます。

まとめ

最近のCUPSの脆弱性の開示は、進化する脅威の状況を浮き彫りにし、印刷などのサービスを保護することの重要性を強調しています。 CVSSスコアが高いため、この問題は、特にこれらの欠陥がリモートで簡単に悪用される可能性があることを考えると、早急な対応が必要です。 このサービスは、一部の UNIX OS (サプライ チェーンに基づく) にデフォルトでインストールされていますが、プリンター ジョブをトリガーするには、手動のユーザー操作が必要です。 ユーザーは警戒を怠らず、狩猟を続け、リスクを過小評価しないことをお勧めします。 この脅威にはユーザーの操作が必要ですが、スピアフィッシングドキュメントと組み合わせると、被害者に不正なプリンターを使用して印刷を強要する可能性があります。 さらに悪いことに、@evilsocket で示されているように 、既存のプリンターを静かに交換するか、新しいプリンターをインストールします。

最初の開示はパート1とラベル付けされていたため、さらに多くのことが明らかになることを期待しています。 最終的に、可視性と検出機能は、これらのシステムの防御戦略の最前線にあり続け、攻撃者が見落とされた脆弱性を悪用できないようにします。

主な参考資料

本記事に記述されているあらゆる機能ないし性能のリリースおよびタイミングは、Elasticの単独裁量に委ねられます。現時点で提供されていないあらゆる機能ないし性能は、すみやかに提供されない可能性、または一切の提供が行われない可能性があります。

この記事を共有する