
CVE-2023-43115 を理解するためのサンプル付きの簡単な解説書。
[!警告] これは主に自分自身が問題を理解し、サイバーセキュリティについて学ぶために書いたものです。したがって、誤りが含まれている可能性があります。
IJS デバイス(改良インクジェット印刷)を利用するには、Ghostscript が IJS サーバーを起動する必要があります。これは、IjsServer パラメータで指定されたパスを使用して行われます。IjsServer パラメータは、ファイルシステム内の任意のファイルを参照するように設定でき、Ghostscript はその指定されたファイルを実行します。これがどのように悪用される可能性があるかは容易に想像できます。例えば、以下の ghostscript コマンドを実行して "hello world" を表示できます。
❯ gs -sDEVICE=ijs -sIjsServer="bash -c 'echo Hello World>&2'"
GPL Ghostscript 9.55.0 (2021-09-27)
Copyright (C) 2021 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Hello World
それ自体はそれほど問題ではありません。なぜなら、このパラメータはユーザーが指定しなければならないからです。しかし、PostScript スクリプト内でこのデバイスと IJsServer パラメータを設定することも可能です。例えば attack_example_*.ps を参照してください(gs FILENAME で実行)。これにより、攻撃者がこのスクリプトを実行しているマシン上でコードを実行できる可能性があります。しかし、この問題は既知であり、公式に文書化されており、LockSafetyParams を true に設定することで防ぐことができます。
この CVE を LockSafetyParams が有効な状態で悪用するには、攻撃者は LockSafetyParams を変更するための動作するエクスプロイトを必要とします。しかし、そのようなエクスプロイトが利用可能な場合、使用されているバージョンに応じて他にも多くの攻撃ベクトルが存在する可能性があります。
修正の著者である Ken Sharp は、前述の LockSafetyParams セキュリティソリューションを「ハック的なもの」と呼びました。なぜなら、それは PostScript で実装されており、PostScript コードに対して脆弱だからです。これにより、過去にこのパラメータを上書きできるセキュリティ問題がいくつか発生しました(例については CVE-2018-19475 解説書を参照)。修正は、IjsServer パスの設定を防ぐ保護メカニズムを LockSafetyParams から新しい -dSAFER パラメータへ変更します。このパラメータは PostScript コードの影響を受けません。
[!注記] 脆弱なバージョン 9.55.0 のドキュメントでは既に
-dSAFERパラメータを使用するよう記載されていますが、これはドキュメントの誤りと思われます。