FreeRDP Windowsクライアントのクリップボードチャネルに新たに公表されたヒープバッファオーバーフローにより、悪意あるRDPサーバーがヒープメモリを破損させ、クリップボードリダイレクトが有効な接続先エンドポイント上でリモートコード実行(RCE)を達成できる可能性があります。
Akallabeth氏はFreeRDPのWindowsクライアント、具体的には静的クリップボード仮想チャネル(cliprdr)を処理するwfreerdpコンポーネントに重大な脆弱性を発見しました。
この問題は、クライアントがドラッグ&ドロップやWindowsエクスプローラーでの貼り付けといったクリップボード操作用のファイルデータを運ぶCBFILECONTENTSRESPONSE PDU応答を処理する際に発生します。
悪意あるRDPサーバーは、クライアント側のコピー処理における境界チェックの不備を突き、クライアントが本来要求したサイズを大幅に上回るペイロードを持つ応答を細工することができます。
この脆弱性の核心は、受信パケット長から算出されるサーバー制御下のサイズフィールド(cbRequested)にあります。このフィールドは、宛先バッファサイズ(cb)との照合検証を経ないまま、そのままCopyMemoryのコピー長として使用されてしまいます。
通常時、cbはクライアントが想定する正当なファイルコンテンツサイズを反映していますが、cbRequestedは最大65,536バイトまで操作可能であり、範囲外へのヒープ書き込みを引き起こすシナリオが成立してしまいます。
この脆弱性はバージョン3.28.0までのFreeRDP Windowsクライアントビルドに影響しており、3.29.0などそれ以降のリリースで修正が提供されています。
悪用が成立する条件は、被害者がクリップボードリダイレクトを有効にした状態でFreeRDPを使い、悪意あるまたは侵害されたRDPサーバーに接続することだけです。なお、クリップボードリダイレクトはWindowsクライアントではデフォルトで有効になっています。
接続が確立されると、攻撃者はユーザーがクリップボードのファイル操作、たとえばWindowsエクスプローラーでの貼り付け(Ctrl+V)を実行するのを待ちます。これによりクライアントは、クリップボード仮想チャネル経由でファイルコンテンツ要求を送信します。
悪意あるサーバーは要求されたデータ量を返す代わりに、dataLenおよびそこから導出されるcbRequestedが元のバッファサイズ(cb)を大きく上回る、過大なCLIPRDRFILECONTENTSRESPONSEを返します。
クライアントのCliprdrStreamRead関数は、攻撃者が制御するreqfsizeを使ってCopyMemory(pv, reqfdata, reqfsize)を呼び出すため、割り当てられたヒープバッファを超えて書き込みが行われ、ヒープメタデータや隣接オブジェクトが上書きされてしまいます。
ヒープレイアウトの条件が整えば(いわゆる「ヒープ風水」)、このオーバーフローによってIStreamの仮想関数テーブルポインタが破損し、その後のOLE呼び出し(たとえばRelease、Read、Stat)が攻撃者の指定したアドレスへジャンプするようになり、完全な制御フローの乗っ取りとWindows上のFreeRDPプロセス内でのRCEに至る恐れがあります。
この脆弱性は、必要となる操作の少なさと影響の大きさから重大(Critical)と評価されています。接続先クライアントは、悪意あるRDPエンドポイントに対してクリップボードが有効なファイル操作を行うだけで侵害され得るのです。
Akallabeth氏によれば、この脆弱性の悪用により任意のヒープメモリ破損が引き起こされ、現実的な攻撃シナリオではFreeRDPクライアントのセキュリティコンテキスト下でのリモートコード実行に至るとしています。
Windows向けにFreeRDPを利用している組織は、クリップボードチャネルが修正・強化された最新のサポート対象リリースへのアップグレードを優先すべきです。
パッチ適用が完了するまでの間、セキュリティチームはRDPセッションにおけるクリップボードリダイレクトを無効化すべきです。特に信頼できないサーバーやインターネットに公開されたサーバーへの接続では徹底してください。
リスクの高い環境では、RDPトラフィックを強固なアクセス制御の背後に隔離し、相互認証を強制するとともに、RDPクライアントからの発信接続を信頼できるサーバーのみに制限することを検討してください。
SOC調査の死角を排除し、ANY.RUNで脅威を早期に封じ込めることで、対応コストと業務への影響を軽減しましょう。
翻訳元: https://cyberpress.org/critical-freerdp-clipboard-flaw/