発見者:Tyler Bohan(Cisco Talos)今回の脆弱性の調査に協力してくださったニューヨーク大学の Osiris 研究室に感謝の意を表します。
Pharos PopUp Printer は、1 つの印刷ポイントへの複数接続を管理するために広く利用されている印刷ソフトウェアです。ルート権限で実行するサービスは、ネットワーク接続に対してオープンになっているため、攻撃者の格好の標的となっています。Talos は、Pharos PopUp プリンタ クライアント バージョン 9.0 の psnotifyd アプリケーションに存在する 3 つのコード実行の脆弱性と、Denial of Service(DoS) の脆弱性の情報を公開しています。
TALOS-2017-0280、TALOS-2017-0283 コード実行の脆弱性 (CVE-2017-2785、CVE-2017-2788)
TALOS-2017-0282 Memcpy コード実行の脆弱性 (CVE-2017-2787)
TALOS-2017-0281 DecodeString Denial of Service(DoS)の脆弱性 (CVE-2017-2786)
詳細
TALOS-2017-0280、TALOS-2017-0283
セキュリティ ホールとなるバッファ オーバーフローの脆弱性が、アプリケーションの DecodeString と DecodeBinary 機能に存在します。いずれの場合も、悪意のあるパケットが作成され、攻撃者が設定するデータ長を表す値と一緒に、バイナリ データまたはストリング データが含まれる被害者のコンピュータに送られます。データ長に過剰に大きな値を設定することで、割り当てられたバッファの外側に書き込むループがそれぞれの機能で発生します。その結果、バッファ オーバーフローが起こり、最終的にリモートコードが実行されます。詳細は、こちらとこちらをご覧ください。
TALOS-2017-0282
Blob データは、接続が確立されると同時にクライアントに返されるエンコードされたデータで、攻撃を開始するために攻撃者から渡されたデータによって部分的に制御されます。BlobData 機能はパケットの最後に到達するまでレジスタをデクリメントし続けることで、このデータを解析します。ただし、チェック機能がないため、ゼロに到達したあともレジスタはデクリメントされ続けます。これが発生すると、memcpy により境界外への書き込みが起こります。被害者のコンピュータへの複数接続を一度に引き起こすことで、この脆弱性が不正利用され、攻撃者が支給するコードが実行可能になります。詳細は、こちらをご覧ください。
TALOS-2017-0281
DecodeString 機能は、パケット内の値によって表されたデータ長を受け取ってデコードします。攻撃者は無効なデータ長を指定する悪意のあるパケットを作成することができるため、無効なポインタが、逆参照されたメモリ境界外の場所をポイントするという結果を引き起こします。これが境界外アクセスと Denial of Service(DoS) の状態につながります。詳細は、こちらをご覧ください。
テスト済みバージョン
Pharos PopUp プリンタ クライアント バージョン 9.0
カバレッジ
この悪意ある試行は、以下の Snort ルールにより検出可能です。今後、脆弱性に関する新たな情報が追加されるまでの間は、ルールが追加されたり、現行のルールが変更されたりする場合がありますのでご注意ください。最新のルールの詳細については、FireSIGHT Management Center または Snort.org を参照してください。
Snort ルール:41505 ~ 41510
本稿は 2017年3月7日に Talos Group のブログに投稿された「Vulnerability Spotlight: Pharos Vulnerabilities」の抄訳です。