
Windows Error Reportingサービスは、先月のPatch Tuesdayで2つの特権昇格バグを修正しました。これら2つのバグにはCVE-2020-0753およびCVE-2020-0754が割り当てられています。どちらのバグも、サービスのファイルシステム操作における競合状態のバグを利用しています。しかし、これらの2つのバグは、小さな競合ウィンドウと不確かなファイルのドロップ場所のために、悪用がそれほど容易ではありません。ここでは、それらを悪用するためのテクニックを紹介します。
2つの競合バグの根本原因は私たちのレポートで示されていますが、実際の原因は 予測可能は脆弱性 と表現できます。WERサービスが一時ファイルを処理する際、C:\ProgramData\Microsoft\Windows\WER\Temp というファイル位置を操作します。これは、認証されたユーザーに対して読み書き可能なディレクトリです。つまり、中程度の整合性レベル(medium-IL)の通常ユーザーが、WERサービスによって作成されたファイルを上書きしたり、さらにはそれをファイルシステムのリンクに変換して、本来触れることのできない他のファイルを損傷/削除したりすることができます。
ファイル操作を安全に保つために、WERサービスは GetTempFileNameW という標準APIと、それをラップした wersvc.dll->UtilGetTempFile に依存しています。このAPIは、WerSvcが "WER****.tmp" の形式で未使用のランダムなファイル名を生成するのに役立ちます。
ファイル名のランダム部分は4バイトの16進数(0000~FFFF)で生成されます。ある番号がファイル作成に使用された場合、APIは別のランダムなファイル名を取得します。
この戦略には明らかに欠陥があります。WER0000.tmp から WERFFFE.tmp までの65535個のファイルを作成した場合、APIはランダムな番号を選び、そのファイル名が存在するかどうかをテストします(例:WERA560.tmp)。ファイルがすでに存在する場合、テストは WERA560.tmp から WERFFFF.tmp まで続けられます。テストが進行している間に、準備のためのタイミングウィンドウが現れます。なぜなら、私たちはWerSvcを GetTempFileNameW 呼び出しで4~5秒間停止させる方法を見つけたからです。これはかなり大きなタイミングの隙間です。その間に、サービスに固定ファイル名 WERFFFF.tmp の一時ファイルをドロップさせます。
サービスが WERFFFF.tmp という名前の一時ファイルを作成した後、APIは自動的にそのファイルへのハンドルを閉じ、ファイル名をサービスに返して、ファイルに対するさらなる操作を可能にします。これこそがバグを引き起こす位置です。以下の3つの条件が満たされます。
ここで、サービスは ファイルにコンテンツを書き込み、それを削除します。 書き込みと削除の両方が、ファイルシステムリンクと特定の悪用テクニックを利用することにより、特権昇格を引き起こします。
このバグを任意のファイル削除に変えるために、私たちは複数のディレクトリジャンクションを創造的に利用して悪用を完了させます。私たちのエクスプロイトは以下の手順を含みます。
WER***.tmp を $pwd\1\ に配置し、ジャンクション $pwd\2\ -> $pwd\1\ を作成します。$pwd\2\ でこの関数を継続的にトリガーするプロセスを作成し、別のプロセスでコマンド SetOplock $pwd\1\WERFFFF.tmp を継続的に実行します。$pwd\2\ -> \RPC CONTROL\ にジャンクションを作成し、次にオブジェクトシンボリックリンク \RPC CONTROL\WERFFFF.tmp -> $target および \RPC CONTROL\WERFFFF.tmp.etl -> $target を作成します。詳細な悪用手順とPoCはWERReport-CVE-2020-0753で提供されています。
GetTempFileNameW の欠陥を悪用することで、サービスが操作する予測可能な位置を獲得し、複数レベルのファイルシステムジャンクションを利用することで、競合状態を確実に悪用可能にします。
一方、この種の競合バグはファイルの上書き問題を引き起こす可能性もあることに気づきました。その場合、特定の状況下で特権昇格のバグにつながる可能性があります。
任意のファイル破損(ファイル内容のごく一部(63バイト未満)を制御できる場合)がEoPに変換できる理由を説明するには、Windows Defenderの動作メカニズムに注意を払う必要があります。
Windows Defenderにはマルウェアシグネチャデータベースがあります。ファイルにマルウェアシグネチャが含まれている場合、Defenderはそれをマルウェアと見なして削除します。しかし、この機能は追加の攻撃面をもたらします。例えば、WCTF2019では、tokyowesternsの@icchyが、"Gyotaku The Flag"という名前のWindows CTFチャレンジを設計しました。これは情報漏洩のオラクルとしてこの機能を利用しています。
ここでは、ファイル内容の部分的な制御を伴う任意のファイル破損がある場合、Windows Defenderのこの機能を利用して任意のファイルを削除します。マルウェアシグネチャをファイルに書き込み、Windows Defenderによる既定のスキャンをトリガーするだけで、ファイルはDefenderの隔離領域に移動されます。このファイルは、通常のユーザー(中程度の整合性レベルの非管理者ユーザー)がスキャン操作を2回トリガーするだけで削除できます。
したがって、バグを使用してターゲットファイルにマルウェアシグネチャ文字列を配置できる限り、任意のファイル破損バグを任意のファイル削除に変換できます。
このテクニックを利用することで、Defenderの助けを借りて任意のファイル削除を獲得します。任意のファイル削除は、さらなる特権を得るためにはるかに簡単に悪用できます。
Microsoft OneDriveは、個人用クラウドストレージサービスを提供するアプリケーションバンドルです。このアプリケーションはWindows 8以降、既定のインストールオプションとしてWindowsに統合されています。調査中に、OneDriveのサービス関連スケジュールタスクにおける6つの脆弱性が発見され、MSRCに報告されました。
以下は、Microsoft OneDrive関連のスケジュールタスクで公開予定の脆弱性の表です。
これら6つのバグはすべて、サービスがハードリンクとシンボリックリンクを不適切に処理し、通常のユーザーが制御可能な場所を操作する際に発生します。これらのバグの悪用中に生じる困難の1つは、ファイル名に通常、現在のプロセスのPIDやファイル操作時のタイムスタンプが含まれていることです。どちらの困難も、サービスが実行時にロードしようとする一意のDLLファイルにオプロックを設定することで解決できます。これにより、サービスが後で操作しようとするファイル名を予測するために必要なすべての情報を取得できます。例としてのPoCはFileSyncConfigTemp_hardlinkディレクトリに提供されています。
上記の6つの脆弱性はすべて、完全なレポートとPoCプログラムとともに提供されています。ほとんどのバグは最初に任意のファイル破損を引き起こしますが、この種のバグは依然としてシステムクラッシュ(重要なシステム構成ファイルを上書きすることによる)を引き起こし、それらはすべてWindowsの再インストールを必要とします。したがって、Windowsシステムのサービス拒否(DoS)バグタイプの基準を満たしています。
さらに、この種のバグは実際には特定のコンテキストで特権昇格を引き起こす可能性があります。任意のファイル上書き問題を利用して任意のファイル削除プリミティブを達成する悪用テクニックについて説明したため、特権昇格は達成可能です。
Zhiniang Peng of Qihoo 360 Core Security
Feb 02 2020: 脆弱性を報告
Feb 08 2020: MSRCが調査し、当社が提出したOneDriveの6つのバグについて返答。ユーザーの操作が多すぎる/信頼性の高いエクスプロイトを構築するのが難しすぎるという理由で修正しないという結論。
Feb 08 2020: 当社の返答:ユーザーの操作は必要ありません。タスクスケジューラが実行されるのを待つだけで済みます。したがって、このシナリオは典型的です。
Feb 11 2020: MSRCの返答:ユーザーのマシン上で特定のファイルをどのように取得しますか?そして、そのファイルのすべての順列をそのフォルダに配置しているのですか?日付/時間/PIDに正確に一致する必要がありますか?これらの理由から、これはユーザーの多大な労力を要するように思われます。
Feb 11 2020: 当社の返答:私たちのPoCは簡略化されたバージョンです。ファイル名を予測する労力を減らすためです。実際には、オプロックを設定するだけで済みます。そうすれば、{pid}、{hour}、{data}のすべてを取得できます。したがって、ユーザーの操作は必要ありません。
Feb 12 2020: それらの6つの脆弱性に関するWriteupを公開してもよいかどうかを尋ねました。
Feb 13 2020: MSRCの返答:Writeupを投稿しても構いません。
Feb 22 2020: 詳細を公開
ハードリンクはWindows Insider Previewビルドですでに修正されていますが、最新のリリース版Windowsでは修正されていません。そして、サポートされているすべてのOSにバックポートする計画はないようです :( 。これらの脆弱性の修正を拒否することは、責任ある行動には見えません。
| 脆弱なプログラム | 種類 | POC提供 |
|---|
| FileSyncConfig.exe | HardLink | yes |
| FileSyncHelper.exe | HardLink | yes |
| OneDriveFileSyncConfig.exe | SymLink | yes |
| OneDriveSetup.exe | HardLink | yes |
| OneDriveSetup.exe | HardLink | yes |
| OneDriveStandaloneUpdater.exe | HardLink | yes |