脆弱性の発見者:Cisco Talos の Tyler Bohan
概要
Talos では、FreeRDP ソフトウェアに複数の脆弱性を発見しました。FreeRDP は、マイクロソフトが最初に開発した Remote Desktop Protocol(RDP)を実装した無料のソフトウェアです。RDP を使用すると PC にリモート接続できるため、ユーザは離れた場所からでも操作できます。FreeRDP のライブラリはオープンソースのため、多くの商用 RDP ソフトウェアにも統合されています。
今回発見された脆弱性は、次の 2 種類に分類されます。
- 任意のコードが実行される脆弱性(2 件)
- Denial of Service(DoS)の脆弱性(4 件)
任意のコードが実行される脆弱性では、RDP サーバからの応答が細工されると、クライアント側で任意のコードが実行される危険性があります。Denial of Service(DoS)の脆弱性では、FreeRDP クライアントが強制終了されるおそれがあります。これらの脆弱性は、RDP サーバから送信されたネットワーク パケットの処理方法に起因します。具体的な問題は、解析対象データのサイズを、クライアント側による確認なしでサーバから送信する点です。攻撃者によりサーバが侵害されたり、中間者攻撃を介して脆弱性がエクスプロイトされたりする危険性があります。
詳細
コードの実行
TALOS-2017-0336(CVE-2017-2834):
FreeRDP RDP クライアントのライセンス受信機能に存在する、任意のコードが実行される脆弱性
この脆弱性は、ライセンス サーバの処理方法に起因します。サーバから送信されたライセンス メッセージには長さフィールドが含まれますが、FreeRDP ではこれを適切に検証できません。ライブラリでは、内部処理する際に長さフィールドの値を 4 減算します。ただしサーバが 3 以下の値を送信すると値がマイナスになり、割り当てられたメモリ バッファの領域外にパケット コンテンツが書き込まれることになります。この脆弱性により、FreeRDP クライアント側で任意のコードが実行される危険性があります。
詳細は、次の脆弱性レポートに記載されています。
TALOS-2017-0336
TALOS-2017-0337(CVE-2017-2835):
FreeRDP RDP クライアントの RDP 受信機能に存在する、任意のコードが実行される脆弱性
この脆弱性は、FreeRDP の RDP 受信機能に起因しています。前述の脆弱性と同様に、サーバから送信された RDP メッセージには長さフィールドが含まれています。このフィールドは、FreeRDP クライアント コードによって検証されません。長さフィールドの値がマイナスになる場合もあり、FreeRDP クライアント側で任意のコードが実行される危険性があります。
詳細は、次の脆弱性レポートに記載されています。
TALOS-2017-0337
サービス妨害(DoS)
TALOS-2017-0338(CVE-2017-2836):
FreeRDP RDP クライアントの独自証明書読み取り関数に存在する、Denial of Service(DoS)の脆弱性
この脆弱性は、独自の証明書の解析方法に起因しています。証明書の解析関数では、公開鍵が FreeRDP ライブラリによって解析されます。しかし、サーバ メッセージ パケット内で指定された鍵のサイズが 8 よりも小さくなる場合があり、FreeRDP ライブラリのクラッシュを引き起こします。
詳細は、次の脆弱性レポートに記載されています。
TALOS-2017-0338
TALOS-2017-0339(CVE-2017-2837):
FreeRDP RDP クライアントのセキュリティ データ GCC に存在する、Denial of Service(DoS)の脆弱性
この脆弱性は、セキュリティ データ関数の処理方法に起因しています。この関数は、サーバ パケットから長さフィールドの値を読み取ります。細工(長さフィールドの値を変更)されたパケットが攻撃者から送信されると、クライアントがクラッシュし、Denial of Service(DoS)状態に陥る危険性があります。
詳細は、次の脆弱性レポートに記載されています。
TALOS-2017-0339
TALOS-2017-0340(CVE-2017-2838):
FreeRDP RDP クライアントの製品ライセンス情報読み取り機能に存在する、Denial of Service(DoS)の脆弱性
この脆弱性は、製品ライセンス情報の読み取り方法に起因します。悪意のあるパケットにより、アプリケーションがクラッシュする可能性があります。問題のあるコードは、サーバ メッセージから符号なし整数を読み込み、長さのチェックの際に整数を 4 を加算します。ただし符号なし整数の値は一切検証されないため、4 が加算されるとオーバーフローが発生し、クライアントがクラッシュする可能性があります。
詳細は、次の脆弱性レポートに記載されています。
TALOS-2017-0340
TALOS-2017-0341(CVE-2017-2839):
FreeRDP RDP クライアントのチャレンジ パケット読み取り機能に存在する、Denial of Service(DoS)の脆弱性
この脆弱性は、ライセンス認証におけるチャレンジ パケットの処理方法に起因しています。悪意のあるパケットにより、アプリケーションがクラッシュする可能性があります。この脆弱性は、前述の TALOS-2017-0340 と同じ脆弱性です。
詳細は、次の脆弱性レポートに記載されています。
TALOS-2017-0341
検証されたバージョン:
FreeRDP 2.0.0-beta1+android11 – Windows, OSX, Linux
カバレッジ
この悪意ある試行は、以下の Snort ルールにより検出可能です。今後、脆弱性に関する新たな情報が追加されるまでの間は、ルールが追加されたり、現行のルールが変更されたりする場合がありますのでご注意ください。最新のルールの詳細については、FireSIGHT Management Center または Snort.org を参照してください。
Snort ルール:42941、42973、42998、42974-42975
本稿は 2017年7月24日に Talos Group のブログに投稿された「Vulnerability Spotlight: FreeRDP Multiple Vulnerabilities」の抄訳です。