CVE-2024-7479 TeamViewer ドライバーインストールの不適切な署名検証
著者: Marcos Accossatto
デモンストレーション目的のみです。完全なエクスプロイトは、Windows 用 Team Viewer の脆弱性のあるバージョンで動作します。
はじめに
このエクスプロイト PoC は、Pedro Gabaldon による CVE-2024-7479 の PoC を Python で実装したものです。
このスクリプトには、エクスプロイト用の IPC プロトコルを処理するすべてのクラスが含まれています。
最終的なエクスプロイトには、dbutil_2_3.sys ドライバー と BYOVDKit プロジェクト からコンパイルされた実行可能ファイルが、このスクリプトと同じローカルディレクトリに存在する必要があります。
このスクリプトは TeamViewer 15.57.5 に対してテストされました。
スクリプトのエクスプロイト手順
このスクリプトは、脆弱性を悪用するために以下の手順を実行します。
- 127.0.0.1 のポート 5939 に対してソケットを開きます。
- 以下のコマンドラインで BYOVDKit.exe を実行し、ドライバーが既にインストールされているかテストします:
BYOVDKit.exe 1 token 4
- getClientAuth 関数を使用して最初の IPC リクエストを組み立て、サーバーに送信します。
- getServerChallengeFromResponse 関数を使用してサーバーの応答から response_challenge を取得します。
- response_challenge と "secret" 値を連結し、その MD5 ハッシュ値を計算して、getClientAuth 関数を使用して 2 番目の IPC リクエストを組み立てるために使用します。
- 認証を完了するために 2 番目のリクエストを送信します。
- Python プロセスの PID を取得し、TeamViewer.exe 実行可能ファイルのバージョンを特定して抽出し、getControlRequest 関数を使用して 3 番目の IPC リクエストを組み立ててサーバーに送信します。
- 同期構成が完了するまでサーバーから IPC パケットを読み取ります(通常は 21 パケット)。
- TeamViewer の x64 ディレクトリから TeamViewerVPN.cat ファイルをスクリプトディレクトリにコピーします。
- TeamViewer の x64 ディレクトリから TeamViewerVPN.inf ファイルをスクリプトディレクトリにコピーし、ランダムな inf ファイルに名前を変更します。
- スクリプトディレクトリの dbutil_2_3.sys ファイルを TeamViewerVPN.sys に名前を変更します。
- getInstallDriverRequest 関数を使用して 3 番目の IPC リクエストを組み立て、サーバーに送信します。
- ユーザーが このドライバ ソフトウェアをそれでもインストールする ボタンをクリックしてドライバーのインストールを完了し、ENTER を押すまで待ちます。
- コピー/作成/名前変更されたすべてのファイル(TeamViewerVPN.cat、TeamViewerVPN.sys、およびランダムな .inf ファイル)を削除します。
- 以下のコマンドラインで BYOVDKit.exe を実行し、システムとして cmd を起動します:
BYOVDKit.exe 1 token 4
使い方
- 通常のユーザーとして cmd.exe を実行します。
- whoami を使用してユーザー名を確認します。
- python CVE-2024-7479_PoC.py でスクリプトを実行します。
- ドライバーのインストール警告が表示されたら、このドライバ ソフトウェアをそれでもインストールする メッセージをクリックしてドライバーをインストールします。
- cmd ウィンドウに戻り、ENTER を押してスクリプトの実行を続行します。
- whoami を使用して、ユーザー名が nt authority\system であることを確認します。

参考文献
お役に立てば幸いです。ご不明な点があれば、[email protected] までお問い合わせください。
お楽しみください!